Suppression en batch de fichiers absent d'une liste
Résolu
Angelus_h
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Angelus_h Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Angelus_h Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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)
Le dossier est constitué ainsi :
Dans l'exemple ci dessus, l'objectif est de supprimer les fichiers en gras n'appartenant pas à la liste
Le code actuel :
Merci d'avance pour vos réponses, idées ou piste à exploiter.
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.
A voir également:
- Suppression en batch de fichiers absent d'une liste
- Liste déroulante excel - Guide
- Forcer suppression fichier - Guide
- Fichier batch - Guide
- Liste déroulante en cascade - Guide
- Renommer des fichiers en masse - Guide
3 réponses
Bonjour,
Peut-être comme ça :
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
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
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
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