2012-10-09 8 views
3

我會嘗試儘可能縮短這一點。我正在尋找一個.bat文件來加密和密碼文件夾中的文件夾,但問題比我想象的要複雜一些,每個文件夾可以有1到400個文件,我有兩個.txt文件文件,一個與of.rar文件名所需的號碼,一個與.rar程序密碼所需數量,因此TXT文檔的這個樣子的,首先是filenames.txt在一組文件中使用密碼打包(WinRAR)

FAD01  
FAD02  
FAD03 

等多達FAD110

和另一個.txt文件

GAP01 
GAP02 
GAP03 
GAP04 
GAP05 

和等高達GAP50

第一密碼.txt文件的樣子總

第二密碼本

vF2RiQMof6HSWy8MSEIO 
13qIsZ7e9RIzBwaQ3UO6 
KfTMk9wPfPQKMNh4XzD8 

等等,110的隨機密碼.txt文件這樣

al9p4O2vkiqcFKfgpWh7 
U0jkx05nQoTKPAAPEYiW 
43bliny0TU2R4CKob62H 

等,共50個隨機密碼

我的想要做的是將.txt文檔中的50個文件名的第一個列表應用於位於主文件夾中的50個子文件夾,以及用於創建每個.rar文件的50個密碼的第一個列表,這樣我的最終結果將會在第一個主文件夾裏面50個rars每個passworded不同,我也想要.rar文件密碼被加密,所以你不能看到任何.rar文件的內容,除非你輸入密碼。

最終的結果是這樣的:

FAD01.rar > password = vF2RiQMof6HSWy8MSEIO 
FAD02.rar > password = 13qIsZ7e9RIzBwaQ3UO6 
FAD03.rar > password = KfTMk9wPfPQKMNh4XzD8 

等多達FAD110.rar

我願意付出的人,如果他們認爲他們可以做到這一點,或者如果你只是看中了挑戰,有一顆大心臟,然後那也沒關係:),並感謝您抽出時間來閱讀我的問題

額外的資訊

我創建了文件名&密碼列表來幫助生成passworded rar文件的過程,但如果你可以做到這一點,而不需要預定義的密碼/文件名列表,那麼這將是更少的工作要做,但我需要一些排序由.bat文件創建的文件名/密碼列表,所以我知道什麼.rar有什麼密碼。

名單很容易產生,所以我希望bat文件可以一次讀取列表1線和&密碼應用的文件名被基本上我rar'd了

的文件夾m尋找它需要一組文件夾,並按照某種形式的字母順序單獨提取它們,並將隨機密碼應用到rar(這些密碼應該是20個字符長,包含數字和大小寫字母),但我想要rar加密這是winRAR中的一個選項,它阻止用戶看到rar的內容,直到輸入密碼

每個包含大量文件的50到300個文件夾f olders必須rar'd並隨機加密密碼需要密碼,我目前做他們1的時間,非常耗時確實

+0

這不是招聘網站。 –

+0

因爲我喜歡這個挑戰,所以我絕對願意爲此付出努力:)但是,你能否說出爲什麼你有4個不同的txt文件,以及你想要什麼密碼? –

+0

目前還不清楚爲什麼會有* 4 *文本文件,或者更準確地說,它們有兩對(文件名+密碼)。我的意思是,如果兩個(或者多個)對都需要處理,那就沒問題了,但是從你的描述來看,這似乎並不明確。然後,這些列表文件的名稱是否遵循腳本能夠識別它們的任何模式尚不清楚。 –

回答

3

假設這個目錄結構:

\ 
└─SomeRootFolder 
    ├─SuperfolderA 
    │ ├─filenames.txt 
    │ ├─passwords.txt 
    │ ├─A1 
    │ │ └─... 
    │ ├─A2 
    │ │ └─... 
    │ └─... 
    ├─SuperfolderB 
    │ ├─filenames.txt 
    │ ├─passwords.txt 
    │ ├─B1 
    │ │ └─... 
    │ ├─B2 
    │ │ └─... 
    │ └─... 
    └─... 

(子文件夾A1A2,... B1B2,...是需要投入自己的檔案的),以下爲我工作:

@ECHO OFF 
SET arch="C:\Program Files (x86)\WinRAR\WinRAR.exe" 
SET "rootdir=D:\path\to\folders" 
SET "namestxt=filenames.txt" 
SET "passtxt=passwords.txt" 

FOR /D %%D IN ("%rootdir%\*") DO (
    <"%%D\%passtxt%" (
    FOR /F "usebackq delims=" %%N IN ("%%D\%namestxt%") DO (
     SET /P "pass=" 
     SETLOCAL EnableDelayedExpansion 
     %arch% a -r -ep1 -hp!pass! "%%D\%%N.rar" "%%D\%%N" 
     ENDLOCAL 
    ) 
) 
) 

