Пакетные файлы Windows 7: как проверить, был ли передан параметр в пакетный файл
В середине 90-х я помню, что делал что-то вроде этого:
if %1==. dir
в принципе, если вы поместите вышеуказанный код в dodir.bat
и запустите его самостоятельно, не передавая ему никаких параметров, он будет запускать команду dir. Однако, если вы передали его вообще как параметр, он не выполнил бы команду dir.
Я не могу заставить это работать в моих пакетных файлах Windows 7. Возможно, я не помню правильный синтаксис. Любые помощники?
Ответы
Ответ 1
На самом деле это было if %1.==. command
(обратите внимание на .
после %1
). И вы можете использовать это сейчас в Windows 7, он должен работать.
Пример использования:
if %1.==. (
echo No parameters have been provided.
) else (
echo Parameters:
echo %*
)
Ответ 2
if %1.==. dir
будет прерываться, если параметр включает в себя различные символы, такие как "
, <
и т.д.
if "%1"==""
будет разбит, если параметр включает цитату ("
).
Вместо этого используйте if "%~1"==""
:
if "%~1"=="" (
echo No parameters have been provided.
) else (
echo Parameters: %*
)
Это должно работать на всех версиях Windows и DOS.
Unit Test:
C:\>test
No parameters have been provided.
C:\>test "Lots of symbols [email protected]#$%^&*()_+<>?./`~!, but works"
Parameters: "Lots of symbols [email protected]#$%^&*()_+<>?./`~!, but works"
Ответ 3
Попробуйте окружение в кавычках:
if "%1"=="" (
echo "nothing was passed"
) else (
echo "a parameter was passed"
dir
)
Вы можете взять эхо, я просто помещаю их туда в образовательных целях.