我正在尝试编写一个批处理脚本,它将使用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
...
我如何编写脚本。
答案 0 :(得分:5)
(1)使用WinRAR:
WinRAR
包括两个命令行工具rar.exe and unrar.exe
,其中rar.exe压缩并且unrar.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
<强>解释.... 强>
它将创建父级下所有文件夹/子文件夹的.rar文件 文件夹C:\ MyPictures在同一个父文件夹中。
然后,它将删除父级下的所有原始文件夹/子文件夹 文件夹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
<强>其中强>
-a archive或add
-t档案类型
答案 1 :(得分:2)
以下是7-zip中的操作方法。
假设您的文件位于文件夹C:\Pictures\
中。然后,您可以使用以下批处理命令创建多个与目录同名的存档。
FOR /D %%i 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的目录。
答案 2 :(得分:0)
感谢您提供优秀的脚本,我只有3个问题/更改 - 名称中包含空格的目录名称无效,我只想备份1级子目录,我想将所有子目录打包到当前目录中(它& #39;非常适合单独快速备份所有子目录)。如果你需要类似的东西,这是修改:
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"
答案 3 :(得分:0)
如果您需要在窗口的所有子目录中递归压缩文件,另一种方法是使用gitbash和描述here的方法:
find * -type d ! -empty -execdir sh -c 'cd "$1" && 7z a "$1".7z -x!*/ && cd -' sh {} \;
这将:
您还可以使用以下方法排除特定类型:
find * -type d -execdir sh -c 'cd "$1" && 7z a "$1".7z -x!*/ -x!*.7z -x!*.zip && cd -' sh {} \;
答案 4 :(得分:0)
没有提供的解决方案对我有用。我创建了一个脚本,该脚本首先以最大压缩率打包到 7z 中,然后创建 rar 存档以存储恢复记录(它还会删除临时7z存档):
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R f:\ZA\SQL2005\ZA\ %%A IN (*.*) DO (
SET "file_without_suffix=%%~dpnA"
7z.exe a -t7z -m0=lzma2 -mx=9 -mfb=256 -md=1024m -ms=on "!file_without_suffix!.7z" "%%A"
REM -ep1 do not store path in archive
rar.exe a -m0 -rr -ep1 "!file_without_suffix!.rar" "!file_without_suffix!.7z"
DEL /Q /F "!file_without_suffix!.7z"
SET "file_without_suffix="
)
SETLOCAL DISABLEDELAYEDEXPANSION