Fecha : /año actual/mes/día-1 bajo DOS
brucine Mensajes publicados 25262 Fecha de registro Estado Miembro Última intervención -
Hola,
En Linux, tengo la variable "REPO" que define la ruta de los archivos por fecha j-1 (directorio y subdirectorio).
REPO="/var/lib/docker/volumes/config_frontoffice_storage_exports/_data/"`date -d "yesterday" +"%Y"`"/"`date -d "yesterday" +"%m"`"/"`date -d "yesterday" +"%d"`
equivale a :
REPO="/var/lib/docker/volumes/config_frontoffice_storage_exports/_data/2023/10/16
Quiero reproducir la misma variable "REPO" en un script de Dos (batch Windows).
Gracias de antemano.
3 respuestas
-
Hola,
Aclara, bash es hebreo para mí.
La pregunta consiste en hacer algún tipo de tratamiento (¿cuál, listar, copiar en alguna parte...?) de todos los archivos de la estructura que se llamarían toto-aaaa-mm-dd (¿con qué sintaxis de fecha?) o bien extraer todos aquellos que se llamen como queramos pero que hayan sido creados o modificados en la fecha en cuestión?-
Hola,
Gracias por interesarte en mi solicitud, aquí está mi script DOS que aún no funciona:
@echo off
setlocal enabledelayedexpansionrem Calcular la fecha un día adelante
for /f %%A in ('powershell -Command "(Get-Date (Get-Date).AddDays(1)).ToString('yyyyMMdd')"') do (
set DATE=%%A
)rem Crear el archivo de script FTP
echo open ftp.example.com>ftp_script.txt
echo USER>>ftp_script.txt
echo PASSWORD>>ftp_script.txt
echo cd /var/lib/docker/volumes/config_frontoffice_storage_exports/_data/%DATE%>>ftp_script.txt
prompt>>ftp_script.txt
lcd C:\Dispatsh\DF108>>ftp_script.txt
echo mget 00108*>>ftp_script.txt
prompt>>ftp_script.txt
echo bye>>ftp_script.txtrem Ejecutar FTP con el script
rem ftp -s:ftp_script.txt
ftp -s:C:\scripts\ftp_script.txt -v 192.168.1.13rem Eliminar el archivo de script FTP
del ftp_script.txt
la necesidad es recuperar los archivos "00108*" de la ruta: /var/lib/docker/volumes/config_frontoffice_storage_exports/_data/%DATE% (a través de ftp)
debo recuperar todos los días los archivos "00108" del día anterior que se actualizan cada fin de día anterior, por ejemplo hoy (20231018) mi script debe conectarse por ftp a la máquina objetivo en la dirección: 192.168.1.13 en la ruta: ( /var/lib/docker/volumes/config_frontoffice_storage_exports/_data/2023/10/17)
para recuperar los archivos "00108*".
bajo linux la variable:
REPO="/var/lib/docker/volumes/config_frontoffice_storage_exports/_data/"`date -d "yesterday" +"%Y"`"/"`date -d "yesterday" +"%m"`"/"`date -d "yesterday" +"%d"`
que representa la ruta objetivo funciona bien.
el problema es convertir este comando de linux de la ruta objetivo en un script dos.
Gracias de antemano.
Confío en tu sintaxis FTP, no tengo servidor para verificar.
La sentencia setlocal enabledelayedexpansion no perjudica pero no sirve para nada: solo tiene utilidad para traer dentro de un bucle FOR cuyos resultados serían varios valores sucesivos (no es el caso), cada uno de estos valores en lugar de solo el último, y solo funciona en toda hipótesis para las variables especificadas por !var! en lugar de %var%
Si temes que tal comando no sea interpretado correctamente, reemplaza por:
setlocal EnableExtensions
No debes usar DATE, que es una variable de sistema, sino definir tu variable personalizada, por ejemplo _DATE, estoy seguro de que esa no existe ya.
Salvo error de mi parte, calculas la fecha de mañana AddDays(1) en lugar de la de ayer AddDays(-1) y tu formato de fecha yyyyMMdd no es coherente con el de los directorios que entiendo que es yyyy/MM/dd.
Para eso uso (he modificado el formato según el tuyo) una variable que llamo HIER (cada uno elige), he recuperado de modo que, para darle el formato requerido, la fecha no en una variable Batch %_DATE% sino en una variable de PowerShell $date
FOR /F "usebackq" %%i in (`PowerShell $date ^= Get-Date^; $date ^= $date.AddDays^(-1^)^; $date.ToString^('yyyy/MM/dd'^)`) do set HIER=%%iPoner un REM delante de @echo off y sucesivamente pausa después de cada comando o secuencia de comandos para buscar un posible error.
Comenzar en mi caso poniendo después del bucle FOR unecho %HIER% y, incluso, seamos astutos, un echo x%HIER%x: ciertos comandos pueden insertar un espacio intempestivo que me va a fallar sin que lo vea y que de este modo se identificaría.
-
-
Hola, gracias por su respuesta:
La ejecución en dos (cmd) del comando:
FOR /F "usebackq" %%i in (`PowerShell $date ^= Get-Date^; $date ^= $date.AddDays^(-1^)^; $date.ToString^('yyyy/MM/dd'^)`) do set HIER=%%i
me devuelve el siguiente resultado:
%%i fue inesperado en este momento.
Cordialmente, saludos.
-