我们在Team Foundation Server (TFS)中有一个项目,其中有一个非英语字符(š)。当尝试编写一些与构建相关的脚本时,我们偶然发现了一个问题——我们不能将这个字母传递给命令行工具。命令提示符或其他东西会把它弄乱,tf.exe实用程序无法找到指定的项目。
我尝试了不同格式的.bat文件(ANSI, UTF-8,带BOM和不带BOM),以及用JavaScript编写脚本(本质上是Unicode) -但运气不好。如何执行程序并传递一个Unicode命令行?
我们在Team Foundation Server (TFS)中有一个项目,其中有一个非英语字符(š)。当尝试编写一些与构建相关的脚本时,我们偶然发现了一个问题——我们不能将这个字母传递给命令行工具。命令提示符或其他东西会把它弄乱,tf.exe实用程序无法找到指定的项目。
我尝试了不同格式的.bat文件(ANSI, UTF-8,带BOM和不带BOM),以及用JavaScript编写脚本(本质上是Unicode) -但运气不好。如何执行程序并传递一个Unicode命令行?
当前回答
一个快速决定。bat文件,如果你的电脑显示你的路径/文件名正确时,你在dos窗口输入:
copy con temp.txt[按Enter] 输入路径/文件名[按Enter] 按Ctrl-Z[按Enter]
这样你就创建了一个。txt文件- temp.txt。在记事本中打开它,复制文本(不要担心它看起来不可读),并粘贴到你的。bat文件中。 在DOS-window中执行以这种方式创建的.bat对mе(西里尔语,保加利亚语)有效。
其他回答
一个非常简单的选择是安装一个Windows bash shell,如MinGW并使用它:
有一点学习曲线,因为你将需要使用Unix命令行功能,但你会喜欢它的力量,你可以将控制台字符集设置为UTF-8。
当然,您还可以得到所有常见的*nix好东西,如grep、find、less等。
把代码页改成1252对我有用。我遇到的问题是,Windows Server 2008上的DOS正在将符号double doller§转换为另一个符号。
在我的BCP声明^§中,我使用了CHCP 1252和它之前的一个帽。
Try:
chcp 65001
这会将代码页更改为UTF-8。此外,还需要使用Lucida控制台字体。
这个问题很烦人。我通常在文件名和文件内容中使用中文字符。请注意,我使用的是Windows 10,下面是我的解决方案:
如果在Windows 10上安装了Ubuntu bash,则显示文件名为dir或ls
设置该区域支持非utf8字符。 在此之后,控制台的字体将被更改为该地区的字体,它还将更改控制台的编码。
在完成以上步骤后,为了使用命令行工具显示UTF-8文件的文件内容
通过chcp 65001将页面更改为utf-8 更改为支持utf-8的字体,例如Lucida Console 使用type命令查看文件内容,如果你在Windows 10上安装了Ubuntu bash,可以使用cat命令查看 请注意,在将控制台的编码设置为utf-8后,我无法在cmd中使用中文输入法输入汉字。
最懒的解决方案:只使用控制台模拟器,如http://cmder.net/
我通过在批处理文件中使用它们的短名称(8点3)来删除以unicode命名的文件,从而避免了类似的问题。
短名称可以通过执行dir /x查看。显然,这只适用于已知的Unicode文件名。