2

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

我使用 a 命令如下,

diff xx yy

这里

xx - /a/s/xx.txt

yy - /a/s/yy/txt

xx.txt和的路径为yy.txtWindows 格式。但在 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'

这里我想先运行winpath2unixcommand,需要将这些命令的输出传递给diffcommand。

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

是否有任何选项可以运行此命令?

或者我如何csh在 CreateProcess 中使用?

4

2 回答 2

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

这种技术的另一个描述是hereRaymond Chen在这里也演示了类似的技术。官方文档位于MSDN的Iterating and file parsing标题下。

于 2013-01-14T22:05:13.057 回答
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

于 2013-01-08T10:16:28.370 回答