2

私のプログラムではdiff、SUAのコマンドを使用して、2つのファイルの違いを見つける必要があります。

私は次のようにコマンドを使用します、

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'

ここではwinpath2unix、最初にコマンドを実行し、これらのコマンドの出力をコマンドに渡す必要がありますdiff

Cシェルでは正常に動作しています。しかし、コマンドプロンプトでは機能しません。

このコマンドを実行するオプションはありますか?

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

この手法の別の説明はこちらです。Raymond Chen も同様のテクニックをここで示しています。公式ドキュメントはMSDNのIterating and file parsingヘッダーの下にあります。

于 2013-01-14T22:05:13.057 に答える
0

他のフォーラムであなたの質問を見つけたと思います。:)

コマンドを引数として tcsh に送信するために使用-cします。パス 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 に答える