Windows 压缩子目录的批处理文件
我正在尝试编写一个批处理脚本,该脚本将使用winrar或7-zip自动压缩子目录: 例如:Windows 压缩子目录的批处理文件,windows,batch-file,compression,7zip,winrar,Windows,Batch File,Compression,7zip,Winrar,我正在尝试编写一个批处理脚本,该脚本将使用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
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和unrr.exe
,其中rar.exe压缩文件,unrr.exe解压缩文件
它们都位于可安装版本的C:\Program Files\WinRAR
文件夹中
假设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
@echo off
setlocal
for /d %%x in (C:\MyPictures\*.*) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%x.zip" "%%x\"
endlocal
exit
解释……
- “a”命令添加到存档中
- “-r”开关递归子文件夹
- “-u”开关。与“a”组合时相当于“u”命令 指挥部。添加新文件并更新文件的旧版本 已经在档案中了
- “-df”开关在文件移动到存档后删除文件
-df开关
(2)使用7-Zip:
7-Zip
是具有高压缩比的文件归档程序。7z.exe
是7-Zip的命令行版本。
7-Zip不使用系统通配符解析器,也不遵循使用通配符的古老规则。指任何文件。7拉链餐点。与具有扩展名的任何文件的名称匹配。
要处理所有文件,必须使用*通配符
在批处理文件中使用7zip命令行选项,以下选项适用于您:
@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
@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型档案
假设您的文件位于文件夹
C:\Pictures\
中。然后,您可以使用以下批处理命令创建与目录同名的多个存档
对于(c:\Pictures\*.*中的/D%%i,请执行“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"
如果需要递归地压缩windows中所有子文件夹中的文件,另一种方法是使用以下方法:
- 如果安装了git,请右键单击并选择“git Bash Here”
- 类型<代码>查找*-类型d-空-execdir sh-c'cd“$1”和&7z a“$1”.7z-x!*/&cd-‘sh{}\代码>
- 保留folderstructure,将每个拉链放在相应的子文件夹中
- 递归压缩目录中的所有文件(不包括空目录)
- 名称与目录名齐头并进
find*-type d-execdir sh-c'cd“$1”和&7z a“$1”。7z-x!*/-x!*。7z-x!*。zip和cd-'sh{}\;
提供的解决方案中没有一个适合我。我创建了一个脚本,该脚本首先以最大压缩率打包到7z中,然后为具有恢复记录的存储创建rar归档(它还删除临时7z归档):