Пакетные файлы Windows 7: как проверить, передан ли параметр в пакетный файл - PullRequest
23 голосов
/ 20 апреля 2011

Еще в середине 90-х я помню, что делал что-то вроде этого:

if %1==. dir

, в основном, если вы поместите вышеуказанный код в dodir.bat и запустите его самостоятельно, не передавая ему никаких параметровон запускает команду dir.Однако, если вы передадите что-либо вообще как параметр, он не запустит команду dir.

Я не могу заставить это работать в моих пакетных файлах Windows 7.Возможно, я не помню правильный синтаксис.Любые помощники?

Ответы [ 3 ]

53 голосов
/ 29 мая 2013

if %1.==. dir сломается, если параметр содержит различные символы, такие как ", < и т. Д.

if "%1"=="" прервется, если параметр содержит кавычку (").

Используйте if "%~1"=="" вместо:

if "%~1"=="" (
    echo No parameters have been provided.
) else (
    echo Parameters: %*
)

Это должно работать на всех версиях Windows и DOS.

Юнит-тест:

C:\>test
No parameters have been provided.

C:\>test "Lots of symbols ~@#$%^&*()_+<>?./`~!, but works"
Parameters: "Lots of symbols ~@#$%^&*()_+<>?./`~!, but works"
15 голосов
/ 21 апреля 2011

На самом деле это было if %1<b>.</b>==. <i>command</i> (обратите внимание на . после %1) тогда. И вы можете использовать это сейчас в Windows 7, оно должно работать.

Пример использования:

if %1.==. (
    echo No parameters have been provided.
) else (
    echo Parameters:
    echo %*
)
11 голосов
/ 20 апреля 2011

Попробуйте заключить в кавычки:

if "%1"=="" (
    echo "nothing was passed"
) else (
    echo "a parameter was passed"
    dir
)

Вы можете убрать эхо, я просто положил их туда в образовательных целях.

...