Concaténation variable et paramètre
Bonjour
Je ne pratique quasiment pas les batchs et je rencontre donc des problèmes, jugés évident aux pratiquants.
Je récupère des dates dans un fichier texte et je veux les transformer avant de les écrire avec d'autres variables dans un autre fichier texte.
Voici mon fichier texte :
Code:
1 2 3 4 5 6 7 8 9 10
|
01/07/18 04:00 Page : 1
SOCIETE X
*
ADRESSE
FACTURE TRANSF. VERS BAT.17 DU 01/06/18 AU 30/06/18
TOTAL CONSO (ORANGE GSM / COMPLETEL / FT) |
Je ne connais pas à l'avance le positionnement des dates, donc je recherche sur chaque ligne l'existence des mots FACTURE, DU et AU
avec une boucle.
Une fois la ligne trouvée, je dois corriger les dates pour faire apparaître le siècle.
Je dois stocker dans un fichier de sortie ceci :
date-heure du jour;date de début avec le siècle;date de fin avec le siècle;
donc ceci:
29/08/2018 10:27:30;01/06/2018;30/06/2018;
Mais je ne parviens pas à initialiser mes variables avec les dates de début et de fin (pour ajouter ensuite le siècle).
Voici mon script:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
setlocal enabledelayedexpansion
cls
@echo off
set Aujourdhui=%date%
set HeureDiz=%time:~0,1%
set SuiteHeure=%time:~1,7%
:: mais heure peut etre sur 1 seul chiffre
echo %HeureDiz%
if NOT "%HeureDiz%" == "1" (
if NOT "%HeureDiz%" == "2" (
set HeureDiz=0
)
)
:: echo %HeureDiz%
set DHJour=%Aujourdhui% %HeureDiz%%SuiteHeure%
echo %DHJour%
:: boucle pour localiser les début et fin de période
for /f "tokens=1,2,3,4,5,6,7,8,9,10* delims= " %%a in ('type facturecopieentete.csv') do (
echo a=%%a b=%%b c=%%c d=%%d e=%%e f=%%f g=%%g h=%%h
if %%a EQU FACTURE (
::echo une facture
if %%e EQU DU (
if %%g EQU AU (
echo Periode : %%f %%h
echo on
set DebutOrig=%%f
set FinOrig=%%h
::set Debut=%DebutOrig:~0,6%20%DebutOrig:~6,2%
::set Fin=%FinOrig:~0,6%20%FinOrig:~6,2%
echo %DHJour%;%DebutOrig%;%FinOrig%;%%f;%%h;>> facture_periode.csv
echo off
)
)
)
) |
le fichier facture_periode.csv contient :
Code:
29/08/2018 10:27:30;;;01/06/18;30/06/18;
J'ai bien mes 2 dates mais donc DebutOrig et FinOrig sont vides.
J'ai essayé de mettre ou sans plus de résultats.
Je n'ai pas trouvé sur les FAQ de solutions.
Auriez-vous une idée ?
Cordialement
Comprendre la réponse --- suite
Je préfère pour la 1° boucle
Code:
1 2
|
for /f "tokens=1-8 delims= " %%a in ('findstr /i "facture" "facturecopieentete.csv"') do set $dates=%%f/%%h |
Cela me semble plus clair. Le séparateur est l'espace et on récupère les 6° et 8° mots pour les dates.
Dans les 2 cas, la 1° date traine un espace en fin. Mais je peux le supprimer ensuite.
Pour le formatage du time, j'avais mal compris. Je croyais qu'il me permettait l'imposer le 0 pour la dizaine des heures quand il est vide.
Le formatage
mis en haut de mon script revient au même.
En fait, je n'avait pas vu le "0" ci-dessous
Il impose un 0 si le 1° caractère est vide. Je n'ai jamais vu cela dans les pages web. Où est-ce documenté ?