例: A.dat の先頭バイナリデータが「1a2b3c4d5e6f」となっていて、1a2b3c4dまでを抽出し A[1a2b3c4d].datにリネーム、B.dat以下も同様に…という感じです。
一般的なリネームソフトではこの処理のできるものが見当たらず、CUIツールはいくつか当たりましたが出力フォーマットに余計なものが付いたりバッチ処理させようとするとエラーになったりで途方に暮れています。
そもそもbatファイルのFor文で頭から煙が出るレベルのPCスキルなので、バッチ処理になるならどう書けばいいかもご教授願いたいです。
環境はWindows7 x64です。よろしくお願いいたします。
ただ、このバッチだとファイル単体なら正常に処理してくれるんですが引数にワイルドカードの入ったものを指定すると構文エラーになってしまいます。
先にバッチファイル側でワイルドカードを展開してやれば良いかと。
@echo off setlocal ENABLEDELAYEDEXPANSION for %%f in (%1) do ( for /f "usebackq tokens=*" %%i in (`strings.exe -q -a -b 10 %%f`) do set RESULT=%%i ren "%%f" "!RESULT!+%%f" ) endlocal
Windows環境だとどうやっても何か言語処理系をインストールしてプログラムかスクリプトを書く必要があります。
この作業をする目的によっては直接解決できなくても別のアプローチがありそうな気がしますが。
結論から言うと解決しました…がまだ疑問が。
Stringsという実行結果として文字列だけを返してくれる良いプログラムを見つけ、グーグル先生に頼りつつ見よう見まねで書いたバッチファイルが以下です。
------------------------------------------------------------
for /f "usebackq tokens=*" %%i in (`strings.exe -a -b 10 %1`) do @set RESULT=%%i
REN %1 %RESULT%+%1
------------------------------------------------------------
ただ、このバッチだとファイル単体なら正常に処理してくれるんですが引数にワイルドカードの入ったものを指定すると構文エラーになってしまいます。
当初の目的は該当バイナリファイルのリストを作り、別のバッチからCallで1ファイルずつこのバッチに投げて処理させることで果たせましたが、モヤモヤが残ります。
後学のために正しい書き方を知りたいのでお暇な方いらっしゃいましたらご回答お願いします。
ただ、このバッチだとファイル単体なら正常に処理してくれるんですが引数にワイルドカードの入ったものを指定すると構文エラーになってしまいます。
先にバッチファイル側でワイルドカードを展開してやれば良いかと。
@echo off setlocal ENABLEDELAYEDEXPANSION for %%f in (%1) do ( for /f "usebackq tokens=*" %%i in (`strings.exe -q -a -b 10 %%f`) do set RESULT=%%i ren "%%f" "!RESULT!+%%f" ) endlocal
おお、本来の(当初の質問の)ファイル群でも問題なくリネームされました。素晴らしいです。アドバイスも参考にさせていただきます。
> バッチは制限が多くてレアケースとか異常ケースに対応するのは難しいです…。
上の回答者様も仰ってますが、やはり素のWindowsでこういうバッチ処理を行うのはやりにくいんですかね。私自身も調べているとLinuxならもっと簡単だの融通がきくだの書いてるページが多かったですし。
何はともあれ、お付き合いいただきありがとうございました。大変勉強になりました。
XP世代のサポートが終了したことだし、もう(環境も人も)PowerShellが使えることを前提にしても良いのではないですかね。
おお、本来の(当初の質問の)ファイル群でも問題なくリネームされました。素晴らしいです。アドバイスも参考にさせていただきます。
2015/09/16 13:31:55> バッチは制限が多くてレアケースとか異常ケースに対応するのは難しいです…。
上の回答者様も仰ってますが、やはり素のWindowsでこういうバッチ処理を行うのはやりにくいんですかね。私自身も調べているとLinuxならもっと簡単だの融通がきくだの書いてるページが多かったですし。
何はともあれ、お付き合いいただきありがとうございました。大変勉強になりました。
XP世代のサポートが終了したことだし、もう(環境も人も)PowerShellが使えることを前提にしても良いのではないですかね。
2015/09/16 15:20:45