在我的程序中,我必须使用SUA的diff
命令来找出2个文件的区别。
我使用如下命令,
diff xx yy
这里
xx - /a/s/xx.txt
yy - /a/s/yy/txt
xx.txt
和yy.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
?
答案 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。