运行其中包含重音字符的 BAT/CMD 文件

问题描述 投票:0回答:8

我有一个 Windows 批处理文件,其中包含在路径包含重音字符的位置执行 EXE 文件的指令。以下是批处理文件的内容。

@echo off
C:\español\jre\bin\java.exe -version

C: spañol\jre in\java.exe - 该路径存在且正确。我可以直接在cmd.exe上运行这个命令。但是当我从 bat/cmd 文件运行命令时,它失败并显示“系统找不到指定的路径”

解决此问题的一种方法是将代码页设置为 1252(这对我有用)。但恐怕我们必须为任何非英语语言环境设置代码页,并且弄清楚要使用哪个代码页非常困难。

有其他方法可以解决这个问题吗?也许是命令行选项还是其他什么?

batch-file codepages
8个回答
28
投票

在 Windows 中执行此操作的另一种方法是使用 wordpad.exe

  1. 运行wordpad.exe
  2. 像平常一样编写脚本,带上重音符号
  3. 选择 另存为 > 其他格式
  4. 选择另存为 文本文档 MS-DOS (*.txt)
  5. 将文件扩展名从 .txt 更改为 .bat

23
投票

我遇到了同样的问题,这个答案解决了它。基本上,您必须使用一堆命令来包装脚本来更改终端代码页,然后恢复它。

@echo off
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 1252>nul

:: your stuff here ::

chcp %cp%>nul

效果非常好!


11
投票

我正在使用Notepad ++,它有一个更改“字符集”的选项,

OEM-US
成功了。 ;)


6
投票

因为您有

@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
)


4
投票

您可以使用 Visual Studio Code,它会让您选择要使用的编码。右下角,选择编码,会显示“使用编码保存”选项。选择 DOS 并将保存重音字符。


3
投票

在批处理文件中使用 Alt + 0164 代替 ¤ 而不是 Alt + 164 ñ ...这看起来很奇怪,但你的脚本应该运行。


2
投票

我也遇到了同样的问题。我试图创建一个简单的 XCOPY 批处理文件,将电子表格从一个文件夹复制到另一个文件夹。它的名字里有“é”字符,它拒绝复制。

即使尝试使用 Katalin 和 Metalcoder 的建议,在我的新石器时代 Windows XP 机器上也不起作用。然后我突然想到:为什么不让事情尽可能简单(因为我自己在计算机方面头脑非常简单)并在批处理文件代码中将“é”替换为通配符“?”。

你猜怎么着?成功了!


0
投票

感谢“Metalcoder”,chcp 1252 在类似问题中为我节省了一个真正的头:

dir /S > 文件.txt

与屏幕输出相比:dir /s

对于这些字符 (ñ, á, ....) 来说是不同的

运行 chcp 1252 后,到文件的重定向按预期工作,文件具有未完成重定向时看到的字符。

注意:控制台旧代码页值为 850,而不是 1252。

为什么微软为控制台设置了错误的代码页代码?现在我想知道如何将其永久设置为1252。

© www.soinside.com 2019 - 2024. All rights reserved.