根據存檔名稱自動提取並重新命名提取的文件

根據存檔名稱自動提取並重新命名提取的文件

我的資料夾中有一堆 zip 檔。每個 zip 檔案中都有一個名為exp_1.txt.我想解壓縮每個 zip 檔案並將每個 zip 檔案中提取的檔案重命名為該 zip 檔案的名稱。

zip 檔案名稱不遵循任何模式或日期結構,但各不相同。我已經弄清楚如何將exp_1.txt文件提取到與 zip 檔案相同的目錄中,但無法弄清楚重命名exp_1.txt以匹配從中提取的 zip 檔案的名稱。

再次用更少的話來說:TuesdayReport.zip我想提取唯一的文件exp_1.txt並將其重命名為TuesdayReport.txtTuesdayReport.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 次)。

相關內容