Usted puede agregar '^' para continuar la cadena que va a asignar a una variable. Esto crea el comando como una sola línea, por lo que debe usar ';' entre los enunciados:
@ECHO off
SET LONG_COMMAND=^
if ($true)^
{^
Write-Host "Result is True";^
Write-Host "Multiple statements must be separated by a semicolon."^
}^
else^
{^
Write-Host "Result is False"^
}
START Powershell -noexit -command %LONG_COMMAND%
Si el único código que necesita para ejecutar es PowerShell, puede usar algo como:
;@Findstr -bv ;@F "%~f0" | powershell -command - & goto:eof
if ($true){
Write-Host "Result is True" -fore green
}
else{
Write-Host "Result is False" -fore red
}
Start-Sleep 5
cual tuberías todas las líneas que no empiezan con "; @F" a PowerShell.
Editar: pude iniciar PowerShell en una ventana separada y permitir cmd para salir con esto:
@@ECHO off
@@setlocal EnableDelayedExpansion
@@set LF=^
@@SET command=#
@@FOR /F "tokens=*" %%i in ('Findstr -bv @@ "%~f0"') DO SET command=!command!!LF!%%i
@@START powershell -noexit -command !command! & goto:eof
if ($true){
Write-Host "Result is True" -fore green
}
else{
Write-Host "Result is False" -fore red
}
Fíjese que no debe ser de 2 espacios después de ajustar la variable 'LF' ya que estamos asignando un avance de línea a la variable.
Creo que su segundo ejemplo es exactamente lo que estaba buscando. ¿Cuál es el significado de; @ en un archivo por lotes? Gracias. – mcu
El '@' le dice a cmd que no haga eco de la línea mientras se ejecuta. El ';' es solo un delimitador de parámetro; ',' o '=' también se pueden usar. Solo reduce la posibilidad de que algo más en el archivo coincida con la cadena que se está filtrando. La línea puede comenzar con '@' y cualquier combinación de ';', '=' o ','. Ejemplos: ';; @', '@,', '== @ ,;', etc. – Rynant
Esto funciona muy bien. Solo hay una desventaja MENOR. Al iniciar PowerShell de esta manera, tengo dos procesos en ejecución: powershell.exe y cmd.exe. Además, no hay ningún mensaje de Powershell en la ventana. ¿Es posible "iniciar" el powershell.exe y salir de cmd.exe? – mcu