我的資料夾中有一堆 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
.
目前我正在使用7z x
將文件提取到 zip 檔案所在的同一目錄中。
答案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
這將從目前目錄中的每個 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"
這是直接從命令列運行,如果你想從批次運行它,你需要加倍%
它能做什麼:
for
循環枚舉每個 zip 文件- 第一次
7z
呼叫並findstr
確保運行提取/僅當存檔包含特定文件時才產生文件 - 第二次
7z
呼叫實際上將檔案提取到標準輸出(-so
開關)中,並將標準輸出重定向到與存檔名稱相同的檔案(減去副檔名)。修飾符%~n
指示 cmd 僅採用基本名稱(不含副檔名)
請注意,如果檔案中有多個同名檔案(位於不同目錄中),則可能會產生意外結果。
如果您將其批量放入,那麼我還建議將文件名設為變數(循環之前)以避免重複相關錯誤(您需要在上面的命令中輸入 3 次)。