Fecha : /año actual/mes/día-1 bajo DOS

richy -  
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

  1. brucine Mensajes publicados 25262 Fecha de registro   Estado Miembro Última intervención   4 187
     

    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?

    0
    1. richy
       

      Hola,

      Gracias por interesarte en mi solicitud, aquí está mi script DOS que aún no funciona:

      @echo off
      setlocal enabledelayedexpansion

      rem 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.txt

      rem Ejecutar FTP con el script
      rem ftp -s:ftp_script.txt
      ftp -s:C:\scripts\ftp_script.txt -v 192.168.1.13

      rem 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.

      0
      1. brucine Mensajes publicados 25262 Fecha de registro   Estado Miembro Última intervención   4 187 > richy
         

        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=%%i

        Poner 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 un

        echo %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.

        0
  2. richy
     

    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.

    0
    1. brucine Mensajes publicados 25262 Fecha de registro   Estado Miembro Última intervención   4 187
       

      En un Batch, una variable tiene dos signos %, en la línea de comando (pero ¿para qué sirve?) uno solo:

      FOR /F "usebackq" %i in (`PowerShell $date ^= Get-Date^; $date ^= $date.AddDays^(-1^)^; $date.ToString^('yyyy/MM/dd'^)`) do set HIER=%i & echo %i
      0
  3. richy
     

    Re hola,

    funciona, es muy amable de su parte, ¡gracias!

    Buen día.

    0
    1. brucine Mensajes publicados 25262 Fecha de registro   Estado Miembro Última intervención   4 187
       

      De nada si todo marcha como se esperaba.

      Buenas noches.

      0