Подтвердить что ты не робот

Пакетные файлы Windows 7: как проверить, был ли передан параметр в пакетный файл

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

if %1==. dir

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

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

4b9b3361

Ответ 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
)

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