在BAT/CMD文件中运行带有重音字符的命令

26

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

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

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

解决此问题的一种方法是将代码页设置为1252(对我有效)。但是我担心我们必须为任何非英语区域设置代码页,并找出要使用哪个代码页相当困难。

是否有其他替代方法来解决这个问题?也许是一种命令行选项或其他方法?


这最终成为一个“你如何保存文件”的问题。 - Traxidus Wolf
7个回答

28

在Windows系统中,另一种方法是使用wordpad.exe

  1. 运行wordpad.exe
  2. 按照平常方式撰写脚本,包括重音符号
  3. 选择另存为 > 其他格式
  4. 选择将其保存为文本文档 MS-DOS (*.txt)
  5. 将文件扩展名从.txt更改为.bat

我有时通过在“cmd edit”中编写路径来解决这个问题。不过,在Windows 8中没有“edit”。 - Andrestand
1
因为它将字符代码从 ANSI 转换为 DOS。 - user6017774
1
我尝试过许多方法,包括使用 chcp 1252 和 Notepad 编辑器,但都没有成功。但最终这些明确的指示起了作用,而且速度很快。干得好!+1 - loved.by.Jesus

21

我曾经也遇到过同样的问题,这个答案解决了它。基本上,你需要用一系列的命令来改变终端的代码页,然后再恢复它。

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

:: your stuff here ::

chcp %cp%>nul

运作得十分顺利!


1
对我来说,使用法语字母(例如ç)有效。谢谢。 - locobastos
2
它像魔法一样运行,但我不得不使用Windows 10记事本将.bat文件保存为ANSI编码。 - LichKing

11

我正在使用Notepad ++,它有一个可以更改“字符集”的选项,OEM-US就足够了。 ;)


在我的情况下,它是UCS-2 LE BOM。 - DigCamara
在我的情况下,它是西欧->Windows-1252。 - alesscor
@genuinefafa 这取决于操作系统的语言。 - neves
你确定吗,@neves?编码不应该与操作系统有关... 就我所知。 - genuinefafa

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 的 ñ... 这样看起来会有些奇怪,但您的脚本应该可以正常运行。


遇到了同样的问题...只是字符不同(Alt 0162 是 ó,而不是 Alt 0164)。 - DigCamara

2
我也遇到了同样的问题。我试图创建一个简单的XCOPY批处理文件,将一个电子表格从一个文件夹复制到另一个文件夹。它的名称中有"é"字符,但它无法复制。
即使尝试使用Katalin和Metalcoder的建议,在我的旧版Windows XP机器上仍然无法工作。然后我突然想到:为什么不尽可能地保持简单(因为当涉及到计算机时,我自己非常简单),并在批处理文件代码中用通配符"?"替换"é"。
猜猜发生了什么?它奏效了!

对我也起作用了!非常感谢。超级简单的解决方案2023年。 - fedeteka
对我也起作用了!非常感谢。超级简单的解决方案2023。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接