[BATCH] : Supprimer fichier dans sous-dossier s'il existe...

ComboFab - 7 août 2023 à 11:42
brucine Messages postés 14338 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 - 7 août 2023 à 13:20

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?

A voir également:

1 réponse

brucine Messages postés 14338 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 819
7 août 2023 à 13:20

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
1