我正在尝试使用批处理脚本删除一些带有unicode字符的文件(这是一项要求)。所以我运行cmd并执行:
> chcp 65001
有效地将代码页设置为UTF-8。它有效:
D:\temp\1>dir
Volume in drive D has no label.
Volume Serial Number is 8C33-61BF
Directory of D:\temp\1
02.02.2010 09:31 <DIR> .
02.02.2010 09:31 <DIR> ..
02.02.2010 09:32 508 1.txt
02.02.2010 09:28 12 delete.bat
02.02.2010 09:20 95 delete.cmd
02.02.2010 09:13 <DIR> Rún
02.02.2010 09:13 <DIR> Гуцул Каліпсо
3 File(s) 615 bytes
4 Dir(s) 11 576 438 784 bytes free
D:\temp\1>rmdir Rún
D:\temp\1>dir
Volume in drive D has no label.
Volume Serial Number is 8C33-61BF
Directory of D:\temp\1
02.02.2010 09:56 <DIR> .
02.02.2010 09:56 <DIR> ..
02.02.2010 09:32 508 1.txt
02.02.2010 09:28 12 delete.bat
02.02.2010 09:20 95 delete.cmd
02.02.2010 09:13 <DIR> Гуцул Каліпсо
3 File(s) 615 bytes
3 Dir(s) 11 576 438 784 bytes free
然后我在批处理脚本中放入相同的rmdir
命令并将其保存为UTF-8编码。但是,当我运行没有任何反应时,几乎没有任何东西:在这种情况下,即使回声也不是批处理脚本。即使在OEM编码中保存脚本也无济于事。
因此,当我在控制台中将代码页更改为UTF-8时,脚本就会停止工作。有人知道如何解决这个问题吗?
答案 0 :(得分:9)
如果要在批处理文件中支持unicode,则单独CHCP就会中止批处理文件。我建议将CHCP放在需要unicode的每个批处理文件行上,如下所示
chcp 65001 > nul && <real command here>
示例:在我的情况下,我想在调试时获得一个很好的TAIL日志文件,但是甚至拉丁字符1字符的内容也搞砸了。所以这是我的批处理文件,它从Windows Resource Kit中包装真正的尾部实现。
@C:\WINDOWS\system32\chcp.com 65001 >nul && tail.exe -f %1
此外,要输出到控制台,您需要设置一个真正的字体,即Lucidia Console。
显然,对于输出到文件,命令行需要以Unicode运行,因此您将按照以下步骤启动批处理脚本
cmd /u /c <batch file command here>
免责声明:使用Windows Resource Kit在Windows XP sp3上测试。
答案 1 :(得分:0)
控制台中的Unicode支持,尤其是批处理文件中的Unicode支持非常糟糕。 您是否可以“扭曲”PowerShell或Active Scripting(VBScript或JScript)的要求?
从长远来看,它会为你带来很多痛苦(如果你需要超越这个简单的任务而增长)
更不用说PowerShell和ActiveScripting都使用更强大的语言,允许函数,正确的循环,实变量,调试器,为更严肃的项目提供许多好处。
答案 2 :(得分:0)
尝试在批处理文件中插入空行作为第一行...
第1行:
第2行:CHCP 65001
第3行:脚本命令
应该工作!