es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Asignar el resultado del comando de PowerShell a una variable dentro del script de lote.

Me gustaría lograr lo que puedo hacer en una CLI de PowerShell también dentro de un script de batch:

PS C:\Users\andreas.luckert> $timestamp = Get-Date -UFormat "%d-%m-%Y--%R-UTC%Z" | ForEach-Object { $_ -replace ":", "." }

PS C:\Users\andreas.luckert> echo $timestamp
26-11-2021--15.55-UTC+01

Ahora, dentro de mi script de Batch, he intentado enfoques similares al siguiente:

SET _timestamp=('Get-Date -UFormat "%d-%m-%Y--%R-UTC%Z" | ForEach-Object { $_ -replace ":", "." }')

Sin embargo, no funciona.

Soluciones como esta me parecen un poco “hacky”, las instrucciones generales para las variables de batch no ayudan en este caso y todos estos enfoques son muy feos sintácticamente en comparación con el comando de PowerShell bonito y limpio que mencioné al principio.
Además, ninguno de ellos incluye la zona horaria, que es importante para mí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en PowerShell, archivo por lotes, marca de tiempo, procesamiento por lotes, marca de tiempo con zona horaria, entiendo que le gustaría lograr lo que puede hacer en una interfaz de línea de comandos de PowerShell también dentro de un script de lote, específicamente en lo que respecta a la creación de una marca de tiempo.

    Ha intentado definir una variable en un script de lote usando el comando de PowerShell que proporcionó, pero no funcionó. También ha explorado varias soluciones, pero o bien parecen poco convencionales, no ayudan o tienen sintaxis feas.

    Para crear una marca de tiempo en un script de lote, puede utilizar el siguiente código:

    PARA /f "tokens=1-9 delims=T-.: " %%A EN ('"wmic path win32_LocalTime get day^,hour^,minute^,month^,second^,year^,UTCOffset ^| find "20""') DO (
    SET /A %datevar%-2000=%%G
    SET /A %timevar%_UTC_Offset=%%H*60+%%I
    SET /A %timevar%=(((%%H+24)-%utc_offset%%)*60)+%%I
    )
    
    SET timestamp=%datevar%-%timevar%
    

    Este fragmento de código utiliza el comando ‘wmic’ para recuperar la información de fecha y hora local y calcula el desplazamiento horario UTC. Luego, formatea la marca de tiempo en el formato deseado.

    Sin embargo, este código no incluye la zona horaria. Incluir esta información requeriría un código adicional o dependencias externas. Por lo tanto, podría ser mejor utilizar PowerShell para crear una marca de tiempo, ya que proporciona más flexibilidad, mejor legibilidad e incluye información de zona horaria.

Comments are closed.