[BATCH] : Supprimer fichier dans sous-dossier s'il existe...
brucine Messages postés 21736 Date d'inscription Statut Membre Dernière intervention -
Bonjour.
Je m'explique... Je possède un dossier "Devis en cours" dans lequel il y a beaucoup de sous-dossiers "001 - xxxx", "002 - xxxx", "003 - xxxx" (où "xxxx" est un nom de client différent à chaque fois). Dans chaque dossier client, il y a un fichier "Devis.pdf". Dans certains des dossiers, il y a un fichier "Devis signé.pdf".
Je voudrais un fichier BAT qui :
1) vérifie dans chaque sous-dossier du dossier 'Devis en cours" s'il y a un fichier se nommant "Devis signé.pdf" ou "Devis signé.jpg",
2) si oui, qu'il vérifie s'il y a un fichier se nommant "Devis.pdf" (si oui, supprimer "Devis.pdf" ; sinon, pause et message d'erreur pour que je corrige à la main)
3) sinon, qu'il passe au sous-dossier suivant.
Pour faire bref, une fois que le client m'a renvoyé un devis signé, je n'ai plus besoin de conserver le devis initial. Je pourrais le faire manuellement mais il y a beaucoup de fichiers et de dossiers. De quoi se perdre...
J'ai un peu bidouillé en BATCH il y a très très longtemps mais je ne me rappelle plus de rien. Une bonne âme pour m'aider?
- [BATCH] : Supprimer fichier dans sous-dossier s'il existe...
- Fichier batch - Guide
- Batch converter - Télécharger - Photo & Graphisme
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
- Renommer tous les fichiers d'un dossier - Forum Windows
- Color batch - Forum Autoit / batch
1 réponse
Bonjour,
Ce n'est donc pas du VBA mais du Batch.
On commence par enlever les espaces intempestifs sans quoi on va se faire planter, renommer Devis_en_Cours et par exemple 001-020.
J'ai placé le dossier Devis_en_Cours à la racine de E:\ et pour le test créé 2 sous-dossiers 001-020 et 002-030 dont le deuxième ne contient rien et le premier
Devis signé.jpg et Devis.pdf, j'ai renouvelé l'expérience en coupant collant le pdf dans le deuxième dossier.
J'ai rajouté un contrôle pour les dossiers OK sans quoi le script s'exécute sans aucun retour si tout est bon.
@echo off CHCP 65001 >NUL echo. FOR /F %%a in ('dir /a:d /b /s "E:\Devis_en_Cours"') DO SET DOSSIER=%%a & CALL :PROCESS1 GOTO EOF :PROCESS1 SET DOSSIER=%DOSSIER:~0,-1% IF EXIST "%DOSSIER%\Devis*" ECHO %DOSSIER% OK IF EXIST "%DOSSIER%\Devis-signé.*" GOTO TEST IF EXIST "%DOSSIER%\Devis.pdf" GOTO SORTIE :ABSENT echo [101;93m IL N'Y A PAS DE DEVIS DANS LE DOSSIER %DOSSIER% [0m pause GOTO SORTIE :TEST IF EXIST "%DOSSIER%\Devis.pdf" DEL "%DOSSIER%\Devis.pdf" :SORTIE exit /b :EOF pause