Trying to use batch file in one location and call powershell script elevated
Você pode realizar o que está tentando fazer com a sintaxe abaixo do que testei e confirmei do meu lado. Eu incorporei algumas técnicas em sua lógica com como eu fiz esse tipo de coisa com outras soluções de processo de arquivo do PowerShell e do Batch, como explicado no passado.
Eu adicionei o caminho WIN2k8\Non-Supressed após a variável %~j para que o loop FOR /F use o caminho completo para SET a variável ( FPath ) para usar posteriormente para usar essa variável como o caminho completo de o script do PowerShell que está sendo executado. Não há necessidade de usar o comando PUSHD por esse método.
Eu também uso um CD /D explícito para o diretório do Windows do aplicativo PowerShell, chamo o PowerShell de lá e, em seguida, transmito os argumentos, comandos, switches, etc. - com o caminho completo do script do PowerShell (por exemplo, -ExecutionPolicy Bypass -Command "& '%FPath%\PatchTest.ps1'" ).
Exemplo de script em lote
@ECHO ON
SETLOCAL
FOR /F "SKIP=1 TOKENS=1,2" %%i IN ('"wmic logicaldisk get caption, drivetype"') DO (IF [%%~j]==[5] SET FPath="%%~i\WIN2k8\Non-Supressed")
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%FPath%\PatchTest.ps1'"
ECHO Press Space Bar to continue
PAUSE
ENDLOCAL