Windows Batch Call-Befehl übergibt keinen Variablenwert?

550
user497818

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 den von mir ausgewählten Ordner anzeigen. stattdessen bekomme ich Echo aus.

1

1 Antwort auf die Frage

0
DavidPostill

Beim Ausführen meines Skripts erhalte ich eine seltsame Ausgabe

Um Ihr Batch-Skript zu debuggen, kommentieren Sie die @echo offZeile, sodass Sie sehen können, was passiert.

rem @echo off 

Sie setlocal enabledelayedexpansionsind am falschen Ort. 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> 

Hinweis:

  • Sie werden weiterhin ECHO is off.angezeigt, wenn Sie beim ersten Anzeigen Ihres Dialogs auf "Abbrechen" klicken.