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

493
user497818

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

@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

1 ответ на вопрос

0
DavidPostill

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

Для отладки ваших пакетных сценариев прокомментируйте @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.отображаться, если вы нажмете «Отмена» при первом отображении вашего диалога.