バッチ ファイル内に次の for ループがあります。
for /l %%x in (1, 1, %k%) do (
set "psCommand=powershell -Command "$pword = read-host 'Enter Password2' -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
)
そして、常に次のエラーが発生します。 [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" は現時点では予期されていませんでした。
for ループの外でコマンドを実行すると、動作します。
なにが問題ですか?
答え1
問題は、for ループが終了括弧が PowerShell コマンド内にあると認識することです。
考えられる解決策は、関数を作成し、それをループから呼び出すことです。
for /l %%x in (1, 1, %k%) do (
call :getPassword password
)
:getPassword
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
EXIT /B 0