[RESUELTO][PowerShell] Ejecución de código PowerShell dentro de archivo Batch

(1/1)

reconFito:
Buenas, saludos a todos.
Tengo una consulta con referencia a la primera línea del script a continuación, ¿Quisiera saber de qué manera está siendo interpretada por el prompt de CMD?
Y como es posible que funcione, ya que si quito el espacio que se encuentra entre # y : el script deja de funcionar. Cualquier explicación que me puedan brindar se las agradecería.

Código
<# :
@echo off
PowerShell.exe -c "iex $([System.IO.File]::ReadAllText('%~f0'))"
goto:EOF
#>
write hello
 

Gracias

EdePC:
Yo tengo entendido de que es por un comportamiento raro de los tantos que tiene Batch, en tu caso el redireccionador < siempre se "mueve" o ejecuta al final, para batch estás intentando redireccionar el contenido del archivo # para que sea procesado por el comando :, : sirve para poner etiquetas o comentar instrucciones, al final para batch quedaría así:

Código
:<#

Se termina comentando a sí misma y no hace nada XD, aunque en realidad se convierte en una etiqueta, quizá sea mejor usar :: en lugar de : pero como no va a entrar en conflicto con otra posible etiqueta ni se la está llamando no debería haber problemas. Yo pienso que es así porque hay una técnica para hacer un Echo sin el salto de línea final:

Código
<Nul Set/P="Hola mundo"

Lo lógico sería pensar en que primero se ejecuta set/p="Hola mundo" y luego para evitar interacción entra en juego <nul haciendo que set/p trabaje como un simple Echo sin salto de línea, además es completamente equivalente a:

Código
Set/P="Hola mundo" <nul

El espacio entre # y : es necesario porque sirve de separador entre el redireccionador+nombreDeArchivo (<#) del comando :, si están juntos es equivalente a no poner el comando y dará error

Doy por hecho de que no tienes problemas con las formas de comentarios de PowerShell

---
Por cierto, puedes reducir más el script combinando los tantos métodos de PowerShell Batch wrapper que hay en línea, por ejemplo este:

Código
# & @Cls & PowerShell gc '%~f0'^|iex & Exit/B
write hello

Para este caso Batch piensa que # es un comando o programa pero como no existe da una advertencia/error que desaparece inmediatamente con el @Cls, útil este método si la intención del Batch es únicamente llamar a PowerShell junto con toodas sus instrucciones y nada más, y está demás decir que para PowerShell # implica un comentario de una sola línea

reconFito:
Gracias por tú respuesta, entendí algo de tú explicación, voy a investigar un poco más al respecto, pero por el momento me basta.

Ahora que ya se buscar (Powershell Batch Wrapper) creo que será más fácil, por cierto conoces algunos recursos donde pueda profundizar en este tipo de temas y trucos en CMD y Powershell, se que aquí tienen recursos pero nunca esta demás complementar con otras fuentes.

Gracias nuevamente.

Navegación

[0] Índice de Mensajes