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