如何从 winrar 文件 cli 中读取评论部分

How to read comment section from winrar file cli

我正在尝试使用 winrar cli 读取许多 .rar 文件的注释部分并将其通过管道传输到文本文件。 WinRAR -z 命令打开评论部分,但无法通过管道传输。 感谢帮助。

WinRAR 的program files 文件夹包含控制台版本Rar.exe 和文本文件Rar.txt,这是控制台版本的手册。因此,在使用 Rar.exe 时,建议双击文本文件 Rar.txt 在关联的应用程序(如 Windows 记事本中打开它并从上到下阅读它。

Rar.txt包含RAR命令的解释cw:

    cw      Write archive comment to specified file.
Format of output file depends on -sc switch.
If output file name is not specified, comment data will be sent to stdout.
Examples:
1) rar cw arc comment.txt
2) rar cw -scuc arc unicode.txt
3) rar cw arc

此外,在底部附近解释了开关 -y,如果要写入注释的文件已经存在,这对于此任务也很有用,这会导致 Rar.exe 上的提示如果文件应该被覆盖,则不使用开关 -y

最后一个用于使用安静模式的开关 -idq 在这里也很有用,可以防止在将 RAR 压缩文件中的所有注释写入文本文件时输出到控制台。

因此任务可以通过 运行 在命令提示符中完成 window:

for %I in ("C:\Path to RAR files\*.rar") do @"%ProgramFiles%\WinRAR\rar.exe" cw -idq "%I" "C:\Output Path\%~nI.txt"

但是如何将所有的评论直接放到一个文本文件中呢?

这是一个更有趣的问题,因为确实需要一个批处理文件来实现这一点。

@echo off
set "FirstFile=Yes"
set "CommentFile=C:\Output Path\AllComments.txt"
del "%CommentFile%" 2>nul

for %%I in ("C:\Path to RAR files\*.rar") do (
    if not defined FirstFile (
        >>"%CommentFile%" echo ================================================================================
        >>"%CommentFile%" echo/
    ) else set "FirstFile="
    >>"%CommentFile%" echo %%I
    >>"%CommentFile%" echo/
    "%ProgramFiles%\WinRAR\Rar.exe" cw -idc -y "%%I" CON: >>"%CommentFile%"
)

set "CommentFile="
set "FirstFile="

CON: 被指定为评论文件,以将评论写入控制台,而不是屏幕,屏幕被重定向到评论文件旁边并附加文本。

开关-idc用来防止只输出版权声明,但是英文Rar.exe输出的是Comment is not present行,上面有空行,下面没有空行已处理的 *.rar 文件不包含注释的情况。对于不包含注释的 *.rar 文件,当然也可以使用 -idq 将任何内容写入所有注释文本文件。

注意: 对于非 ASCII 注释,额外使用开关 -sc 或在文件 names/paths 上使用非 ASCII 字符,所有注释都在一个文本中发布的文件解决方案必须进行调整或根本不可能,具体取决于执行批处理文件本身以生成包含所有正确编码字符的文本文件的环境。