【问题标题】:Add a single file to each rar file in a folder将单个文件添加到文件夹中的每个 rar 文件
【发布时间】:2015-12-03 16:26:19
【问题描述】:

我正在尝试弄清楚如何在文件夹中的每个 .rar 文件中添加一个文件。

例如我有:

  • rar1.rar
  • rar2.rar
  • rar3.rar

我希望将“readme.txt”文件添加到每个文件中。

或者,如果这不可能,我可以将所有 .rar 文件提取到文件夹中,然后使用此批处理代码压缩它们?

如何包含 readme.txt 文件?

@ECHO OFF
cd C:\Users\userss\Desktop\compressing
SET PATH=C:;C:\Program Files\WinRAR;C:\Windows\system32;C:\Windows;C:\Win dows\System32\Wbem;%PATH%
FOR /f "delims=" %%d IN ('DIR /B') DO WinRAR a -m0 -ep "C:\Users\userss\Desktop\destination\%%~nxd.rar" "%%~fd"
EXIT

【问题讨论】:

    标签: batch-file command winrar


    【解决方案1】:

    我建议如下:

    @echo off
    for /F "delims=" %%I in ('dir /B "%USERPROFILE%\Desktop\compressing\*.rar"') do "%ProgramFiles%\WinRAR\Rar.exe" a -ep -idq -y -m0 "%USERPROFILE%\Desktop\compressing\%%I" "%USERPROFILE%\Desktop\compressing\readme.txt"
    

    有些人可能认为这也可以在没有命令 DIR 的情况下使用:

    @echo off
    for %%I in ("%USERPROFILE%\Desktop\compressing\*.rar") do "%ProgramFiles%\WinRAR\Rar.exe" a -ep -idq -y -m0 "%%~I" "%USERPROFILE%\Desktop\compressing\readme.txt"
    

    但这不适用于 FAT32 驱动器,因为命令 FOR 会在修改后再次处理每个 RAR 存档,从而导致无限循环。

    NTFS 文件系统驱动程序返回始终按字母顺序排序的文件列表,而 FAT32 文件系统驱动程序返回存储在文件分配表 (FAT) 中的文件列表,因此 FAT 中的排序顺序会随着目录中的每次文件修改而改变。

    以下循环将避免 FAT32 驱动器上的无限循环:

    @echo off
    for %%I in ("%USERPROFILE%\Desktop\compressing\*.rar") do "%ProgramFiles%\WinRAR\Rar.exe" u -ep -idq -y -m0 "%%~I" "%USERPROFILE%\Desktop\compressing\readme.txt"
    

    不同之处在于使用 RAR 命令 u 而不是 a。这导致将单个文件添加到每个 *.rar 文件。当 FOR 再次调用 Rar.exe 以获得已更新的存档时,RAR 检测到该文件已在存档中,并且不会再次修改 RAR 存档。所以在每个 *.rar 文件被Rar.exe 处理两次之后(第一次添加文件,第二次不改变任何内容),FOR 循环结束。

    但是,使用命令 DIR 可以避免在 NTFS 和 FAT32 驱动器上多次处理每个 rar 文件。

    必须使用 GUI WinRAR.exe 而不是控制台 Rar.exe 来将 readme.txt 添加到 ZIP 压缩包,因为控制台版本仅支持 RAR 压缩包,如程序文件文件夹中文本文件 Rar.txt 顶部所述em>WinRAR 是控制台版本的手册。

    @echo off
    for /F "delims=" %%I in ('dir /B "%USERPROFILE%\Desktop\compressing\*.zip"') do "%ProgramFiles%\WinRAR\WinRar.exe" a -ep -ibck -y -m0 "%USERPROFILE%\Desktop\compressing\%%I" "%USERPROFILE%\Desktop\compressing\readme.txt"
    

    开关-idq 被开关-ibck 代替,用于在后台运行WinRAR,这意味着最小化到系统托盘。有关 GUI 版本的命令和开关的详细信息,请参阅 WinRAR 选项卡 Contents 的帮助中的 命令行模式 一章。 GUI版本支持的开关列表与控制台版本支持的开关列表略有不同。

    【讨论】:

    • 嗨,把文件放在 zip 文件上怎么样?
    • @Mofi 不只是 FAT32,在 NTFS 中,一个普通的 for 循环也会多次处理某些文件。我忘了。
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多