フォルダ内にたくさんのZipファイルがあります。各Zipファイルには、exp_1.txt
という名前のファイルが含まれています。各Zipファイルを解凍し、各Zipファイルから抽出したファイルの名前をZipファイルの名前に変更したいと思います。
Zipファイルの名前はパターンや日付の構造には従いませんが、すべて異なります。 exp_1.txt
ファイルをZipファイルと同じディレクトリに抽出する方法を理解しましたが、抽出元のZipファイルの名前と一致するようにexp_1.txt
の名前を変更することができません。 。
もう一度簡単に言うと、TuesdayReport.Zip
から唯一のファイルexp_1.txt
を抽出し、TuesdayReport.txt
と同じディレクトリにあるTuesdayReport.Zip
に名前を変更したいと思います。
現在、7z x
を使用して、Zipファイルが配置されているのと同じディレクトリにファイルを抽出しています。これをバッチファイルから実行できるようにしたいと思います。
ここ からダウンロードできる7Zipコマンドラインエディションを使用しないのはなぜですか?
このZipファイル内には、バッチプロセス中に役立つすべてのスイッチとコマンドを含むCHm形式のヘルプファイルがあります。
forfiles /M *.Zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"
これにより、現在のディレクトリ内のすべてのZipファイルから_exp_1.txt
_という名前のファイルが抽出されます。名前はZipファイルと同じですが、拡張子はtxt
ではなくZip
です。
for %a in (*.Zip) do @(7z l "%~a" -ir!exp_1.txt |findstr exp_1.txt) && 7z e "%~a" -ir!exp_1.txt -so >"%~na.txt"
これはコマンドラインから直接実行する必要があります。バッチから実行する場合は、_%
_を2倍にする必要があります。
内容:
for
ループはすべてのZipファイルを列挙します7z
_呼び出しとfindstr
の呼び出しにより、抽出が実行されます/アーカイブに特定のファイルが含まれている場合にのみファイルが生成されます7z
_呼び出しは、実際にファイルを標準出力(_-so
_スイッチ)に抽出し、stdoutをアーカイブ(マイナス拡張子)と同じ名前のファイルにリダイレクトします。 _%~n
_修飾子は、ベース名のみ(拡張子なし)を取るようにcmdに指示しますアーカイブに同じ名前のファイルが(異なるディレクトリに)複数ある場合、予期しない結果が生じる可能性があることに注意してください。
バッチで配置する場合は、ファイル名を変数(ループの前)として設定して、繰り返し関連のエラーを回避することもお勧めします(上記のコマンドで3回入力する必要があります)。