如何在将文件压缩到RAR存档文件时将自述文件添加到文件夹的每个子文件夹?

时间:2017-07-17 12:12:35

标签: batch-file cmd rar

我想编写一个批处理脚本,将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文件中。

1 个答案:

答案 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存档后已完全删除已处理的子目录。

另见问题的答案: