2017年6月10日土曜日

.BAT実行の敵なばっち~ファイル名の回避、、、、が出来なかったので力業で逃げた記録 (6/10 追記)

 ドライブA:フォルダ無し ファイル数 約三万 フォルダを作らず直下に全て保存
 ドライブB:フォルダ250 ファイル数 約三万 ジャンル別にフォルダを切る
 あとエンコード前ファイルが無節操に詰まったドライブ三つ
 以上、自宅のネットワークに大量に貯まってしまったファイルを手軽にユル~く利用できないか、先日から試行錯誤してあるバッチファイルが形になったのですが、Windows DOSのバッチである関係上ファイル名により処理されない事あり、その回避方法を調べてましたがスマートな解決が出来ず結局力業になってしまったログです。

 なんで今更ながらDOSのBATプログラムを作ろうと思い立ったかと言うと、今回使った機能がDOSコマンドで、大量にファイルを扱う関係上フォルダ検索は軽ければ軽いほどよく、DIRコマンドの検索速度がWindowsエクスプローラーとは比べにならない圧倒的なの検索速度だったからです。ただ如何せんコマンドベースなので使いがってが悪いのが難点したから、その辺りをBATでなんとからなんか試行錯誤してました。

 そのBATプログラム。標準的なファイル名では特に問題なかったのですが、今回特に整理したかったと言うか思い立った原因のファイル群を処理した時に「指定されたファイルが見つかりません。」エラーが頻発しました。
約15000中1000の同様エラーが発生したので調べてみると、ファイル名に使われてた特定の文字が原因とわかりました。 それは 感嘆符% パーセント;セミコロン、 ·てんの四つと下記のような特殊文字を含むファイル名でした。

≡MMD≡ Haku x Luka 。・゚・。.☆ Ð◎ᾔ❝т ℒℯ⊥ ℳε Ð◎ẘη ★゚'  .  '゚ [4KUHD60FPS] [Sub ESP][2560x1440].MP4
≡MMD≡ Miku X IA ・   ・。☆ Åℊε♄α Ḡłøẘ   アゲハグロウ ☆ ゚¨゚[4KUHD60FPS][Sub ENG][3840x2160].MP4

 この時、実際のファイル名とBATからから出てきた名前とに差が出てファイル名が一致せず「ファイルが見つからない」原因となってたみたいです。ちなみに何故か通る外国語文字もある訳でその辺りの違いがイマイチ判らんorz

 まずは 感嘆符% パーセント、 ;セミコロン、 ·てんの四つを半角から全角の!%;・にBATやPowerShellなどのスクリプトでスマートに置換出来ないか考えてみましたが、これらの記号はBATの処理系に関わっているため処理を記述するのが難しいと解っただけでした。 
 結局、これらの文字の置換にはフリーソフトの「Flexible Renamer(窓の杜)を使って置換する事にしました。
指定もわかりやすくサブフォルダの検索もサポートしてくれてサクッと変換できました。今回は使用しませんでしたが正規表現なども使えるそうです。
 次にDOS窓を開いてファイルの置きパスをカレントにして、下のテストコードを流すと、実際のBATを実行すると「ファイルが見つからない」エラーになるファイルが$フォルダに残ります。※既に$フォルダがあるならmd $ && は除外して実行。
md $ && move * $ && for /f "delims=;" %j in ('dir $\*.* /b /s /a-d') do move "%j" .

 ファイルの場所にバッチファイルを置いてクリック実行させるならこれを記述したバッチファイル$check.batとかを作っておいてください。 *.mp4と指定しているのはそうしないと.batも移動の対象になるため。必要に応じて変更や追加をしてください。
cd %~dp0
md $
move *.mp4 $
for /f "delims=;" %%j in ('dir $\*.* /b /s /a-d') do move "%%j"

 残ったファイルを見ると特殊文字部分を近い形の文字にチマチマと変えないとダメみたいですね。残ったファイルはマトメて置いとくしかないでしょうか、、、、
 ちなみに取り残されたこれらの特殊文字を含むファイルをどんな風にゲツしたファイルかは察してくださいな感じです(;´Д`A ```

 特殊文字ファイル取り扱いが決まったので大量に貯まったファイルを手軽にユル~く利用」するBATは近日中に公開予定です。




0 件のコメント:

コメントを投稿