Обработчик команд Windows заменяет все ссылки на переменные среды с использованием синтаксиса %variable%
в пределах блока команд, начинающегося с (
и заканчивающегося соответствием )
, перед выполнением команды, использующей блок команд.
Это означает, чтоздесь %confirm%
заменяется дважды ничем при первом запуске пакетного файла до того, как команда IF будет выполнена вообще.Такое поведение наблюдается при запуске пакетного файла без echo off
из окна командной строки, см. отладка пакетного файла .
Одно из решений - отложенное расширение как объясняется с помощью команды SET вывод при запуске в окне командной строки set /?
на примере IF и FOR .
Но гораздо лучше избегать блоков команд там, где это действительно не нужно.
В этом случае использование команды CHOICE для приглашения да / нет также лучше, чем set /P
.
@echo off
cd \
goto Begin
:PromptUser
%SystemRoot%\System32\choice.exe /C YN /N /M "Do you want to choose another directory (Y/N)? "
if errorlevel 2 goto :EOF
:Begin
set "UserInputPath="
set /P "UserInputPath=What Directory would you like to make? "
rem Has the user not input any string?
if not defined UserInputPath goto Begin
rem Remove all double quotes from user path.
set "UserInputPath=%UserInputPath:"=%"
rem Is there no string left anymore?
if not defined UserInputPath goto Begin
rem Does the directory already exist?
if exist "%UserInputPath%" goto PromptUser
rem Create the directory and verify if that was really successful.
rem Otherwise the entered string was invalid for a folder path or
rem the user does not have the necessary permissions to create it.
rem An error message is output by command MKDIR on an error.
mkdir "%UserInputPath%"
if errorlevel 1 goto Begin
rem Other commands executed after creation of the directory.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и очень внимательно прочитайте все страницы справки, отображаемые для каждой команды.
cd /?
choice /?
echo /?
goto /?
if /?
mkdir /?
rem /?
set /?
См. Также: