Date : /année courante/mois/j-1 sous DOS

richy - 17 oct. 2023 à 16:10
brucine Messages postés 17000 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 - 18 oct. 2023 à 17:45

Bonjour,

Sous Linux, j'ai la variable "REPO" qui me définie le chemin des fichiers par date j-1 (répertoire et sous répertoire).

 REPO="/var/lib/docker/volumes/config_frontoffice_storage_exports/_data/"`date -d "yesterday" +"%Y"`"/"`date -d "yesterday" +"%m"`"/"`date -d "yesterday" +"%d"`

équivaut à : 

 REPO="/var/lib/docker/volumes/config_frontoffice_storage_exports/_data/2023/10/16

Je veux reproduire la même variable "REPO" dans un script Dos (batsh windows).

Merci d'avance.

3 réponses

brucine Messages postés 17000 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 413
18 oct. 2023 à 00:42

Bonjour,

Tu précises, bash c'est de l'hébreu pour moi.

La question consiste à faire un traitement quelconque  (lequel, liste, copie quelque part...?) de tous les fichiers de l'arborescence qui s'appelleraient toto-aaaa-mm-jj (avec quelle syntaxe de date?) ou bien à extraire tous ceux qui s'appelleraient comme on veut mais qui ont été créés ou modifiés à la date en question?

0

Bonjour, 

Merci de vous intéresser à ma requête, voici mon script DOS qui ne fonctionne pas encore:   

@echo off
setlocal enabledelayedexpansion

rem Calculate the date one day ahead
for /f %%A in ('powershell -Command "(Get-Date (Get-Date).AddDays(1)).ToString('yyyyMMdd')"') do (
    set DATE=%%A
)

rem Create the FTP script file
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 Run FTP with the script
rem ftp -s:ftp_script.txt
ftp -s:C:\scripts\ftp_script.txt -v 192.168.1.13

rem Delete the FTP script file
del ftp_script.txt
 

le besoin est de récupérer les fichier "00108*" du chemin:  /var/lib/docker/volumes/config_frontoffice_storage_exports/_data/%DATE%   (par ftp)

je dois récupérer chaque jour les fichiers "00108" de la veille qui s'alimente chaque fin de journée veille, par exemple aujourd'hui (20231018) mon script doit se connecter par ftp à la machine cible dans l'adresse est :  192.168.1.13 sur le chemin : (  /var/lib/docker/volumes/config_frontoffice_storage_exports/_data/2023/10/17)

pour récupérer les fichiers "00108*".

sous 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"`

qui représente le chemin cible fonctionne bien.

le soucis est de convertie cette commande linux  du chemin cible  sous script dos.

Merci d'avance.

0
brucine Messages postés 17000 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 413 > richy
Modifié le 18 oct. 2023 à 11:37

Je te fais confiance pour ta syntaxe FTP, je n'ai plus de serveur pour vérifier.

La sentence setlocal enabledelayedexpansion ne nuit pas mais ne sert à rien: elle n'a pour utilité que de ramener dans une boucle FOR dont le résultat serait plusieurs valeurs successives (ce n'est pas le cas), chacune de ces valeurs au lieu de seulement la dernière, et ne fonctionne en toute hypothèse que pour les variables spécifiées par !var! au lieu de %var%

Si tu crains que telle commande ne soit pas interprétée correctement, remplace par:

setlocal EnableExtensions

Tu ne dois pas utiliser DATE, qui est une variable système, mais définir ta variable personnalisée, par exemple _DATE, je suis sûr que celle-là n'existe pas déjà.

Sauf erreur de ma part, tu calcules la date de demain AddDays(1) au lieu de celle d'hier AddDays(-1) et ton format de date yyyyMMdd n'est pas cohérent avec celui des dossiers cibles que je comprends être yyyy/MM/dd.

J'utilise pour cela (j'ai modifié le format selon le tien, une variable que j'appelle HIER (chacun choisit), j'y ai récupéré de sorte à lui affecter le format requis la date non pas dans une variable Batch %_DATE% mais dans une variable PowerShell $date
 

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

Mettre un REM devant @echo off et successivement pause après chaque commande ou séquence de commandes pour chercher une erreur éventuelle.

Commencer dans mon cas de figure par mettre après la boucle FOR un

echo %HIER% et même, soyons vicieux, un echo x%HIER%x: certaines commandes peuvent insérer un espace intempestif qui va me planter sans que je le voie et qui serait ainsi localisé.

0

re-bonjour, merci pour votre réponse:

l'exécution sous dos (cmd) de la commande :

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

me renvoi le résultat suivant:

%%i  was unexpected at this time.

Cordialement Salutation.

0
brucine Messages postés 17000 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 413
18 oct. 2023 à 12:17

Dans un Batch, une variable a deux signes %, à la ligne de commande (mais pour quoi faire?) un seul:
 

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

Re bonjour,

ça fonctionne c'est très aimable de votre part merci!

Bonne journée.

0
brucine Messages postés 17000 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 1 octobre 2024 2 413
18 oct. 2023 à 17:45

De rien si tout marche comme attendu.

Bonne soirée.

0