FOR 루프 내부의 Windows 배치 powershell 명령이 작동하지 않습니다.

FOR 루프 내부의 Windows 배치 powershell 명령이 작동하지 않습니다.

배치 파일 내에 다음 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

관련 정보