2016-01-04 62 views
2

下面是一個目錄結構,我必須將app*子目錄中的所有* .txt文件壓縮到名爲當前日期的RAR歸檔中,並刪除歸檔文件和文件夾。如何壓縮包含N個文本文件的N號子文件夾的文本文件?

我在命令行和寫批處理腳本方面是全新的,只知道一些基礎知識。

有沒有關於如何使用RarWinRAR來解決這個任務的建議?

E: 
Data 
    Log 
    makeRar.bat 
     app1 
      1.txt 
      2.txt 
      3.txt 
      . 
      . 
      . 
      n.txt 
     app2 
      1.txt 
      2.txt 
      3.txt 
      . 
      . 
      . 
      n.txt 
     app3 
      1.txt 
      2.txt 
      3.txt 
      . 
      . 
      . 
      n.txt 
     . 
     . 
     . 
     appn 
      1.txt 
      2.txt 
      3.txt 
      . 
      . 
      . 
      n.txt 

----------- makeRar.bat文件的執行-------------後根據您提供的信息

E: 
Data 
    Log 
    makeRar.bat 
     app1 
      4/1/2016_log.rar 
     app2 
      4/1/2016_log.rar 
     app3 
      4/1/2016_log.rar 
+0

顯然即使是基礎知識也不在您的知識庫內。你不能用斜線命名文件。 – Squashman

+0

文檔文件在存檔後仍然存在嗎? – mojo

+0

不,它應該刪除 –

回答

2

我有這個問題的答案。但是這個解決方案使用靜態路徑,而不是動態路徑。所以當這個批處理文件被執行時,它會根據需要產生完全一樣的輸出,但只能根據下面的代碼針對特定的app文件夾。

set loc="C:\Program Files\WinRAR" 
cd /D %loc% 
rar.exe a -r -agYYYY-MM-DD -df -ep %source%\app1\log_.rar %source%\app1\*.txt 

source必須用源目錄的路徑定義。

編輯:

我通過迭代2 FOR循環,其中第一個是獲取當前和子目錄和第二從子目錄獲取文件找到此任務爲您的目錄結構,更好的解決方案。

set "source=C:\Program Files\WinRAR" 

for /R /D %%s in (.\*) do (
    echo %%s 
    for %%F in (%%s\*.txt*) do (
     "%source%\rar.exe" a -r -agYYYY-MM-DD -df -ep %%s\log_.rar %%F 
    ) 
) 
pause 
+1

