2016-12-05 54 views
0

時間前,我要求一些幫助建立一種短批處理文件使用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。

回答

0
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 

) 

注意%%I將包含完整的文件名,因此,如果您找到whatever.zip然後將代碼查找whatever.zip **。**拉鍊或whatever.zip **。** 7zip的,將執行在7zip如果這些都不存在,且產生whatever.zip **。** 7Z

所以如果你找到whichever.txt然後將代碼查找whichever.txt **。**拉鍊或whichever.txt ** .7zip **並執行7zip如果這兩個都是這些是bsent併產生whichever.txt **。** 7Z

我建議

for /R %%I in (*) do (
    if not exist %%~nI.zip if not exist %%~nI.7z "%sevenzip%" a -mx -mmt4 "%%~nI.7z" -r -x!*.bat "%%I" && "%sevenzip%" t "%%~nI.7z" * -r 

) 

這應該只選擇文件名的name一部分。 (見for /?|more從提示docco)

因此,代碼會尋找whatever.zipwhatever.7z - 查找whatever.zip,並且不執行7zip

,或者對於whichever.txt,代碼會尋找whichever.zipwhichever.7z - 既沒有找到並且執行7zip產生whichever.7z

現在,由於whichever.7z存在,進一步的運行將跳過7zip

這引發了問題 - 如果zip/7z存在,爲什麼不嘗試清新存檔,因爲檢測到的文件可能已經改變了?

+0

謝謝你Magoo。 代碼跳過已壓縮的文件,但也有雙擴展名的文件(可能有這樣的文件)。此外,我猜根據我建議的語法,壓縮文件不再在源文件夾上創建,而是出現在放置批處理文件的位置。 回答你的問題:因爲它會再次壓縮沒有變化的大文件(如果有變化,它會變成'v2'左右),這是不可取的。 –

+0

讓我建議引用像'如果不存在'%%〜nI.zip「如果不存在」%%〜nI.7z「'... – aschipfl

+0

@aschipfl TY但我沒有得到它的工作。無論如何,我需要處理文件名,然後確保壓縮發生在源文件夾中。 –