В пакетных скриптах как «пропустить пустые аргументы»? - PullRequest
0 голосов
/ 14 января 2012

Пример сценария call.bat

echo %1.txt %2.txt %3.txt

a) Теперь, если я вызову его с помощью

c:\>call Huey Dewey Louie

, он напечатаетout

Huey.txt Dewey.txt Louie.txt

b) Если я позвоню с

c:\>call Huey Dewey

, он выведет

Huey.txt Dewey.txt .txt

КакЯ пропускаю эту последнюю часть, если я не дал% 3? (конечно, количество аргументов может быть больше трех, скажем, 8 или девять).

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Я предполагаю, что вы хотите вывести их все в одну строку, как в примере. Если это так, вот один из способов:

test.bat

@echo off
set cmd=echo
for %%A in (%*) do call :Add %%A
%cmd%
goto:EOF

:Add
set cmd=%cmd% %1.txt
goto:EOF

выглядит так:

C> test 1 2 3 4 5
1.txt 2.txt 3.txt 4.txt 5.txt
C>

Это не относится к случаю, когда никакие параметры не были предоставлены очень хорошо (он просто сказал бы "Эхо включено"), но тест IF исправил бы это.

2 голосов
/ 14 января 2012

call.bat

:label
echo %1.txt
SHIFT
if not "%1" == "" goto label

Это то, что вы ищете? Возможно, вы захотите отключить отображение команд, поэтому перед каждой командой ставьте «@» или «@echo off» в начале вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...