更改 .bat 文件中的代码页(Win7 与 Win Vista)

发布于 2024-12-09 04:02:00 字数 398 浏览 1 评论 0原文

我在尝试更改 .bat 文件中的代码页时遇到一个奇怪的问题。

当我在 Windows 7 中执行以下 .bat 文件时,它执行得很好。

代码页发生更改,program.exe 被执行。

批处理文件:

chcp 65001

"D:\program.exe" /opt ÄiÜ

pause

但是,当我从 Windows Vista 启动 .bat 文件时,代码页会发生更改,然后退出批处理文件。

因此 program.exe 永远不会被执行。
但是,当我从命令行手动运行这两个命令时,它确实有效。

知道如何从 .bat 文件在 Windows Vista 下使其正常工作吗?

I have a strange issue while trying to change the codepage in a .bat file.

When I execute the following .bat file in Windows 7 it executes fine.

The codepage gets changed and program.exe get executed.

The batch file:

chcp 65001

"D:\program.exe" /opt ÄiÜ

pause

However when I start the .bat file from Windows Vista the codepage gets changed and after that the batch file is exited.

So program.exe never gets executed.
However when I run the two commands manually from the commandline it does work.

Any idea how to get this working under Windows Vista from .bat file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

失去的东西太少 2024-12-16 04:02:00

这对我来说是新的,这适用于 Win7,在 Vista 和 XP 中,如果代码页更改为 65001,则批处理文件不起作用是正常的。

但是您可以使用 workaraound

(
  chcp 65001
  cmd /c type myFile.txt
  chcp 850
)
echo the batch is still alive

这可以工作,因为在代码页更改时会缓存完整的块改变了。

在你的情况下(带有德语变音符号)你最好使用代码页 1252

chcp 1252
echo ÄÖÜß

It's new to me that this works with Win7, in Vista and XP it's normal that batch files aren't work if the codepage is changed to 65001.

But you can use a workaraound

(
  chcp 65001
  cmd /c type myFile.txt
  chcp 850
)
echo the batch is still alive

This works, as the complete block is cached while the codepage is changed.

In your case (with german umlauts) you could better use the codepage 1252

chcp 1252
echo ÄÖÜß
独守阴晴ぅ圆缺 2024-12-16 04:02:00

您是否检查了 chcp 的返回代码(chcp 65001 & echo %ERRORLEVEL%)?

无论如何,尝试 chcp 65001 & "D:\program.exe" /opt äiÜ & chcp 850 。

Have you checked return code of chcp (chcp 65001 & echo %ERRORLEVEL%)?

Anyway, try chcp 65001 & "D:\program.exe" /opt ÄiÜ & chcp 850.

回忆凄美了谁 2024-12-16 04:02:00

我找到了一个适合我的(非常肮脏的)解决方案。

从表面上看,我想做的事情是不可能的。

我为使其工作所做的工作如下:

  • 我没有尝试创建批处理文件,而是创建了一个 .txt 文件(与批处理文件具有相同的内容)。
  • 我编写了一个非常简单的 C# 程序,它读取 .txt 文件并执行内容。

正如我所说,它很脏,但对我有用。

如果这里添加其他答案,我也会尝试这些。

I've found a (very dirty) solution which works for me.

By the looks of it it just isn't possible what I want to do.

What I've done to make it work is the following:

  • Instead of trying to create a batchfile I create a .txt file (with the same contents as the batchfile).
  • I've written a very simple C# program which reads the .txt file and executes the content.

As I said it's pretty dirty but it works for me.

If other answer are added here I'll try those as well.

〆凄凉。 2024-12-16 04:02:00

一个不太难看的解决方案,当我需要在批处理文件中使用带有特殊字符的文件名作为参数时,我使用它:

  1. 将 dir 命令的输出定向到 txt 文件( dir c:\foldername > diroutput.txt )
  2. 在中打开 diroutput.txt记事本,找到带有特殊字符的文件名并将其复制到剪贴板(它看起来像垃圾,但没关系)
  3. 将文件名粘贴到记事本中打开的批处理文件中。

如果您在“dos”窗口中输入批处理文件内容(输入batchfilename.bat),您将看到文件名是正确的。 (它在文件查看器内置的totalcommander中看起来也是正确的,但在记事本中看起来很垃圾)

A less ugly solution, I use it when I need to use filenames with special characters as parameters in batch files:

  1. Direct the output of dir command to a txt file ( dir c:\foldername > diroutput.txt )
  2. Open diroutput.txt in notepad, find and copy to clipboard the filename with special characters (it will look like garbage, but it's ok)
  3. Paste the filename to the batchfile opened in notepad.

If you type out the batchfile content in "dos" window ( type batchfilename.bat ) you will see the filename is correct. (It will also look correct in totalcommander built in fileviewer, but it will look garbage in notepad)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文