Команда пакетного вызова Windows не передает значение переменной?

Команда пакетного вызова Windows не передает значение переменной?

При запуске моего скрипта я получаю странный вывод:

@echo off
setlocal
pushd "%~dp0"

set Mode=batch

if "%Mode%"=="batch" call :BATCH
echo %Loc%
pause>nul
exit

:BATCH
set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I"
setlocal enabledelayedexpansion
set Loc=!folder!
Goto:eof

Он должен отображать местоположение выбранной мной папки. Вместо этого я получаю сообщение об отключении эха.

решение1

При запуске моего скрипта я получаю странный вывод

Для отладки пакетных скриптов закомментируйте @echo offстроку, чтобы вы могли видеть, что происходит:

rem @echo off

Ваш setlocal enabledelayedexpansionнаходится не в том месте. Переместите его в начало файла.

test.cmd:

@echo off
setlocal
setlocal enabledelayedexpansion
pushd "%~dp0"

set Mode=batch

if "%Mode%"=="batch" call :BATCH
echo %Loc%
pause>nul

:BATCH
set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I"
set Loc=!folder!
Goto:eof

Пример вывода (я выбрал «Рабочий стол»):

F:\test>test
C:\Users\DavidPostill\Desktop

F:\test>

Примечание:

  • Вы все равно будете ECHO is off.отображены, если нажмете «Отмена» при первом отображении диалогового окна.

Связанный контент