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잘못된 위치에 있습니다. 파일의 시작 부분으로 이동합니다.

테스트.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

출력 예(저는 "Desktop"을 선택했습니다):

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

F:\test>

메모:

  • ECHO is off.대화 상자가 처음 표시될 때 "취소"를 누르면 여전히 표시됩니다 .

관련 정보