batch file脚本来压缩文件

我有这种模式的文件夹结构。 我刚刚显示了两个子目录和两个文件,但通常我有n个子目录在单个级别和单个级别的文件(但可以是n个文件)下。

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

我需要创build一个Windows脚本,从主目录运行一个batch file,并给我两个zip文件x.zip和y.zip包含其各自的文件。

我知道我的脚本必须使用和压缩命令,但我正在努力让它工作,因为我不明白从这些命令的语法和谷歌search似乎并没有帮助。

我find了这样一个命令, for %f in ("*.*") do zip "%~nf.zip" "%f"但是它似乎只在文件没有子文件夹的情况下才有效。

 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\" )) 

这里*是当前文件夹。 为更多的选择尝试这个链接

你在附近:)

首先,批处理(%%变量)和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,但是如果失败,因为如果你有两个或多个文件夹,第二个不能给出第一个的名字,不会尝试覆盖没有更多的参数。 所以,我们将%d传递给这两个文件夹,这个文件夹名称是当前迭代文件夹的名称。 不需要附加“.zip”来命名。

开始玩的时候比我预料的还要短。

没有外部依赖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\*" 

试试这个代码:

 for /d %%a in (*) do (zip "%%~na.zip" "%%a") 

此代码必须从批处理(.bat)文件运行。

莫娜。

这是通过Tomas 链接有一个很好的脚本来压缩文件夹的内容。

为了使它工作,只需将脚本复制到一个批处理文件,并通过指定要压缩的文件夹(源)来执行它。

无需提及目标目录,因为它在脚本中默认为Desktop(“%USERPROFILE%\ Desktop”)

在这里复制脚本,只是在网页链接关闭:

 @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 /AD "%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 

一个简单的过程是这样的:

一次设置

  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的文件