スクリプトを実行すると奇妙な出力が表示されます:
@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
出力例 (「デスクトップ」を選択しました):
F:\test>test
C:\Users\DavidPostill\Desktop
F:\test>
注記:
ECHO is off.
ダイアログが初めて表示されたときに「キャンセル」を押しても、ダイアログは表示されます。