从规定的文件和文件夹列表中创建 ZIP 文件的批处理脚本
Batch script to create a ZIP file out of a list of stated files and folders
我有以下文件树
|
|--/BlueFolder1/
|----Blue.txt
|----Blue2.exe
|--/BlueFolder2/
|----Blue.exe
|-Blue2.exe
|-Red.md
|-Blue.txt
|-MySuperAwesomeScript.bat
我需要制作一个批处理脚本,将所有 "blue" 文件压缩到 BlueFiles.zip
存档中。
我对这些技术一窍不通,但我想我应该列出要压缩的文件,或者如果可能的话,声明要忽略的文件。
我发现这个批处理脚本非常有用,但它不允许我选择哪些文件 not/include。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET sourceDirPath=%1
IF [%2] EQU [] (
SET destinationDirPath="%USERPROFILE%\Desktop"
) ELSE (
SET destinationDirPath="%2"
)
IF [%3] EQU [] (
SET destinationFileName="%~n1%.zip"
) ELSE (
SET destinationFileName="%3"
)
SET tempFilePath=%TEMP%\FilesToZip.txt
TYPE NUL > %tempFilePath%
FOR /F "DELIMS=*" %%i IN ('DIR /B /S /A-D "%sourceDirPath%"') DO (
SET filePath=%%i
SET dirPath=%%~dpi
SET dirPath=!dirPath:~0,-1!
SET dirPath=!dirPath:%sourceDirPath%\=!
SET dirPath=!dirPath:%sourceDirPath%=!
ECHO .SET DestinationDir=!dirPath! >> %tempFilePath%
ECHO "!filePath!" >> %tempFilePath%
)
MAKECAB /D MaxDiskSize=0 /D CompressionType=MSZIP /D Cabinet=ON /D Compress=ON /D UniqueFiles=OFF /D DiskDirectoryTemplate=%destinationDirPath% /D CabinetNameTemplate=%destinationFileName% /F %tempFilePath% > NUL 2>&1
DEL setup.inf > NUL 2>&1
DEL setup.rpt > NUL 2>&1
DEL %tempFilePath% > NUL 2>&1
提前致谢。
勾选
尽管 Makecab 使用 deflate 算法,但最终格式不是 zip,而是 cab。
MaxDiskSize=0
将大小设置为其默认值(即软盘)
要保留目录结构,您需要在每次目录更改后设置 DestinationDir
,因此您需要额外的指令 file.In 和上面的 link 有一个现成的脚本可以使用 directory.You将排除非蓝色文件你可以编辑指令 file.Check MAKECAB info.
这应该只向指令添加蓝色文件。
;@echo off
;;;;; rem start of the batch part ;;;;;
; if "%~2" EQU "" (
; echo invalid arguments.For help use:
; echo %~nx0 /h
;)
;for %%a in (/h /help -h -help) do (
; if "%~1" equ "%%~a" (
; echo compressing directory to cab file
; echo %~nx0 directory cabfile
; echo to uncompress use:
; echo EXPAND cabfile -F:* .
; )
; )
;
; set "dir_to_cab=%~f1"
;
; set "path_to_dir=%~pn1"
; set "dir_name=%~n1"
; set "drive_of_dir=%~d1"
; set "cab_file=%~2"
;
; if not exist %dir_to_cab%\ (
; echo no valid directory passed
; exit /b 1
;)
;
;break>"%tmp%\makecab.dir.ddf"
;
;setlocal enableDelayedExpansion
;for /d /r "%dir_to_cab%" %%a in (*) do (
;
; set "_dir=%%~pna"
; set "destdir=%dir_name%!_dir:%path_to_dir%=!"
; (echo(.Set DestinationDir=!destdir!>>"%tmp%\makecab.dir.ddf")
; for %%# in ("%%a\*") do (
; (echo("%%~s#" /inf=no>>"%tmp%\makecab.dir.ddf")
; )
;)
;(echo(.Set DestinationDir=!dir_name!>>"%tmp%\makecab.dir.ddf")
; for %%# in ("%~f1\*blue*") do (
;
; (echo("%%~s#" /inf=no>>"%tmp%\makecab.dir.ddf")
; )
;makecab /F "%~f0" /f "%tmp%\makecab.dir.ddf" /d DiskDirectory1=%cd% /d CabinetNameTemplate=%cab_file%.cab
;del /q /f "%tmp%\makecab.dir.ddf"
;exit /b %errorlevel%
;;
;;;; rem end of the batch part ;;;;;
;;;; directives part ;;;;;
;;
.New Cabinet
.set GenerateInf=OFF
.Set Cabinet=ON
.Set Compress=ON
.Set UniqueFiles=ON
.Set MaxDiskSize=1215751680;
.set RptFileName=nul
.set InfFileName=nul
.set MaxErrors=1
;;
;;;; end of directives part ;;;;;
但如果您想要 zip 格式,请检查 shell.application 解决方案,该解决方案将允许向已创建的 zip 添加项目。