Suppression en batch de fichiers absent d'une liste [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 15 avril 2021
Statut
Membre
Dernière intervention
20 avril 2021
-
Messages postés
3
Date d'inscription
jeudi 15 avril 2021
Statut
Membre
Dernière intervention
20 avril 2021
-
Bonjour,

Je réalise actuellement un script mais je n'arrive pas à réaliser l'étape principale.

J'ai lié deux dossiers avec un contenu identique :
- un disque origine
- un disque sauvegarde

La mise à jour sur la date la plus récente des deux fonctionnes.
Par contre j'aurais besoin de supprimer les fichiers dans les deux dossiers n'appartenant pas à la première colonne d'un listing.

Le fichier listing.lst est composé ainsi : (la séparation est faite en tabulation)
1	Nom	Prenom	donnee
4 Nom Prenom donnee
5 Nom Prenom donnee
6 Nom Prenom donnee
8 Nom Prenom donnee
10 Nom Prenom donnee


Le dossier est constitué ainsi :
linsting.lst
00000001.DST
00000004.DST
00000005.DST
00000006.DST
00000006.CTS
00000007.DST
00000007.CTS

00000008.DST
00000010.DST


Dans l'exemple ci dessus, l'objectif est de supprimer les fichiers en gras n'appartenant pas à la liste

Le code actuel :
@echo off

setlocal enabledelayedexpansion

set origine="D:\ORIGINE"
set disque="Z:\Sauvegarde"

rem copie du listing le plus récent entre les deux disques

xcopy %origine%\listing.lst %disque%\ /D /Q /Y
xcopy %disque%\listing.lst %origine%\ /D /Q /Y

rem suppression des fichiers *.DST et *.CTS n'appartenant pas à la liste sur les deux disques

........

rem actualisation de l'ensemble des fichiers sur les plus récents

xcopy %origine%\*.* %disque%\ /D /Q /Y
xcopy %disque%\*.* %origine%\ /D /Q /Y


Merci d'avance pour vos réponses, idées ou piste à exploiter.

3 réponses

Messages postés
13425
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
13 mai 2021
4 336
Bonjour,

Peut-être comme ça :
pushd %origine%
for %%A in (*.CTS *.DST) do findstr "%%~nA" listing.lst >nul || del /f "%%~fA"
popd

pushd %disque%
for %%A in (*.CTS *.DST) do findstr "%%~nA" listing.lst >nul || del /f "%%~fA"
popd


Messages postés
3
Date d'inscription
jeudi 15 avril 2021
Statut
Membre
Dernière intervention
20 avril 2021

Merci pour cette réponse qui est presque parfaite.
Si j'ajoute les 0 dans le listing, ça marche.

Mais le listing n'est pas généré avec les 0

Les fichiers sont toujours sur 8 caractères (les vides sont remplacés par des 0)
Exemple :
00000005.CTS
00000112.DST
Messages postés
13425
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
13 mai 2021
4 336
Ok dans ce cas tu peux faire comme ceci :
@echo off

setlocal enabledelayedexpansion

set "origine=D:\ORIGINE"
set "disque=Z:\Sauvegarde"

rem copie du listing le plus récent entre les deux disques

xcopy "%origine%\listing.lst" "%disque%\" /D /Q /Y
xcopy "%disque%\listing.lst" "%origine%\" /D /Q /Y

rem suppression des fichiers *.DST et *.CTS n'appartenant pas à la liste sur les deux disques

call :suppression "%origine%" "%TMP%\listing_bis.txt"
call :suppression "%disque%" "%TMP%\listing_bis.txt"

rem actualisation de l'ensemble des fichiers sur les plus récents

xcopy "%origine%\*.*" "%disque%\" /D /Q /Y
xcopy "%disque%\*.*" "%origine%\" /D /Q /Y

exit

:suppression

cd /d %1 & type nul >%2

for /f "tokens=1 delims=	" %%E in (listing.lst) do (
	set "index=00000000%%~nE"
	echo.!index:~-8!>>%2
)

for %%A in (*.CTS *.DST) do find "%%~nA" %2 >nul || del /f "%%~fA"

goto :eof
Messages postés
3
Date d'inscription
jeudi 15 avril 2021
Statut
Membre
Dernière intervention
20 avril 2021

Merci beaucoup !

Bonne idée le fichier temporaire, ça marche parfaitement.