如何在批处理文件中指定一个具有希伯来名称的文件夹,以在使用 Rar.exe 创建 RAR 存档时排除?

How to specify in a batch file a folder with a Hebrew name to exclude on creating a RAR archive with Rar.exe?

我制作了一个简单的备份批处理文件来压缩整个驱动器,不包括一些文件夹,包括一个以希伯来文命名的文件夹。但是使用的命令行导致 Rar.exe 也压缩具有希伯来语名称的文件夹,即使我使用 dir /x 输出的短 8.3 文件夹名称也是如此,在本例中为 CA05~1.

该命令行无法排除具有希伯来名称的文件夹:

"C:\Program Files (x86)\WinRAR\Rar.exe" a -hp123 -r -x*\"12" -x*\"13" -x*\"backup" -x*\"CA05~1" -y -- "G:\backup\bu.rar" "G:\" 

是否有任何关于在单个命令行中进行修复的建议?

这只是许多命令行中希伯来语问题的一个示例,因此重命名文件夹会有所帮助,但只是为了“短期”。

此外,所提供的代码并未显示 "-x*\" 中的所有参数。

处理批处理文件的 Windows 命令处理器 cmd.exe 不是为处理 Unicode 而设计的。它根据为使用的帐户配置的区域(国家)默认使用 character encoding with just one byte per character using an OEM code page。根据 cmd.exe 在处理批处理文件时使用的代码页,批处理文件应包含所有字符。

希伯来语的 OEM 代码页将是 code page 856. A Hebrew folder name like אבג Unicode encoded with UTF-16 带有十六进制字节流的 Little Endian D0 05 D1 05 D2 05 将使用带有十六进制字节流的代码页 856 进行编码 80 81 82

我希望这是正确的,因为希伯来语是从右到左而不是从左到右显示和阅读的。所以第一个 Hebrew letter alef is displayed as third character of the Hebrew word while the third Hebrew letter gimel 显示为从西欧的角度从左到右阅读的希伯来语单词的第一个字符。我没有在我的 Windows 电脑上使用希伯来语的经验。

使用批处理文件可以工作:

@echo off
%SystemRoot%\System32\chcp.com 856
"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -dh -ep1 -hp123 -idcdp -r "-x*\" "-x*\" "-x*\backup\" "-x*\אבג\" -y -- "G:\backup\bu.rar" "G:\"

三个希伯来字符אבג必须用十六进制字节流80 81 82存储在批处理文件中,第一个א、第二个ב和第三个[=23] =] 并一起显示为 אבג.

在计算机上执行第一行时会输出以下错误消息 运行 Windows 7 完全不支持希伯来语代码页 856:

Invalid code page

因此,代码页没有从 850(西欧 OEM 代码页)切换到 856(希伯来语 OEM 代码页),正如我在 运行 命令中看到的那样 chcp 批处理文件处理完成后 Rar.exe 包含名称为 אבג.

的文件夹

另一种解决方案可能是在命令行中使用 UTF-8 encoded batch file without byte order mark (BOM):

@echo off
%SystemRoot%\System32\chcp.com 65001
"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -dh -ep1 -hp123 -idcdp -r "-x*\" "-x*\" "-x*\backup\" "-x*\אבג\" -y -- "G:\backup\bu.rar" "G:\"

显示为אבג的三个希伯来字符必须以十六进制字节流D7 90 D7 91 D7 92存储在批处理文件中。这在 Windows 7.

的计算机上有效

我最喜欢的解决方案是使用带有以下命令行的 ASCII 编码批处理文件:

@"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -dh -ep1 -hp123 -idcdp -r -scul "-x@%~dp0ExcludeList.txt" -y -- "G:\backup\bu.rar" "G:\"

它的优点是易于编写并且始终适用于任何 Windows 包括 Windows XP。

此解决方案要求批处理文件目录中存在文本文件ExcludeList.txt。此文本文件必须使用带 BOM 的 Little Endian 的 UTF-16 Unicode 编码,其中 Rar.exe 还支持不带 BOM 的 UTF-16 LE 或带 BOM 的 UTF-16 BE。 Windows 在 另存为 [=112] 中为 编码 选项选择 Unicode 时,记事本会保存一个使用 UTF-16 LE BOM 编码的文本文件=] 对话框 window,然后单击按钮 保存

Unicode 编码的文本文件 ExcludeList.txt 应包含以下行:

*\
*\
*\backup\
*\אבג\

开关"-x@%~dp0ExcludeList.txt"通知Rar.exe从批处理文件目录中的文件ExcludeList.txt中读取要排除的参数。开关 -scul 告诉 Rar.exe 这个列表文件是 Unicode (UTF-16) 编码的。 Rar.exe 是一个完整的 Unicode 感知 Windows 控制台应用程序。

Rar.exe 将 file/folder 名称与使用短 8.3 file/folder 名称的排除列表项进行比较。它始终使用长 file/folder 名称,因为这些名称必须存储在 RAR 存档文件中,而不是 8.3 格式的短 file/folder 名称。也不能保证文件系统创建短 8.3 file/folder 名称,因为这是创建文件系统(格式化分区)的一个选项。

Rar.exe的说明书是文本文件Rar.txt。它存储在 WinRAR 的程序文件夹中,如 WinRAR.exeRar.exeUnRAR.exe。它可以通过双击打开,应该从上到下阅读一次以了解使用的开关。

Rar 手册还描述了如果具有特定名称(如 1213backupאבג 的文件夹应独立排除通过在开头使用通配符 * 在文件夹层次结构中找到此类文件夹的位置,必须在 Windows 上指定文件夹名称,并带有尾随 \ 和尾随 / 在 Linux/Max 上被解释为 文件夹 名称。在排除列表文件 ExcludeList.txt 中使用参数 "-x*" "-x*" "-x*\backup" "-x*\אבג" 分别包含 ***\backup*\אבג 的行将导致不包括在文件夹层次结构中的任何位置找到具有此类名称的 文件 。包含 *? 等通配符的排除项末尾的目录分隔符指示 WinRAR 将通配符模式应用于文件夹名称和不在文件名上。