Windows-Batch-Aufrufbefehl übergibt keinen Variablenwert?

Windows-Batch-Aufrufbefehl übergibt keinen Variablenwert?

Beim Ausführen meines Skripts erhalte ich eine seltsame Ausgabe:

@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

Es sollte der von mir ausgewählte Ordnerspeicherort angezeigt werden. Stattdessen erhalte ich die Meldung „Echo ist ausgeschaltet“.

Antwort1

Ich erhalte eine seltsame Ausgabe, wenn ich mein Skript ausführe

Um Ihre Batch-Skripte zu debuggen, kommentieren Sie die @echo offZeile, damit Sie sehen können, was passiert:

rem @echo off

Ihr setlocal enabledelayedexpansionsteht an der falschen Stelle. Verschieben Sie es an den Anfang der Datei.

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

Beispielausgabe (ich habe „Desktop“ ausgewählt):

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

F:\test>

Notiz:

  • Sie werden trotzdem ECHO is off.angezeigt, wenn Sie beim ersten Anzeigen Ihres Dialogs auf „Abbrechen“ klicken.

verwandte Informationen