Windows命令行不支持通配符在文件/文件夾路徑的文件夾。 *\*
因此無效。
兩個嵌套的FOR環需要具有外環在當前目錄中運行的處理的目錄Files1
和Files2
並與內環處理的目錄files11
,files12
,files21
,files22
以及這些子目錄運行的RAR。
首批代碼創建歸檔文件
Files1\files11.rar
Files1\files12.rar
Files2\files21.rar
Files2\files22.rar
與每個存檔中包含歸檔目錄files11
,files12
,files21
,files22
。
@echo off
set "CompressionError=0"
rem Set directory of batch file as working directory.
pushd "%~dp0"
rem For each directory in working directory run a second loop which
rem compresses each subdirectory of current directory to a RAR archive
rem with deleting all files and subdirectories as well as the archived
rem directory itself and name the archive file like the archived directory.
for /D %%D in (*) do (
for /D %%F in ("%%D\*") do (
"%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -df -ep1 -idq -m5 -md4m -r -s -y "%%F.rar" "%%F"
if errorlevel 1 set "CompressionError=1"
)
)
rem Restore the previous working directory.
popd
rem Halt batch processing if any error occurred on any compression.
if "%CompressionError%" == "1" pause
set "CompressionError="
第二批代碼還創建了4個存檔文件,但是歸檔目錄files11
,files12
,files21
,files22
沒有被添加到存檔。
@echo off
set "CompressionError=0"
rem Set directory of batch file as working directory.
pushd "%~dp0"
rem For each directory in working directory run a second loop which
rem compresses each subdirectory of current directory to a RAR archive
rem with deleting all files and subdirectories as well as the archived
rem directory itself and name the archive file like the archived directory.
for /D %%D in (*) do (
for /D %%F in ("%%D\*") do (
"%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -df -ep1 -idq -m5 -md4m -r -s -y "%%F.rar" "%%F\"
if errorlevel 1 (
set "CompressionError=1"
) else (
rd "%%F"
)
)
)
rem Restore the previous working directory.
popd
rem Halt batch processing if any error occurred on any compression.
if "%CompressionError%" == "1" pause
set "CompressionError="
看在程序文本文件Rar.txt
文件的WinRAR的文件夾上使用的的RAR開關細節是爲了控制檯版本的WinRAR手冊。
這兩個批處理文件都不會在執行過程中顯示任何內容,如果沒有錯誤發生,它們將自動退出。但是,如果發生任何壓縮錯誤,批處理將暫停,以便批處理用戶可以查看Rar輸出的錯誤消息到控制檯窗口。
爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。
call /?
解釋%~dp0
(驅動器和參數0的路徑 - 批處理文件)
echo /?
for /?
if /?
pause /?
popd /?
pushd /?
rd /?
rem /?
set /?
感謝。雖然有些東西我仍然不明白。 1.爲什麼在批處理文件的最後一步將CompressionError設置爲空? – christantoan
2. %% D和%% F代表目錄和文件嗎? – christantoan
'set「CompressionError = 0」'也可以是'set'CompressionError =「'保證沒有環境變量'CompressionError'值爲'1',在此批處理腳本之外偶然定義,導致停止批處理此批處理腳本的結尾。 '%% D'和'%% F'是目錄的循環變量。目錄'Files1'和'Files2'以及'%% F'的'%% D'作爲相對於當前目錄的子目錄,如'Files1 \ files11'。添加到外部循環'echo %% D'和內部循環'echo %% F'使得您可以查看循環變量值。 – Mofi