Запуск demo.exe
без входной строки версии невозможен с предоставленным кодом. Это произойдет, только если опубликованный код находится внутри командного блока, начинающегося с (
и заканчивающегося соответствием )
. В этом случае потребуется отложенное расширение , как описано с помощью команды SET , выводимой при запуске в окне командной строки set /?
. Командный процессор Windows cmd.exe
анализирует весь блок команд перед выполнением команды (обычно IF или FOR ) с использованием этого блока команд. Каждая ссылка %variable%
во всем командном блоке заменяется текущим значением указанной переменной среды во время синтаксического анализа командного блока, как описано в Как синтаксический анализ сценариев командных интерпретаторов Windows (CMD.EXE)? и как он можно увидеть на отладке командного файла . Для переменных среды, не определенных во время синтаксического анализа командного блока, окончательно выполненные командные строки ничего не содержат вместо %variable%
.
Предположим, что код находится не внутри командного блока, что обычно возможно, поскольку есть команда GOTO , чтобы продолжить выполнение командного файла ниже строки, начинающейся с двоеточия, и, таким образом, использовать конструкцию, которая позволяет избежать использование командных блоков как минимум для IF условий.
Вот улучшенная версия предоставленного кода:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Delete environment variable Version before each user prompt. The
rem user is prompted until a valid version string is input by the user.
:EnterVersion
set "Version="
set /P Version="Please enter the version: "
rem Has the user input a string at all?
if not defined Version goto EnterVersion
rem Remove all double quotes from user input string.
set "Version=%Version:"=%"
rem Is there no version string anymore after removing double quotes?
if not defined Version goto EnterVersion
rem Contains the version string any other character than digits and dots?
for /F delims^=0123456789.^ eol^= %%I in ("%Version%") do goto EnterVersion
rem Start demo.exe with the first argument -v and second argument being the
rem input version string as new process with window title Demo in case of
rem demo.exe is a console application in user's documents directory.
start "Demo" /D"%USERPROFILE%\Documents" demo.exe -v %Version%
endlocal
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
endlocal /?
for /?
goto /?
if /?
rem /?
set /?
setlocal /?
start /?
Смотри также