2014-02-01 8 views
1

Я уже возился с сценариями .cmd и хотел практиковать трубопроводы. Я написал один скрипт для создания файлов, а другой - для редактирования с помощью Notepad ++. Сценарий решений (так называемый create.cmd) выглядит следующим образом:Почему мой трубопровод не работает?

@echo off 
copy nul %1 > nul 
echo %1 

И редактировать сценарий (называемый edit.cmd) выглядит следующим образом:

@echo off 
start notepad++.exe %1 

Теперь я хотел бы попробовать и сделать файл, а затем вывести его вывод (следовательно, эхо-строку) в виде имени файла в скрипт редактирования. Так что я написал, было это:

create foo.txt | edit 

Однако это не удается - я получаю открытый Notepad ++ окно, но мой вновь созданный файл не появляется там. Что я пропущу или делаю неправильно здесь?

ответ

1

Вы не читаете из трубы в вашем втором командном файл.

Для чтения только одну строки из первой партии, имени файла, это должно быть достаточно:

@echo off 
set /p file= 
start notepad.exe %file% 

В противном случае проверьте Read stdin stream in a batch file для чтения многострочного ввода.

+0

спасибо! Решила его отлично. Из интереса, что делает это/p для переменной, объявленной множеством в вашем скрипте? –

+0

Переключатель '/ p' сообщает' set', чтобы установить переменную в строку, считанную со стандартного ввода. В командной строке введите 'help set', там задокументировано. – mockinterface

+0

Спасибо за это. Тем не менее, я считаю, что скрипт с этим решением больше не принимает нормальный аргумент! Например, если я попробую что-то вроде 'edit foo.txt', он попросит ввести второй раз! Есть ли способ, по которому я могу по умолчанию использовать «нормальный» аргумент, если я не подключаюсь, и ваше решение, если я? –

0

edit.bat не имеет %1 параметра

Вы можете попробовать это:

@echo off 
copy nul %1 > nul 
echo %1 
call edit %1 
Смежные вопросы