第一部分僅僅設置了一些variabl es,稍後在腳本中使用。 (碰巧,它們中的每一個都只在腳本中使用過一次,所以你可以很容易地將這些值替換爲相應的變量擴展,我只是習慣性地聲明瞭這些變量,我經常在批處理腳本中使用這樣的變量。)

外層循環,FOR /D之一,迭代你的'超級文件夾',包含子文件夾歸檔和文本文件。

的循環體以這種方式讀取兩個文件:

  • filenames.txt由內環指令本身,FOR /F命令來讀取;

  • 密碼文件被內部循環體內的其中一個命令讀取,即SET /PSET /P讀取標準輸入流,默認情況下是控制檯,但是標準輸入在這種情況下被重定向爲整個內部循環來自passwords.txt

所以,%%D循環變量(外環的一個)包含對「超摺疊」的完整路徑,%%N被分配一個子文件夾的名稱和pass=被設定爲相應的密碼。它只是在這一點上致電存檔。

這些在存檔器命令行中使用的參數:

  • a - Add命令適當的(而不是象提取物,其是x,或更新,這是u到命令);

  • -r - 遞歸地處理指定的文件夾(如果您不需要,請刪除此選項);

  • -ep - 從名稱中排除基礎文件夾;

  • -hp… - 加密使用指定的密碼檔案(這是從-p…,這僅僅是保護提取不同; -hp不會讓你看到存檔的內容沒有密碼,就像你似乎想)。

您可以看到,在調用存檔器之前,啓用了延遲擴展。如果你沒有意識到包含循環體的括號內的「立即」擴展的影響,我只是說它不能像你想要的那樣工作,如果變量既被賦值又被擴展同一個括號內的塊。因此推遲了擴張。它使用! s而不是% s,您可以看到pass變量以這種方式擴展。

還有一件事需要提及。如果生成的密碼少於其他文件中的名稱,該腳本仍可正常工作,但缺少「自己的」密碼的名稱將與列表中的最後一個密碼配對。 (這也是劇本沒有問題,如果比密碼少。在這種情況下,「孤兒」的密碼是不會被使用。)


UPDATE

如果您想直接從目錄中讀取子文件夾名稱,從而放棄了filenames.txt文件,你可以改變這樣的腳本:

@ECHO OFF 
SET arch="C:\Program Files (x86)\WinRAR\WinRAR.exe" 
SET "rootdir=D:\path\to\folders" 
SET "namestxt=filenames.txt" 
SET "passtxt=passwords.txt" 

FOR /D %%D IN ("%rootdir%\*") DO (
    <"%%D\%passtxt%" (
    FOR /D %%N IN ("%%D\*") DO ( 
     SET /P "pass=" 
     SETLOCAL EnableDelayedExpansion 
     %arch% a -m0 -r -ep1 -hp!pass! "%%N.rar" "%%N" 
     ENDLOCAL 
    ) 
) 
) 

更新2

如果要動態生成從目錄中讀取名稱filenames.txt文件,只插入一個命令到第一個腳本的外環:

@ECHO OFF 
SET arch="C:\Program Files (x86)\WinRAR\WinRAR.exe" 
SET "rootdir=D:\path\to\folders" 
SET "namestxt=filenames.txt" 
SET "passtxt=passwords.txt" 

FOR /D %%D IN ("%rootdir%\*") DO (
    DIR /AD /B "%%D" >"%%D\%namestxt%" 
    <"%%D\%passtxt%" (
    FOR /F "usebackq delims=" %%N IN ("%%D\%namestxt%") DO (
     SET /P "pass=" 
     SETLOCAL EnableDelayedExpansion 
     %arch% a -r -ep1 -hp!pass! "%%D\%%N.rar" "%%D\%%N" 
     ENDLOCAL 
    ) 
) 
) 

/AD開關DIR確保只包含文件夾名稱。

請注意,您可以用類似的方式生成密碼。如果只有一個命令接受輸出文件名作爲參數,並且只是在不中斷的情況下執行作業,則可以在DIR之後插入該命令。

+0

系統找不到指定的文件。 –

+0

pass.bat文件名和密碼都在相同的目錄作爲我想要rar的文件夾 –

+0

你可以用更通俗的術語來說明這一點,因爲我試圖將文本複製到.txt文件並將其重命名.bat,我的winrar.exe位於c:\ program files \ winrar \ winrar.exe,我的工作目錄在其中的文件夾是f:/新建文件夾/要歸檔的文件夾/,第一個文件夾有5個directoy在其中歸檔,所以我製作了5個文件名的文件名.txt和5個密碼的passwords.txt,在你的代碼中改變了以下幾行SET arch =「C:\ Program Files \ WinRAR \ WinRAR.exe」和SET「rootdir = F:/新文件夾/要歸檔的文件夾/「,在cmd窗口中運行pass.bat並返回了5個錯誤 –

相關問題