如何在Windows命令提示符下将command2的输出作为command1的输入传递

时间:2012-12-04 04:44:18

标签: visual-c++ unix sua

在我的程序中,我必须使用SUA的diff命令来找出2个文件的区别。

我使用如下命令,

diff xx yy

这里

xx - /a/s/xx.txt

yy - /a/s/yy/txt

xx.txtyy.txt的路径采用Windows格式。但是在SUA中,'diff'命令接受UNIX格式的路径为/dev/fs/C/a/s/xx.txt/dev/fs/C/a/s/yy.txt

我们有一个命令winpath2unix,它将路径转换为Unix格式。所以我想在我的程序中使用diff命令,如下所示

diff 'winpath2unix xx' 'winpath2unix yy'

这里我想首先运行winpath2unix命令,并且需要将这些命令的输出传递给diff命令。

在C shell中它工作正常。但是在命令提示符下它不起作用。

是否有运行此命令的选项?

或者如何在CreateProcess中使用csh

2 个答案:

答案 0 :(得分:0)

我想我在其他论坛上找到了你的问题。 :)

使用-c作为参数向tcsh发送命令,“”用于引用双引号,如果路径winpath打印包含空格的路径。

LPTSTR cmd[] = _tcsdup(TEXT("C:\\Windows\\posix.exe /u /c /bin/tcsh -c \"/bin/diff \"\"`winpath2unix /x/xx.txt`\"\" \"\"`winpath2unix /x/yy.txt`\"\"\""));

int RetVal = CreateProcess(NULL,
                           cmd,
                           NULL,
                           NULL,
                           TRUE,
                           NORMAL_PRIORITY_CLASS,
                           NULL,
                           NULL,
                           &sInfo,
                           &pInfo);
DWORD error = GetLastError();

更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

答案 1 :(得分:0)

如果在命令提示符下,您的意思是cmd.exe,那么有一个技巧可以帮助您使用FOR命令在批处理文件中设置变量。所以你要创建一个看起来像这样的批处理文件

@ECHO OFF
FOR /F "tokens=1 delims=" %%A in ('winpath2unix %1') do SET xxWinPath=%%A
FOR /F "tokens=1 delims=" %%A in ('winpath2unix %2') do SET yyWinPath=%%A
diff xxWinPath yyWinPath

如果我们调用此批处理文件doDiff.bat,您可以使用语法doDiff.bat xx yy调用它。

此技术的另一种描述是here。 Raymond Chen也展示了类似的技术here。官方文档位于标题迭代和文件解析下的MSDN