2016-01-13 106 views
1

我試圖與結構壓縮我的子目錄這樣壓縮子目錄

Files1\files11\...(files) 
Files1\files12\...(files) 
Files2\files21\...(files) 
Files2\files22\...(files) 

我想壓縮它像

Files1\files11.rar 
Files1\files12.rar 
Files2\files21.rar 
Files2\files22.rar 

,而不刪除原始文件夾。

我試過這個腳本

for /d %%d in (*\*) do ("C:\Program Files\WinRAR\Rar.exe" a -m5 -s "%%d.rar" "%%d") 

,但它僅適用於一個級別。 我也試過Batch file to compress subdirectories但由於某種原因,它不起作用。它拋出文件未找到錯誤。

感謝

回答

0

Windows命令行不支持通配符在文件/文件夾路徑的文件夾。 *\*因此無效。

兩個嵌套的FOR環需要具有外環在當前目錄中運行的處理的目錄Files1Files2並與內環處理的目錄files11files12files21files22以及這些子目錄運行的RAR

首批代碼創建歸檔文件

Files1\files11.rar 
Files1\files12.rar 
Files2\files21.rar 
Files2\files22.rar 

與每個存檔中包含歸檔目錄files11files12files21files22

@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個存檔文件,但是歸檔目錄files11files12files21files22沒有被添加到存檔。

@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 /?
+0

感謝。雖然有些東西我仍然不明白。 1.爲什麼在批處理文件的最後一步將CompressionError設置爲空? – christantoan

+0

2. %% D和%% F代表目錄和文件嗎? – christantoan

+0

'set「CompressionError = 0」'也可以是'set'CompressionError =「'保證沒有環境變量'CompressionError'值爲'1',在此批處理腳本之外偶然定義,導致停止批處理此批處理腳本的結尾。 '%% D'和'%% F'是目錄的循環變量。目錄'Files1'和'Files2'以及'%% F'的'%% D'作爲相對於當前目錄的子目錄,如'Files1 \ files11'。添加到外部循環'echo %% D'和內部循環'echo %% F'使得您可以查看循環變量值。 – Mofi