管理带有重音字符的路径

new*_*new 4 path batch-file diacritics

在批处理中,指定名称包含重音字符的路径,在文件系统中找不到文件,而删除路径中的所有重音字符时,会找到这些文件。尽管如此,我必须管理用重音字符编写的路径。有什么办法可以解决这个问题吗?

如果你需要了解我的操作系统,我在 7 32。

谢谢

Ele*_*ios 5

默认配置下的批处理无法打印 unicode 字符,但可以识别该字符并使用它。\n这意味着您无法打印“\xc3\xba”,但可以访问名为“\xc3\xba”的文件夹或触摸名为“\xc3\xba”的文件。

\n\n

然后,如果您的脚本无法访问带有重音字符的文件,可能的原因是您的脚本的编码不是 ANSI,\n因此在记事本中打开脚本并确保使用 ANSI 编码(无 utf-8 或 unicode)保存它。

\n\n

例子:

\n\n
@echo off\n\nCHCP 850 >NUL\n\nfor %%# in (*.txt) do (\n\n    Echo [+] reading File: .\\%%~nx# | MORE\n    Type "%%~nx#"\n) \n\nPause>NUL\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
[+] reading File: .\\\xc3\xa1\xc3\xa9\xc3\xad\xc3\xb3\xc3\xba\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9 \xc3\xb1 \xc3\x91 \xc3\xa7 \xc3\x87.txt\n\nThis is the text content of my file with ISO-Latin characters\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果你想在 CMD 中打印重音字符,那么你需要进行 char 转换,这可以解决问题:

\n\n
@echo off\nCHCP 850 >NUL\ncopy con Mychars.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

在该提示中,您将写入所需的字符,例如“ \xc3\xa9\xc3\xad\xc3\xb3\xc3\xba ”,然后您将获得一个包含以下内容的“Mychars.txt”文本文件:

\n\n
 \xe2\x80\x9a\xc2\xa1\xc2\xa2\xc2\xa3\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在您可以使用该字符来打印重音字符:

\n\n
@echo off\necho\xc2\xa0\xe2\x80\x9a\xc2\xa1\xc2\xa2\xc2\xa3\nPause>NUL\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
\xc3\xa9\xc3\xad\xc3\xb3\xc3\xba\n
Run Code Online (Sandbox Code Playgroud)\n\n

PS1:请记住执行我所说的以 ANSI 编码保存脚本的所有操作。

\n\n

PS2:请注意我如何使用 CHCP 850 命令,这意味着 CMD 的代码页,默认情况下 CMD 使用 850 代码页,但我使用默认的 1250 代码页启动 CMD 以避免所有这些问题,因此在我的示例中我需要使用代码页 850 向您展示。

\n\n

您可以使用注册表项设置默认的 CMD 代码页:

\n\n
REG ADD "HKCU\\Software\\Microsoft\\Command Processor" /V "Autorun" /T "REG_SZ" /D "chcp 1250 >NUL" /F >NUL 2>&1\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以在此处阅读有关代码页的信息:http://msdn.microsoft.com/en-us/library/cc195064.aspx

\n

  • 伟大的!现在工作正常。你使我摆脱了沉重的负担。非常感谢你。 (2认同)