在Windows命令中处理扩展字符?

tim*_*11g 6 windows delphi batch-file

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

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

xcopy "Pezuñero\1 - 001.wav" \temp
Run Code Online (Sandbox Code Playgroud)

这不是:

call another.cmd "Pezuñero" 
Run Code Online (Sandbox Code Playgroud)

"another.cmd"的内容:

xcopy "%~1\1 - 001.wav"    \temp
Run Code Online (Sandbox Code Playgroud)

%~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
Run Code Online (Sandbox Code Playgroud)

请注意,"ñ"(0xF1)字符已更改为"±"(0xB1).

任何人都可以解释发生了什么,以及如何解决这个问题?

tim*_*11g 3

感谢麦克道尔和罗慕洛为我指明了正确的方向。我意识到我需要更改生成批处理的应用程序(在 Delphi 中),以便它使用与 Windows 中的命令处理器兼容的正确(OEM)代码页。我没有找到任何可以转换代码页字符串的内容,但我确实发现了 Windows API 函数 SetFileApisToOEM 和 SetFileApisToANSI;

我将它们放在程序的开头和结尾,如下所示:

{main procedure}
begin
  SetFileApisToOEM;
  {all the rest of the program}
  SetFileApisToANSI;
end.
Run Code Online (Sandbox Code Playgroud)

现在,批处理文件是使用 OEM 代码页生成的,并且在从 CMD 提示符运行时可以正常工作。