Windows XP y posterior

Windows XP y posterior

En un archivo por lotes necesito extraer un mes, día y año del comando de fecha. Así que utilicé lo siguiente, que básicamente analiza el comando Fecha para extraer sus subcadenas en una variable:

set Day=%Date:~3,2%
set Mth=%Date:~0,2%
set Yr=%Date:~6,4%

Todo esto es genial, pero si implemento este archivo por lotes en una máquina con una configuración regional/país diferente, falla porque el mes, el día y el año están en ubicaciones diferentes.

¿Cómo puedo extraer mes, día y año independientemente del formato de fecha?

Respuesta1

Fuente: http://ss64.com/nt/syntax-getdate.html

Método 2 (cmd único)

ObtenerFecha.cmd

@Echo off
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%

:: Display the date/time in ISO 8601 format:
Set _isodate=%_yyyy%-%_mm%-%_dd% %_hour%:%_minute%
Echo %_isodate%
pause

ingrese la descripción de la imagen aquí


Método 1 (cmd+vb)

ObtenerFecha.cmd

@Echo off
For /f %%G in ('cscript /nologo getdate.vbs') do set _dtm=%%G
Set _yyyy=%_dtm:~0,4%
Set _mm=%_dtm:~4,2%
Set _dd=%_dtm:~6,2%
Set _hh=%_dtm:~8,2%
Set _nn=%_dtm:~10,2%
Echo %_yyyy%-%_mm%-%_dd%T%_hh%:%_nn%

obtener fecha.vbs

Dim dt
dt=now
'output format: yyyymmddHHnn
wscript.echo ((year(dt)*100 + month(dt))*100 + day(dt))*10000 + hour(dt)*100 + minute(dt)

Respuesta2

Windows XP y posterior

getDate.cmd

@echo off
for /f "tokens=2 delims==" %%G in ('wmic os get localdatetime /value') do set datetime=%%G

set year=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%

echo %year%/%month%/%day%

Producción

ingrese la descripción de la imagen aquí

Respuesta3

Sé que no es exactamente lo que pediste, pero uso el puerto de Windows de la dateaplicación Linux desde un comando dentro del archivo por lotes y luego asigno el resultado a una variable.

Todavía tengo que encontrar una manera de obtener la fecha de manera confiable usando solo comandos por lotes.

Respuesta4

Si bien tiene razón en que VS 2008 genera un archivo por lotes, puede ejecutar prácticamente cualquier programa que desee, incluidos scripts de Powershell y otros programas.

Editar:

Aquí hay algunas preguntas similares:

https://stackoverflow.com/questions/1051845/visual-studio-2008-professional-build-process https://stackoverflow.com/questions/3049369/embed-application-compilation-time-stamp

Originalmente, iba a mover esto a SO. . .

información relacionada