バッチで,複数ファイルを一括で「連番リネーム」するサンプルコード (写真や画像ファイルをフォルダ内で自動ナンバリングし,簡単に整理)
Windowsバッチで,複数ファイルを一括でリネームするサンプルコード。
フォルダ内の全ファイルについて,
連番をつけながら自由に名称変更できる。
デジカメの画像・写真などの整理に便利。
マッチ対象のファイルパターンや,リネーム方法などは
正規表現で自由に組み替えられる。
ナンバリングは必須ではなく,番号なしでリネームすることもできる。
対象のフォルダ内に下記のバッチファイルを置いて,ダブルクリックするだけ。
_リネーム.bat
@if(0)==(0) ECHO OFF rem このバッチのあるフォルダをカレントとしてWSHを実行 cscript.exe //nologo //E:JScript "%~f0" %0\.. @pause GOTO :EOF @end // 共通関数 // デバッグ出力 function log(s){WScript.Echo(s);} // 正数を指定桁に0埋め Number.prototype.zero_padding = function( digit_num ){ // 整数化 var num = parseInt( this, 10 ); // 0埋めの必要がない場合 if( ( "" + num ).length >= digit_num ){ return ( "" + num ); } // 指定した条件まで0埋め var continue_flag = true; var zeros = "0"; while( continue_flag ){ if( ( zeros + num ).length >= digit_num ){ continue_flag = false; }else{ // 0を付け足す zeros += "0"; } } return zeros + num; }; // メイン処理 log("カレントフォルダ内でリネームします。"); // このバッチのあるフォルダ var current_dir_path = WScript.Arguments(0); // カレントフォルダを変更 WScript.CreateObject("WScript.Shell").CurrentDirectory = current_dir_path; //log( "現在のカレントディレクトリ:" // + WScript.CreateObject("WScript.Shell").CurrentDirectory ); // このフォルダ内のファイルを全取得 var fso = WScript.CreateObject("Scripting.FileSystemObject"); var folder = fso.GetFolder( current_dir_path ); var enumerator = new Enumerator( folder.Files ); // 配列に移し変えて名前順にソート var arr = []; for ( ; ! enumerator.atEnd(); enumerator.moveNext() ){ arr.push( enumerator.item() ); } arr.sort(function(item1, item2){ return ( item1.Name > item2.Name ); }); // 一つずつ処理 var cnt = 1; for ( var i = 0; i < arr.length; i ++ ){ // このファイルの名前 var item = arr[i]; var file_name = item.Name; // マッチするものに絞り込む // // ★マッチ条件は適宜書き換える // var m; if( m = file_name.match(/^.+\.png$/) ){ log( "リネーム対象:" + file_name ); // キャプチャ括弧の参照 //log( m[1] + ", " + m[2] ); // 新ファイル名 // // ★リネーム方法は適宜書き換える // var new_file_name = "photo_" + cnt.zero_padding(3) + ".png" ; //log( new_file_name ); // リネーム実行 item.Name = new_file_name; log( "リネームしました。" + new_file_name ); // 連番をインクリメント cnt ++; } } log("全リネーム完了");
★マークの付いた2箇所を書き換えれば,自由に処理を変更できる。
続きを読むWebページの「コピペ禁止」を解除・回避するJavaScriptコード。スクリプト有効のまま,ブラウザ上で右クリック・テキスト選択の禁止タグを迂回する
Webページ上で,「コピペ禁止」を解除するJavaScriptコード。
ブラウザ上で,マウスで文章を選択して,右クリック→コピー
という操作は,HTML側で禁止できる。
Webサイトの内容が, コピペで無断転載されるのを防ぐためだ。
しかし,その禁止をかいくぐる方法もある。
たとえばブラウザの設定で「JavaScriptを無効にする」というのが一番簡単な方法。
もしJavaScriptを有効のまま,コピペ禁止だけを解除したい場合,
下記のJavaScriptコードを実行すればよい。
(Firefoxなら,Firebugのコンソール上で実行できる。)
// HTML5ではないページもあるし, // Arrayのイテレータがない場合もあるので // 古典的な記法を使う。 // 入れ替えるイベントリスナ var f = function(){ return true; }; // 書き換え対象のDOMイベント名 var evs = "beforecopy beforecut click contextmenu copy dragstart mousedown mouseup selectstart".split(" "); // 書き換え対象のCSS属性名 var props = "userSelect MozUserSelect MsUserSelect WebkitUserSelect".split(" "); // 1要素に対する書き換え操作 function replace_events( elem ){ // イベント for( var i = 0; i < evs.length; i ++ ){ elem[ "on" + evs[i] ] = f(); } // CSS属性 if(elem.style){ for( var i = 0; i < props.length; i ++ ){ elem.style[ props[i] ] = ""; } } } // 全要素に対し var elems = document.getElementsByTagName("*"); for(var i = 0; i < elems.length; i ++){ replace_events( elems[i] ); } replace_events( document );
これで,どんなページでも大概はコピペ可能。
サイト側が WordPress のプラグインでコピペ禁止処理を実装している場合なんかは,これで突破できる。
注意:悪用を禁ずる。
解除コードの解説
Webページ上でコピペを禁止する方法は2つあって,
(1)JavaScriptを使う手と
(2)CSSを使う手
がある。
これらの「コピペ防止」テクニックは,下記の記事にまとめられている。
HTML・CSS3・JSを使い,Webサイトを「コピペ禁止」にする方法のまとめ。右クリックや文字列選択・内容の複製をできなくする無効化テクニック集
http://computer-technology.hateblo.jp/entry/20150717/p1
- Webページを「コピペ不可能」にするためのテクニックまとめ。
- マウスで右クリックしてコピー,Ctrl + C で無断転載,などの行為を禁止できる。 CSSやJavaScriptでの手法を網羅した。
jQueryを使ったサクサクWebスクレイピングのサンプルコード (WSH/JScriptバッチでIEを自動操作する時の $ セレクタが柔軟すぎる!)
バッチでIEを自動操作する際に,jQuery を使ってスクレイピングする。
$() によるセレクタ機能をはじめ,
jQueryのDOM操作をフルに WSH バッチ上で活用できる。
下記のバッチをただ単にダブルクリックするだけで,全処理を実行できる。
jQueryをダウンロードする必要はない。
hoge.js
// ------------------ jQueryでスクレイピング ------------------ // 現在のページ内でjQueryを有効化する(スクレイピングしやすいように) function ie_inject_jquery( ie ){ // 既に$があるか //if( ie.document.$ ) return; // script要素を新規作成 var elem_head = ie.document.getElementsByTagName('head')[0]; var elem_script = ie.document.createElement('script'); elem_script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"; // https://developers.google.com/speed/libraries/devguide#jquery // ロード完了時のイベントを定義 var load_complete = false; elem_script.onload = function(){ load_complete = true; }; // HEADにscriptタグを追加 elem_head.appendChild( elem_script ); // scriptのロード完了まで待つ while( load_complete ){ WScript.Sleep( 500 ); } // $を評価可能になるまで待つ while( ! ie.document.parentWindow.$ ){ WScript.Sleep( 500 ); } // WSHのグローバルで参照を定義 $ = ie.document.parentWindow.$; //log("IEにjQuery注入完了"); return; } /* // IE上でjQueryを使う function $( s ){ return ie.document.parentWindow.$( s, ie.document ); } ↑ $.trim など様々な関数に対応したいので, この関数は不要。 */ // 遷移先の全ページ内でjQueryを有効化する always_enable_JQuery = false; function ie_enableJQuery(){ always_enable_JQuery = true; } // ------------------ IEの基本操作 ------------------ // IE起動 function getIE() { var ie = WScript.CreateObject("InternetExplorer.Application") ie.Visible = true; ie_goto_url( ie, "http://www.google.co.jp/" ); //log("ブラウザでのアクセスを開始します。"); return ie; } // IEがビジー状態の間待ちます function ie_wait_while_busy( ie, _url ) { var timeout_ms = 45 * 1000; var step_ms = 100; var total_waited_ms = 0; while( ( ie.Busy ) || ( ie.readystate != 4 ) ) { WScript.Sleep( step_ms ); // タイムアウトか? total_waited_ms += step_ms; if( total_waited_ms >= timeout_ms ) { /*log( "警告:タイムアウトのため,リロードします。(" + ie.LocationURL // http://blog.livedoor.jp/programlog/archives/298228.html + ")" );*/ // どこかに移動中なら,そこへの移動を再試行 if( _url ) { //log( _url + "への遷移を再試行"); ie_goto_url( ie, _url ); } else { log( "リロード中"); // 移動先が明示されていなければリロード ie.document.location.reload( true ); ie_wait_while_busy( ie ); } break; } } WScript.Sleep( 1000 ) } // http://language-and-engineering.hatenablog.jp/entry/20100310/p1 // http://language-and-engineering.hatenablog.jp/entry/20100403/p1 // ページを移動 function ie_goto_url( ie, url ){ //log("アクセスします:" + url); ie.Navigate( url ); ie_wait_while_busy( ie, url ); //log("ページを開きました。"); // IEで常にjQueryを使うか if( always_enable_JQuery ){ ie_inject_jquery( ie ); } } // デバッグ用 function log(s){ WScript.Echo(s); } // ------------------メイン処理 ------------------ // IE起動 var ie = getIE(); // 今後の遷移先の全ページ内でjQueryによるスクレイピングを有効化 ie_enableJQuery(); // 遷移 ie_goto_url( ie, "http://www.yahoo.co.jp/" ); // スクレイピング実行 log( $("div#topicsfb ul.emphasis li a") // jQueryセレクタが使える .map(function(){ return $(this).html(); }) .get() .join("\n") );続きを読む