我们在Team Foundation Server(TFS)中有一个项目,其中包含非英语字符(š).当我试图编写一些与构建相关的东西时,我们偶然发现了一个问题 - 我们无法将š字母传递给命令行工具.命令提示符或其他什么不是搞砸了,并且tf.exe实用程序找不到指定的项目.
我已经尝试了.bat文件的不同格式(ANSI,带有和不带BOM的 UTF-8 )以及用JavaScript编写脚本(这本身就是Unicode) - 但没有运气.如何执行程序并将其传递给Unicode命令行?
我需要使用MS批处理文件将程序的输出分配给变量.
所以在GNU Bash shell我会用VAR=$(application arg0 arg1)
.我在Windows中使用批处理文件需要类似的行为.
有点像set VAR=application arg0 arg1
.
如何在DOS批处理文件中实现逻辑运算符?
嗨,我试图将unicode字符串输出到带有iostreams的控制台并失败.
我发现了这一点: 在c ++控制台应用程序中使用unicode字体 ,这个代码片段有效.
SetConsoleOutputCP(CP_UTF8);
wchar_t s[] = L"èéøÞ????æ?a";
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char* m = new char[bufferSize];
WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
wprintf(L"%S", m);
Run Code Online (Sandbox Code Playgroud)
但是,我没有找到任何方法来使用iostream正确输出unicode.有什么建议?
这不起作用:
SetConsoleOutputCP(CP_UTF8);
utf8_locale = locale(old_locale,new boost::program_options::detail::utf8_codecvt_facet());
wcout.imbue(utf8_locale);
wcout << L"¡Hola!" << endl;
Run Code Online (Sandbox Code Playgroud)
编辑 我找不到任何其他解决方案,而不是在流中包装此片段.希望,有人有更好的想法.
//Unicode output for a Windows console
ostream &operator-(ostream &stream, const wchar_t *s)
{
int bufSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char *buf = …
Run Code Online (Sandbox Code Playgroud) 我目前正在编写一个C#控制台应用程序,它会生成许多指向网站上不同图像的URL,然后使用下载作为字节流WebClient.DownloadDataAsync()
.
我的问题是,一旦进行了第一次异步调用,控制台应用程序会认为程序已完成并在异步调用返回之前终止.通过使用Console.Read()
我可以强制控制台保持打开,但这似乎不是很好的设计.此外,如果用户在进程期间点击进入(当控制台正在等待输入时),程序将终止.
在等待异步调用返回时,是否有更好的方法可以阻止控制台关闭?
编辑:调用是异步的,因为我在下载过程中通过控制台向用户提供状态指示器.
我有一个控制台模式的Windows应用程序(从Unix移植),最初设计用于在收到^C(Unix SIGINT
)时进行干净退出.在这种情况下,干净的出口涉及等待,可能相当长的时间,以便关闭远程网络连接.(我知道这不是正常行为,^C但我无法改变它.)该程序是单线程的.
我可以捕获^C与任一signal(SIGINT)
(如Unix下)或用SetConsoleCtrlHandler
.当程序在CMD.EXE下运行时,可以正常工作.但是,如果我使用MSYS附带的"bash"shell(我使用MinGW环境来构建程序,因为这允许我重用Unix makefile),那么程序会被强制终止一些随机,短时间(小于之后100毫秒)^C.这是不可接受的,因为正如我所提到的,程序需要等待远程网络连接关闭.
人们很可能想要在MSYS bash下运行这个程序.此外,这种效果打破了测试套件.我无法找到任何方法来解决问题,无论是从程序内(理想)还是通过shell上的设置(可接受).谁能推荐任何东西?
我有一个Windows批处理文件,看起来类似于:
C:\DoStuff.cmd
move output.bak C:\newfolder\output.bak
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是DoStuff.cmd执行一个java程序,一旦完成退出批处理运行回到命令提示符.第2行永远不会被击中.
我尝试了以下代替,以在新窗口中执行命令:
start "My program" /WAIT C:\DoStuff.cmd
move output.bak C:\newfolder\output.bak
Run Code Online (Sandbox Code Playgroud)
上面发生的情况是新命令窗口生成cmd文件运行并退出到等待命令提示符,窗口永远不会关闭,第一个命令窗口等待,第二个命令窗口在完成第一步后没有任何操作.
如何在没有控制批处理运行的情况下执行第一个命令?
提前谢谢了
虽然Powershell几乎不可能实现,但我想要实现的目标却相当简单.
我想显示文件的完整路径,其中一些文件的名称中包含阿拉伯语,中文,日语和俄语字符
在控制台中看到的输出正在被另一个脚本消耗.输出包含?而不是实际的人物.
执行的命令是
(Get-ChildItem -Recurse -Path "D:\test" -Include *unicode* | Get-ChildItem -Recurse).FullName
Run Code Online (Sandbox Code Playgroud)
是否有任何简单的方法来启动PowerShell(通过命令行或以任何方式写入脚本),以便正确地看到输出.
PS我在Stack Overflow上经历了很多类似的问题,但除了称之为Windows控制台子系统问题之外,它们都没有太多的输入.
我在其他语言中看到了一些与此相关的问题,并对此进行了相当多的研究.首先,在我们开始走下兔洞之前,我必须说明我为什么这样做.我正在打印一个二叉树,我找到了一种方法来做到这一点,我认为没有其他人找到它(在网上的任何地方找不到它我永远搜索过).它解决了很多与间距和冲突有关的问题,我可能会在以后提供它作为Prettyprint Btree问题的答案.无论如何,执行上述操作的一个重要部分是能够将换行符(光标)向上移动一行.我也会安排将一个回车移动一行.
我已经对这个名为"编辑1-3"的问题进行了三次编辑.
我的特定Windows版本(可能相关):Windows 10 v1607操作系统版本:14393.2035
问题是使用ANSI转义字符很容易完成
ANSI转义码:https://en.wikipedia.org/wiki/ANSI_escape_code
使用"\ 033 [A"是我想要实现的特定代码(从有关在python中移动一行的问题得到它).
所以问题解决了吗?哦不,甚至不接近.该问题是,显然窗户上挂着这个""" 精彩 '’"更新,可能有破产一切ANSI /控制台有关.下面链接到有关此问题,但具有不同的ANSI要求,但根本问题是相同的.
如何使用System.out.println在控制台中打印颜色?
tl:dr由于某些原因它不适用于Windows,你需要一个大型库来执行此操作或其他操作.
Sooo然后我尝试对更新本身做一些深入的研究,为什么这恰好是特定于Windows的(当然),我被引导到了这一点.
Windows问题的根本原因:https://github.com/Microsoft/WSL/issues/1173
tl; dr:基本上,更新更改了cmd.exe的默认设置,cmd.exe是java使用的默认控制台.更改的是如何为'子应用程序'AKA java处理ANSI代码的控制台设置(使用控制台但不是控制台本身的东西).默认值在更新之前,子应用程序继承了启用ANSI的默认控制台.现在(因为显然以前的默认设置破坏了东西)他们改变了它,以便子应用程序不从控制台继承默认设置.这意味着如果java想要启用ANSI,java必须自己有效地设置此控制台模式.显然有大量的libary用于java命令,但是有很多可用的库存有一些问题.首先他们需要maven,我不想要maven,我也不喜欢 喜欢需要一百万个额外的库来做一些非常简单的事情,它增加了我的代码依赖的东西(这很糟糕).所以我试图避免像"只使用JANSI"这样的简单解决方案setConsoleMode
对于ANSI.
在我完成阅读/理解后,我尝试进入我的注册表编辑器并尝试更改控制台的默认设置(cmd.exe),以便始终为子应用程序启用ANSI(AKA java).有人在github讨论中提出过建议,但令我惊讶的是,具体设置对我来说并不存在.(它应该在计算机 - > HKEY_CUURENT_USER - >"TrimLeadingZeros"和"WindowAlpha"之间的控制台中).
由于我无法编辑控制台设置而没有大型库充满了我不想要的东西,我尝试在盒子外面思考并且在java设置中搞砸了.我发现java确切地设置了它的控制台,并发现我可以更改该设置以在java中使用不同的控制台.我最近安装了git,并且知道git bash可用,所以我尝试使用下面的问题(以及谷歌一般)作为起点.
https://superuser.com/questions/1196463/start-sh-exe-bash-with-given-path
我无法找到合适的工作.它没有返回任何错误或做任何新的事情,就像所有.它甚至被设置为'当前项目',所以当我运行我的项目时,它应该做些不同的事情吗?我相信问题的一部分是我的根git文件夹是搞乱的(不在程序文件中).这可能是因为我使用的计算机是一台工作计算机,也许某些设置会影响安装git的位置,我不知道但我知道的是当我更改控制台时我尝试了这条路径:
C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\BIN\bash.exe
我也尝试过:
C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\bash.exe
和
C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\BIN\sh.exe
和
"C:\ Users\abbotts1\AppData\Local\Programs\Git\bin\sh.exe"--login -i
每次更改控制台后我都试过这段代码:
public class ExpressionEvaluator {
public static void main(String[] args) {
System.out.println("1"); …
Run Code Online (Sandbox Code Playgroud) windows-console ×10
batch-file ×3
unicode ×3
cmd ×2
command-line ×2
ansi ×1
asynchronous ×1
c ×1
c# ×1
c++ ×1
delphi ×1
input ×1
io ×1
iostream ×1
java ×1
portability ×1
powershell ×1
terminal ×1
utf-8 ×1
webclient ×1
windows ×1