При запуске моего скрипта я получаю странный вывод:
@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.
отображены, если нажмете «Отмена» при первом отображении диалогового окна.