我想写一个批处理脚本,将运行自动压缩使用winrar或7-zip的子目录:
例:
My Pictures Pics1 (Pics1.zip) File1.jpg File2.jpg File3.jpg Pics2 (Pics2.zip) File4.jpg File5.jpg Pics3 (Pics3.zip) File6.jpg File7.jpg ...
我如何写脚本。
(1)使用WinRAR:
WinRAR
包括两个命令行工具, rar.exe and unrar.exe
,其中rar.exe压缩和unrar.exe解压缩文件。
两者都位于可安装版本的C:\Program Files\WinRAR
文件夹中。
假设,如果C:\MyPictures
下C:\MyPictures
文件夹,并且您希望每个子文件夹在父文件夹中都有自己的.rar文件。
从批处理文件,这适用于你:
@echo off setlocal set zip="C:\Program Files\WinRAR\rar.exe" a -r -u -df dir C:\MyPictures /ad /s /b > C:\MyPictures\folders.txt for /f %%f in (C:\MyPictures\folders.txt) do if not exist C:\MyPictures\%%~nf.rar %zip% C:\MyPictures \%%~nf.rar %%f endlocal exit
说明….
它会在同一父文件夹中的父文件夹C:\ MyPictures下创建所有文件夹/子文件夹的.rar文件。
然后,它将删除父文件夹C:\ MyPictures下的所有原始文件夹/子文件夹,因此您将只保留归档文件在同一位置。
“a”命令添加到档案中
“-r”开关递归子文件夹
“-u”开关。 与“a”命令结合使用时,与“u”命令相同。 添加新文件并更新已存档文件的旧版本
“-df”开关将文件移动到存档后删除文件
如果你想保留原来的子文件夹,只需删除-df switch
。
(2)使用7-Zip:
7-Zip
是一个压缩率高的文件存档器。 7z.exe
是7-Zip的命令行版本。 7-Zip不使用系统通配符解析器,它不遵循由哪个原始规则。 意味着任何文件。 7-Zip对待。 作为匹配具有扩展名的任何文件的名称。 要处理所有文件,您必须使用*通配符。
在批处理文件中使用7zip命令行选项,下面适用于您:
@echo off setlocal for /d %%x in (C:\MyPictures\*.*) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%x.zip" "%%x\" endlocal exit
哪里
– 存档或添加
-t类型的存档
以下是如何在7-zip中完成的。
假设您的文件位于文件夹C:\Pictures\
。 然后,您可以使用以下批处理命令创建与您的目录具有相同名称的多个归档。
FOR / D %%我IN(c:\ Pictures \ *。*)DO“c:\ Program Files \ 7-Zip \ 7z.exe”a“%% i.zip”“%% i \”
这将压缩目录Pictures
中的每个文件夹。 将c:\Pictures
更改为包含您的文件夹的目录。 如果7-zip安装到不同的目录,请将"c:\Program Files\7-Zip\7z.exe"
更改为安装了7-zip的目录。
感谢您的伟大的脚本,我只有3个问题/变化 – 目录名称空间名称不工作,我只是想备份1级子目录,我想打包当前目录中的所有子目录(这是快速备份所有子目录)。 这里是修改,如果你需要类似的东西:
set zip="C:\Program Files\WinRAR\rar.exe" a -r -u -df dir /b /o:n /ad > .\folders.txt for /F "tokens=*" %%A in (.\folders.txt) do if not exist ".\%%~nA.rar" %zip% ".\%%~nA.rar" "%%A"