Estoy ejecutando un programa desde un archivo por lotes, que cuando se realiza realiza una copia de seguridad automática de mi base de datos MySQL.
Me gustaría que el archivo por lotes cree una copia de seguridad diferente para cada ejecución, para que pueda rastrear.
El nombre de archivo deseado sería gnucash_shockwave-20121128210344.sql (formato de fecha AAAA-MM-DD-HH-MM-SS)
Busqué en Google algunas cosas que decían intentar %DATE:~4%
y, %Date.Year%
pero recibo un error que diceThe system cannot find the specified path.
Si elimino el intento de sellarlo, la secuencia de comandos funciona bien, pero sobreescribe la copia de seguridad anterior
Aquí está la sección de código de la que estoy hablando:
@REM *** EXECUTION ***
echo. Starting backup...
SET timestamp %DATE:~-4%%DATE:~4,2%%DATE:~7,2%%TIME%
%mysqldir%\mysqldump -u %mysqluser% -p%mysqlpassword% -h %mysqlhost% -P %mysqlport% --databases --routines --verbose gnucash_shockwave > %BackupDir%\gnucash_shockwave-%timestamp%.sql
echo.------------------------------------------------------
echo. Backup complete!
¿Alguna sugerencia?
windows
batch-file
date-time
guyfromfl
fuente
fuente
Respuestas:
El formato de fecha y hora depende de lo que haya especificado en el subprograma Panel de control de región e idioma .
Ejecute el siguiente archivo por lotes (que supone dd / mm / aaaa y hh: mm: ss ) y modifique la extracción de subcadenas (utilizando los caracteres: y ~) según sea necesario para obtener las partes adecuadas de las cadenas de fecha y hora:
Para obtener más ayuda sobre la extracción de subcadenas, escriba
set /?
en el símbolo del sistema o consulte esta página .fuente
> echo yyyy = %DATE:~6,4%
produciryyyy = /20/
. Sin embargo loecho yyyy = %DATE:~10,4%
esyyyy = 2019
.Esto es lo que funcionó para mí.
fuente
Con un pequeño ajuste obtuve esto
Resultado:
"test-do_25_06-2015-22_21_51.txt" (Thursday_25th_June_2015-22:21.51)
fuente
%DATE%
~Ddd MM/DD/YYYY
, mientras que esta asume una región no estadounidense, donde%DATE%
~DD/MM/YYYY
(sin el día de la semana). Y esta difiere de la respuesta de Karan en que esta está equivocada : la pregunta pide AAAAMMDD; esta respuesta da DD_MM – AAAA.Perdón por el retraso ...
La única forma confiable de obtener la fecha adecuada, independientemente de la configuración regional, es la solución de foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script
fuente
Creo que esto mejora la respuesta de @Nick Rogers un poco.
EJ: con la ubicación alemana (de_DE) hay un espacio en blanco a las horas por debajo de 10.
También quería un cero a la hora. "echo -! ^ _ hh! -" da "09" en lugar de solo "9"
entonces rompo el código en dos partes para una mejor lectura. Este ejemplo debería coincidir con más configuraciones regionales.
+ bonus: _ms = milisegundos o cualesquiera que sean los dos últimos dígitos (-;
comentario: a veces la HORA necesita escapar, ver código interno
salidas: echo fullTime = 15062018-10182821
fuente
la respuesta más corta (¿más versátil?) es según el siguiente script TimeStamp.cmd que contiene solo tres líneas de código (excluyendo comentarios, etc.) ...
Tenga en cuenta la necesidad de usar %% en lugar de% para la variable en una instrucción FOR en un archivo por lotes
... rendimientos de ejecución (líneas en blanco y comentarios eliminados) ...
fuente