時間前,我要求一些幫助建立一種短批處理文件使用7zip的壓縮樹中的文件,請參閱以下鏈接裏面:跳躍在「For」批處理文件中循環
Compress separately files within subfolders
現在我想要避免已經壓縮的文件(.7z,.zip文件)並跳轉到下一個項目。
此外,我想刪除通過在同一文件夾上多次使用原始批處理文件創建的以前的壓縮文件(如'.7z.7z'或' .zip.7z')。
這是我走到這一步:
@echo off
cd /d %~dp0
rem 7z.exe path
set sevenzip=
if "%sevenzip%"=="" if exist "%ProgramFiles(x86)%\7-zip\7z.exe" set sevenzip=%ProgramFiles(x86)%\7-zip\7z.exe
if "%sevenzip%"=="" if exist "%ProgramFiles%\7-zip\7z.exe" set sevenzip=%ProgramFiles%\7-zip\7z.exe
if "%sevenzip%"=="" echo 7-zip not found&pause&exit
@echo searching...
for /R %%I in (*) do (
if not exist %%I.zip if not exist %%I.7zip "%sevenzip%" a -mx -mmt4 "%%I.7z" -r -x!*.bat "%%I" && "%sevenzip%" t "%%I.7z" * -r
)
del "Compressing_files_7zip.bat.7z"
del *.7z.7z*
del *.zip.7z*
::::::::::::::::::::::::::For setting up shutdown 60' after the end of the process.Remove colons in the line below.
::shutdown.exe /s /t 3600
pause
我這段代碼中得到的主要問題是:
-I是無法檢測到已經壓縮的文件,因此,跳轉到下一% %I實體。
- 從子文件夾中刪除不需要的過壓縮文件。顯然,'*'通配符在循環內不起作用;另一方面,如果我查找'del %% I.7z.7z',它也不起作用。
我讀了我不能爲'if'循環使用適當的'OR'功能,這就是爲什麼我嵌套它們。
預先感謝您。
Alex。
謝謝你Magoo。 代碼跳過已壓縮的文件,但也有雙擴展名的文件(可能有這樣的文件)。此外,我猜根據我建議的語法,壓縮文件不再在源文件夾上創建,而是出現在放置批處理文件的位置。 回答你的問題:因爲它會再次壓縮沒有變化的大文件(如果有變化,它會變成'v2'左右),這是不可取的。 –
讓我建議引用像'如果不存在'%%〜nI.zip「如果不存在」%%〜nI.7z「'... – aschipfl
@aschipfl TY但我沒有得到它的工作。無論如何,我需要處理文件名,然後確保壓縮發生在源文件夾中。 –