windows - 处理 Windows 命令中的扩展字符?

标签 windows delphi batch-file

我正在调试 Windows 批处理命令文件。在路径或文件名中使用扩展 (> 0x7f) 字符时失败。该问题似乎与将参数传递给从另一个调用的命令文件有关。

例如,此命令按预期工作:

xcopy "Pezuñero\1 - 001.wav" \temp

这不是:

call another.cmd "Pezuñero" 

“another.cmd”的内容:

xcopy "%~1\1 - 001.wav"    \temp

%~1 语法扩展参数并删除引号。这是必要的,因为在真正的命令文件中,调用或被调用命令文件中的路径可能有空格。

第二个示例的结果(从 CMD 窗口复制)是这样的:

C:\>call another.cmd "Pezu±ero"    

C:\>xcopy "Pezu±ero\1 - 001.wav"    \temp
File not found - 1 - 001.wav
0 File(s) copied

请注意,“ñ”(0xF1) 字符已更改为“±”(0xB1)。

谁能解释发生了什么,以及如何解决这个问题?

最佳答案

脚本必须使用 cmd.exe 使用的相同编码编写。

在提示符处键入 chcp 并查看得到的结果。然后使用支持该编码的编辑器打开该文件。对我来说,chcp 输出代码页 850,所以我在 JEdit 中编辑我的脚本选择 IBM850 作为文件编码。我在 PSPad 中编辑文件时得到相同的结果将格式设置为OEM

P.S.: 我在我的机器上测试了你的步骤,我在 notepad.exe 中写入的 ñ 字符(使用默认的 ANSI 编码)也被转换为 < strong>± 从命令提示符读取时,看起来您的机器使用类似的 ANSI 和 OEM 编码。为确保尝试将 ñ 替换为 ¤(使用 notepad.exe)。这使得脚本在我从命令提示符运行时可以正常工作(因为 ANSI 的 ¤ 的字节值与 OEM 的 ñ 相同)。

关于windows - 处理 Windows 命令中的扩展字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735617/

相关文章:

python - 安装了 Anaconda 4.3.1(64 位),其中包含 Python 3.6 但缺少 pip3,无法安装 tensorflow

Delphi TIdHTTP POST 与 GET 相比非常慢

windows - UTF-16 到 UTF-8 的转换(用于在 Windows 中编写脚本)

windows - 从 Windows 批处理文件替换文本文件中的字符

java - 从通过 VBA 启动的 .bat 文件运行时找不到 java.exe

windows - Visual Studio C++ 实现接口(interface)

c++ - 如何在C++中添加环境变量?

Windows 中的 Ruby 多行反引号执行不起作用

delphi - 向第三方组件添加类似 OnHint 的功能

delphi - 带 Rad Studio 10.2 的 Nox 模拟器