Как передать вывод команды2 как ввод команды1 в командной строке Windows

В моей программе я должен использовать diff Команда от SUA, чтобы узнать разницу в 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 это работает нормально. Но в командной строке его не работает.

Есть ли возможность запустить эту команду?

Или как я могу использовать csh в CreateProcess?

2 ответа

Если в командной строке вы имеете в виду 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,

Другое описание этой техники здесь. Раймонд Чен также демонстрирует подобную технику здесь. Официальная документация находится на MSDN под заголовком Итерация и разбор файлов.

Я думаю, что нашел ваш вопрос на другом форуме.:)

использование -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

Другие вопросы по тегам