因此,您從我的答案中拿走了代碼,通過添加第二個__FOR__循環使其更加複雜,這絕對不是必需的,並且增加了批處理文件的執行時間,因爲* Rar *啓動並終止每個* .txt文件分別代替每個目錄運行一次,格式化答案很差,甚至沒有添加說明。這是一個糟糕的表現,我想你是[darshan dave]的朋友(http://stackoverflow.com/users/5286817/darshan-dave),否則它真的不能解釋爲什麼你的答案被選爲接受。 – Mofi

+0

然後請你解釋它如何可能沒有兩個for循環..我顯示你的答案,但不能得到按目錄結構的輸出..如果我不使用兩個for循環,那麼只有一個rar文件是創建這是不需要 –

+0

看到我的答案,並像我一樣嘗試。 * Rar *不僅支持在命令行中指定的單個文件名,以壓縮到檔案中,而且支持多個文件和/或文件夾和/或列表文件,並且在我的答案中使用文件模式,使用通配符如'* .txt'。自WinRAR *版本5.30以來,甚至可以在文件夾模式中使用通配符,如版本5.30第5點中的WhatsNew.txt所記錄。有關在壓縮或提取時使用通配符的示例,請閱讀文本文件'Rar.txt'。 – Mofi

1

這應該工作。如果RAR.exe不在PATH變量中的文件夾中,則需要將該路徑添加到PATH變量或提供批處理文件中可執行文件的完整路徑。

@echo off 

:: Get Date 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
SET "YYYY=%dt:~0,4%" 
SET "MM=%dt:~4,2%" 
SET "DD=%dt:~6,2%" 


FOR /D %%G IN (app*) DO (
    PUSHD "%%~G" 
    rar a %DD%%MM%%YYYY%_log.rar *.txt 
    del *.txt 
    POPD 
) 
1

有一個在程序文件WinRAR的這是控制檯版本Rar.exe手冊的文件夾中的文本文件Rar.txt。通過查看此文件並首先選擇要使用的命令 - 這裏是a for 將文件添加到檔案 - 然後從上到下閱讀關於交換機的信息,並根據任務要求構建命令行,使其非常容易定義用於將文件壓縮到RAR存檔的命令行。

@echo off 
for /D %%D in (app*) do (
    echo Creating archive for %%D ... 
    "%ProgramFiles%\WinRAR\Rar.exe" a -agYYYY-MM-DD -cfg- -df -ep -idq -m5 -md4m -r- -s -y "%%D\log_.rar" "%%D\*.txt" 
    if errorlevel 1 pause 
) 

您可以閱讀關於文本文件Rar.txt中的所有開關。

命令PAUSE如果出現錯誤,輸出由Rar.exe到控制檯,而所有其它消息,因爲開關-idq的抑制時,纔會執行。

的RAR壓縮文件的文件名格式爲log_YYYY-MM-DD.rar,因爲這是比DD-MM-YYYY_log.rar一旦你擁有了多個這樣的RAR壓縮包更好的目錄,因爲log_YYYY-MM-DD.rar顯示的字母順序排序按受默認的Windows結果在獲得這些文件的文件名也會按日期自動排序,排在最前面。

Rar只刪除成功添加到存檔的文本文件。

當然,也可以使用WinRAR的壓縮:

@echo off 
for /D %%D in (app*) do (
    echo Creating archive for %%D ... 
    "%ProgramFiles%\WinRAR\WinRar.exe" a -agYYYY-MM-DD -cfg- -df -ep -ibck -m5 -md4m -r- -s -y "%%D\log_.rar" "%%D\*.txt" 
) 

WinRAR的還可以創建ZIP壓縮文件,而不是它的控制檯版本的RAR不支持RAR壓縮文件。

的RAR開關-idqWinRAR的開關-ibck替換運行WinRAR的最小化到系統托盤,即在背景中。錯誤消息顯示在GUI窗口中,如果發生錯誤,將自動顯示WinRAR

有關WinRAR的命令和開關的幫助下從的RAR略有不同的菜單幫助開關點擊在WinRAR的幫助主題,點擊選項卡內容上項目命令行模式並閱讀鏈接的頁面。

爲了解所使用的Windows命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • echo /?
  • for /?

看看它是多麼容易使用的RARWinRAR的存檔文件。所有真正需要的是查看手冊,分別幫助和關於在命令提示符窗口中執行help時列出的Windows標準命令的一點知識。

編輯:以上

兩個批處理文件要求該批處理文件是在包含子目錄app*目錄,該目錄是當前目錄。對於當前目錄爲%SystemRoot%\System32執行例如該批處理文件作爲預定任務批處理代碼如下效果會更好:

@echo off 
for /D %%D in ("%~dp0app*) do (
    echo Creating archive for %%~fD ... 
    "%ProgramFiles%\WinRAR\Rar.exe" a -agYYYY-MM-DD -cfg- -df -ep -idq -m5 -md4m -r- -s -y "%%~fD\log_.rar" "%%~fD\*.txt" 
    if errorlevel 1 pause 
) 

命令FOR搜索獨立於什麼是子目錄app*現在在批處理文件的目錄當前目錄。並傳遞給Rar現在是歸檔文件的名稱,具有完整路徑,文件名稱模式*.txt也具有完整路徑,而不是使用相對於當前目錄的路徑。

那麼,在使用這個批處理文件作爲計劃任務時,應該刪除行if errorlevel 1 pause

相關問題