O comando de chamada em lote do Windows não está passando o valor da variável?

O comando de chamada em lote do Windows não está passando o valor da variável?

Estou recebendo uma saída estranha ao executar meu script:

@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

Deve estar exibindo o local da pasta que eu selecionei. em vez disso, o eco está desligado.

Responder1

Estou recebendo resultados estranhos ao executar meu script

Para depurar seus scripts em lote, comente a @echo offlinha para ver o que está acontecendo:

rem @echo off

Você setlocal enabledelayedexpansionestá no lugar errado. Mova-o para o início do arquivo.

teste.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

Exemplo de saída (selecionei "Desktop"):

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

F:\test>

Observação:

  • Você ainda será ECHO is off.exibido se pressionar "Cancelar" na primeira vez que sua caixa de diálogo for exibida.

informação relacionada