simple - write windows script




批處理文件腳本來壓縮文件 (6)

我有這種模式的文件夾結構。 我剛剛顯示了兩個子目錄和兩個文件,但通常我有n個子目錄在單個級別和單個級別的文件(但可以是n個文件)下。

Directory master
subDirectory x:
  file1
  file2
Directory y:
  file 3
  file 4

我需要創建一個Windows腳本,從主目錄運行一個批處理文件,並給我兩個zip文件x.zip和y.zip包含其各自的文件。

我知道我的腳本必須使用和壓縮命令,但我正在努力讓它工作,因為我不明白從這些命令的語法和谷歌搜索似乎並沒有幫助。

我找到了這樣一個命令, for %f in ("*.*") do zip "%~nf.zip" "%f"但是它似乎只在文件沒有子文件夾的情況下才有效。


你在附近:)

首先,批處理(%%變量)和Windows CMD(%變量)使用不同的變量命名。 其次,我不知道你如何使用CMD的zip。 這是來自Linux用戶,我認為。 使用內置的zip操作並不像Win那樣簡單,而且使用批處理腳本更加困難。

但無論如何,你是幸運的。 我從cygwin軟件包中得到(提取到目標文件夾)zip.exe和cygwin1.dll(3mb文件化在一起)並立即開始播放。

當然,我使用CMD更好/更快的測試,而不是批次。 只記得在責備我之前把%varname修改為%% varname:P

for /d %d in (*) do zip -r %d %d

說明: for /d ...匹配裡面的任何文件夾。 只有文件夾忽略文件。 (用於/ f到文件匹配) for /d %d in ... %d告訴cmd這個名字是否要分配給你的變量。 我把d與widh d(目錄含義)相匹配。 for /d %d in (*) ...非常重要。 這將我CD放到所需的文件夾,或運行。 (*)這將意味著所有在這個目錄,因為我們使用/d文件沒有處理,所以不需要設置模式,即使你只能得到一些文件夾,如果你需要。 你可以使用絕對路徑。 不確定關於批次親屬的問題。 for /d %d in (*) do zip -r ... ZIP是否明顯。 (exec自己並看到幫助顯示使用您的自定義規則)。 r-是遞歸的,所以anyting將被添加。 for /d %d in (*) do zip -r %d %d 第一個%d是zip名稱 。 你可以嘗試使用myzip.zip,但如果失敗,因為如果你有2個或更多的文件夾,第二個不能給第一個名字,不會嘗試覆蓋沒有更多的參數。 所以,我們將%d傳遞給這兩個文件夾,這個文件夾名稱是當前迭代文件夾的名稱。 不需要附加“.zip”來命名。

開始玩的時候比我預料的還要短。


for /d %%a in (*) do (ECHO zip -r -p "%%~na.zip" ".\%%a\*")

應該在一個批次內工作。

請注意,我已經包含一個ECHO來簡單地顯示提出的命令。 您需要刪除ECHO keywor來執行這些命令。


我知道它太晚了,但如果你還想嘗試

for /d %%X in (*) do (for /d %%a in (%%X) do ( "C:\Program Files\7-Zip\7z.exe" a -tzip "%%X.zip" ".\%%a\" ))

這裡*是當前文件夾。 為更多的選擇嘗試這個鏈接


沒有外部依賴7zip或ZIP - 創建一個VBS腳本並執行:

    @ECHO Zipping
    mkdir %TEMPDIR%
    xcopy /y /s %FILETOZIP% %TEMPDIR%
    echo Set objArgs = WScript.Arguments > _zipIt.vbs
    echo InputFolder = objArgs(0) >> _zipIt.vbs
    echo ZipFile = objArgs(1) >> _zipIt.vbs
    echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
    echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
    echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
    echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
    @ECHO *******************************************
    @ECHO Zipping, please wait..
    echo wScript.Sleep 12000 >> _zipIt.vbs
    CScript  _zipIt.vbs  %TEMPDIR%  %OUTPUTZIP%
    del _zipIt.vbs
    rmdir /s /q  %TEMPDIR%

    @ECHO *******************************************
    @ECHO      ZIP Completed

這是歸檔個人的正確語法; 批量中的文件夾作為單獨的壓縮文件...

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a -mx "%%X.zip" "%%X\*"

一個簡單的過程是這樣的:

一次設置

  1. 從這裡: http ://www.7-zip.org/download.html,下載7zip exe(32位x86或64位x64,基於您的計算機體系結構)

  2. 安裝它說,安裝轉到“C:\ Program Files \ 7-Zip”即,你會看到“7z.exe”

  3. APPEND下面,到環境路徑“C:\ Program Files \ 7-Zip”

郵遞歸遞歸

  1. 創建一個名為“build.bat”的文件,具有以下幾個特徵:

     REM  build.bat
     7z a mycurrentfolder.zip
    
  2. 將這個'build.bat'文件放在任何文件夾中,雙擊它來運行它。

就這樣

注:在“7z”命令之上,遞歸地壓縮(或歸檔或者)當前文件夾的所有內容,並創建一個名為mycurrentfolder.zip的文件





batch-file