¿Qué significa% date: ~ -4,4 %% date: ~ -10,2 %% date: ~ -7,2% _% time: ~ 0,2 %% time: ~ 3,2% mean?

Tengo esta parte del script que crea una variable llamada fileName usa más adelante para nombrar un archivo.

 set fileName=db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak 

¿Qué significa %date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% mean?

Abrir en una ventana del símbolo del sistema y ejecutar allí set /? muestra la ayuda para el comando SET .

En la última página de ayuda se explica que %DATE% expande a la fecha local actual y %TIME% a la hora local actual al analizar la línea que contiene esas referencias de variables de entorno.

El formato de la fecha y la hora depende de la región de Windows y de la configuración de idioma. Por lo tanto, es necesario ejecutar en una ventana de símbolo del sistema

 echo Date is: %DATE% echo Time is: %TIME% 

o alternativamente

 echo %DATE% %TIME% 

se ejecuta mejor antes de las 10:00 a.m. para conocer los formatos de cadena de fecha y hora de la configuración regional. ¿Es la fecha con día de la semana? ¿Cuál es el orden del día, mes y año en la cadena de fechas? Es el tiempo en formato de 12 o 24 horas? Es el tiempo siempre con una hora de dos dígitos?

Y en la ayuda de salida del comando SET se explica también %Variable:~X,Y% para obtener una subcadena de una cadena de una variable de entorno de la posición X en una cadena con longitud de caracteres Y

El primer caracter en una cadena tiene un número de posición (índice de caracteres) 0 .
Un valor negativo para X significa X caracteres desde el final de la cadena (desde el lado derecho).

 set fileName=db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak 

define una variable con nombre fileName

  • comenzando con la cadena fija db_ ,
  • añadiendo %date:~-4,4% los últimos 4 caracteres de la fecha de configuración regional actual, que obviamente es el año,
  • se agrega con %date:~-10,2% el décimo y noveno caracteres del lado derecho de la fecha de configuración regional actual, lo más probable es el mes,
  • se agrega con %date:~-7,2% el séptimo y sexto caracteres del lado derecho de la fecha de configuración regional actual, que es probablemente el día,
  • añadiendo un guión bajo como separador entre la fecha en formato YYYYMMDD y la hora en formato HHmm ,
  • anexando con %time:~0,2% los primeros 2 caracteres de la hora local actual que obviamente es la hora,
  • añadiendo con %time:~3,2% el cuarto y quinto carácter de la hora local actual que obviamente es el minuto y
  • anexando la extensión de archivo .bak .

El resultado de esta definición de variable con varias subcadenas se puede verificar ejecutando en una ventana del símbolo del sistema:

 echo db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak 

Las referencias de subcadena de la cadena de fecha se realizan desde el lado derecho (final de la cadena) en lugar del lado izquierdo (principio de la cadena) para hacer que la definición sea independiente en el día de la semana presente o que falte al comienzo de la cadena de fecha.

El uso de SET en DOS establece una variable de entorno que luego pueden ser recuperados por otros comandos de DOS, ya sea directamente o a través de archivos por lotes.

Por ejemplo;

SET PATH =% PATH%; C: \ MyStuff

Lo anterior agrega C: \ MyStuff a la ruta.

SET FRIEDRICE = SÍ

Esto crea una variable de entorno llamada FRIEDRICE y establece el valor en YES.

El conjunto de valores solo es válido para la sesión de símbolo del sistema actual a menos que se establezca de forma más permanente utilizando otros métodos.

En los viejos tiempos, AUTOEXEC.BAT solía usarse para configurar el entorno operativo básico.

EDITAR

Mofi tiene toda la razón en su respuesta. El lado derecho del comando SET, en su caso, está configurando un Nombre de archivo (para su posterior uso en algún lugar) en las variables de entorno actuales. Tristemente, interpreté mal la pregunta y pensé que estabas preguntando sobre SET en lugar de lo que se estaba estableciendo. Puede probar sus comandos SET escribiendo SET (sin parámetros) en el símbolo del sistema. Las variables de entorno actuales se repetirán.