我有一个 Windows 批处理文件,其中包含在路径包含重音字符的位置执行 EXE 文件的指令。以下是批处理文件的内容。
@echo off
C:\español\jre\bin\java.exe -version
C: spañol\jre in\java.exe - 该路径存在且正确。我可以直接在cmd.exe上运行这个命令。但是当我从 bat/cmd 文件运行命令时,它失败并显示“系统找不到指定的路径”
解决此问题的一种方法是将代码页设置为 1252(这对我有用)。但恐怕我们必须为任何非英语语言环境设置代码页,并且弄清楚要使用哪个代码页非常困难。
有其他方法可以解决这个问题吗?也许是命令行选项还是其他什么?
在 Windows 中执行此操作的另一种方法是使用 wordpad.exe:
- 运行wordpad.exe
- 像平常一样编写脚本,带上重音符号
- 选择 另存为 > 其他格式
- 选择另存为 文本文档 MS-DOS (*.txt)
- 将文件扩展名从 .txt 更改为 .bat
我遇到了同样的问题,这个答案解决了它。基本上,您必须使用一堆命令来包装脚本来更改终端代码页,然后恢复它。
@echo off
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 1252>nul
:: your stuff here ::
chcp %cp%>nul
效果非常好!
我正在使用Notepad ++,它有一个更改“字符集”的选项,
OEM-US
成功了。 ;)
因为您有
@echo off
,所以您无法看到批处理发送到命令提示符的内容。 重现您的问题,似乎 ñ
字符被误解,因为我看到的输出是:
C:\espa±ol\jre\bin\java -version
The system cannot find the path specified.
我能够通过从命令提示符将命令回显到批处理文件中来使其工作,即
echo C:\español\jre\bin\java.exe -version>>test.bat
这似乎将字符翻译成命令提示符正在寻找的任何内容,尽管我只使用英语语言环境集测试了它,所以我不知道它是否适用于所有情况。 另外,如果您在记事本等文本编辑器中打开批处理,它看起来是错误的(
C:\espa¤ol\jre\bin\java.exe
)
您可以使用 Visual Studio Code,它会让您选择要使用的编码。右下角,选择编码,会显示“使用编码保存”选项。选择 DOS 并将保存重音字符。
在批处理文件中使用 Alt + 0164 代替 ¤ 而不是 Alt + 164 ñ ...这看起来很奇怪,但你的脚本应该运行。
我也遇到了同样的问题。我试图创建一个简单的 XCOPY 批处理文件,将电子表格从一个文件夹复制到另一个文件夹。它的名字里有“é”字符,它拒绝复制。
即使尝试使用 Katalin 和 Metalcoder 的建议,在我的新石器时代 Windows XP 机器上也不起作用。然后我突然想到:为什么不让事情尽可能简单(因为我自己在计算机方面头脑非常简单)并在批处理文件代码中将“é”替换为通配符“?”。
你猜怎么着?成功了!
感谢“Metalcoder”,chcp 1252 在类似问题中为我节省了一个真正的头:
dir /S > 文件.txt
与屏幕输出相比:dir /s
对于这些字符 (ñ, á, ....) 来说是不同的
运行 chcp 1252 后,到文件的重定向按预期工作,文件具有未完成重定向时看到的字符。
注意:控制台旧代码页值为 850,而不是 1252。
为什么微软为控制台设置了错误的代码页代码?现在我想知道如何将其永久设置为1252。