我想编写一个批处理脚本,将readme.txt
文件添加到某些目录,然后压缩整个目录。
示例:
@ECHO OFF
for /D %%f in ("C:\directory_with_files_you_want_to_compress\ *") do copy "C:\directory_with_readme.txt\readme.txt" "%%f\"
cd C:\directory_with_files_you_want_to_compress
SET PATH=C:;C:\Program Files (x86)\WinRAR;C:\Windows\system32;C:\Windows;C:\Win dows\System32\Wbem;%PATH%
FOR /f "delims=" %%d IN ('DIR /B') DO WinRAR a -m0 -ep -df -v100m -x*.rar "C:\where_you_want_to_save_new_rar_files\%%~nxd.ra r" "%%~fd"
EXIT
但它不会将readme.txt
添加到RAR文件中。
答案 0 :(得分:0)
这很容易实现,因为控制台版本Rar.exe
以及GUI版本WinRAR.exe
支持在命令行上指定多个文件或目录以添加到同一个存档文件中。
@echo off
for /D %%D in ("C:\directory_with_files_you_want_to_compress\*") do "%ProgramFiles(x86)%\WinRAR\Rar.exe" a -cfg- -ep -idq -m0 -x*.rar -v100m "C:\where_you_want_to_save_new_rar_files\%%~nxD.rar" "%%~fD\" "C:\directory_with_readme.txt\readme.txt" && rd /Q /S "%%~fD" || echo/ && pause
同上面更容易阅读:
@echo off
for /D %%D in ("C:\directory_with_files_you_want_to_compress\*") do (
"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -cfg- -ep -idq -m0 -x*.rar -v100m -y "C:\where_you_want_to_save_new_rar_files\%%~nxD.rar" "%%~fD\" "C:\directory_with_readme.txt\Readme.txt"
if not errorlevel 1 (
rd /Q /S "%%~fD"
) else (
echo/
pause
)
)
批处理代码使用控制台版本Rar.exe
而不是GUI版本WinRAR.exe
,因为完全不需要为此存档文件创建任务使用GUI版本。
删除 Rar 删除所有压缩文件的开关-df
,因为{em> Rar 处理后不应自动删除readme.txt
第一个子目录。此文件也必须添加到其他存档文件中以便为其他子目录创建。相反,命令 RD 用于删除已经成功处理的子目录。如果要创建的RAR存档已存在且存在写保护错误,则会在echo/
处输出空行,并使用pause
停止处理。
添加了开关-idq
以在安静模式下运行 Rar ,这导致仅输出错误。
交换机-m0
和-v100m
导致只存储而不是真正压缩每个子目录中的所有文件到每卷100 MB的多卷RAR存档。因此,此批处理文件显然用于将已压缩的存档,音频,图像或视频文件打包到多卷存档中。
交换机-y
已添加到是的自动提示中。
所有开关都记录在 WinRAR 程序文件文件夹中的文本文件Rar.txt
中。
我在%%~fD
之后添加了一个反斜杠,以防其他人想要使用此代码与switch -ep1
而不是-ep
并添加切换-r
来递归归档每个子目录也没有将子目录名称添加到存档中。使用的开关仅存档每个子目录中的文件,但不归档其子目录,尽管在创建多卷RAR存档后已完全删除已处理的子目录。
另见问题的答案: