Menu

Batch suppression de fichiers [Résolu/Fermé]

Messages postés
25
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
22 juillet 2008
- - Dernière réponse : cchristian
Messages postés
925
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
- 20 juil. 2008 à 21:20
Bonjour,

Je suis en train de réaliser un batch simple de suppression de fichiers que je passe en paramètre
au batch.

En gros, ça donne ça:

SET FICHIER=%1%
FOR /F %%I IN (%FICHIER%) DO DEL %%I

Mon problème vient que lors de l'éxécution de ce ce script (sur un Windows 2000 Server),
le chemin entier tel qu'indiqué dans le fichier est tronqué.
J'ai rajouté un guillement au début et à la fin des noms de fichiers, idem.

Lorsque je réalise l'opération "à la main" en réalisant un del "nom de mon fichier entier", ça marche!!

Je pense que le problème vient d ela prise en charge des noms longs dans un script...

Une idée quelqu'un?

Merci
Afficher la suite 

10 réponses

Messages postés
925
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
111
0
Merci
Bonjour,

En gros, ça donne ça:
SET FICHIER=%1
FOR /F %%I IN (%FICHIER%) DO DEL %%I

Je ne comprends pas très bien ce que tu souhaites faire :
Que contient (ou doit contenir) le paramètre de passation %1 ? Le chemin et le nom du fichier à annuler ?
Dans ce cas à quoi sert la boucle FOR ?
Qu'est-ce que ce fichier %FICHIER% dans cette même boucle FOR ? Au test on reçoit le message :
Le système ne peut trouver le fichier ... (où ... est la chaîne (tronquée) de caractères saisis en paramètre)

Peux-tu donner un exemple concret ?
Messages postés
25
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
22 juillet 2008
1
0
Merci
Bonjour,

Ce script n'est qu'un copier-coller de ce que j'ai pu trouver par ailleurs (chut).
Donc pour son interpretation précise... MAIS, ça fait ce que je veux. En fin presque.
Je pars d'un fichier texte qui contient plus de 55000 lignes, qui sont le nom complet des fichiers que je veux supprimer.

Un exemple d'une ligne de ce fichier:
C:\ARCHI\CAO\3D bibliothque Auto CAD & DS MAX\3Ds max bibliotheque\cours 3d max\Introduction to Gradient Ramp maps.doc

Auquel j'ai essayé dans un deuxième temps de rajouter des guillemets en début et fin de ligne, avec le même résultat:

C:\>reparation traitement.txt

C:\>SET FICHIER = traitement.txt

C:\>FOR /F %I IN (traitement.txt) DO DEL %I

C:\>DEL "C:\ARCHI\CAO\3D
Impossible de trouver "C:\ARCHI\CAO\3D


Voilà où j'en suis maintenant, le nom du fichier à traiter est tronquer (à cause d'un espace, ce serait possible? Ou alors la longueur?).

Cordialement,

Jul
Messages postés
925
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
111
0
Merci
Bonsoir,

Essaie de cette maniière :

SET FICHIER=%1
FOR /F "tokens=1,1* delims= " %%I IN (%FICHIER%) DO ( echo %%I )
rem (remplacer echo par DEL apres tests)
Messages postés
25
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
22 juillet 2008
1
0
Merci
Ok, je teste.
Un grand merci de toute manière.
Messages postés
25
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
22 juillet 2008
1
0
Merci
Sniff....
Maintenant, j'ai en réponse à:

C:\>reparation test.txt

C:\>SET FICHIER = test.txt

C:\>FOR /F "tokens=1,1* delims= " %I IN (test.txt) DO (echo %I )

C:\>(echo "C:\ARCHI\CAO\3D )
"C:\ARCHI\CAO\3D
Messages postés
925
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
111
0
Merci
Pour une raison qui m'échappe pour le moment il faut ajouter un espace à celui déjà existant situé après le signe = du paramètre ".. . . .delims=
Messages postés
25
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
22 juillet 2008
1
0
Merci
Bonjour,

C'est bel et bien le caractère espace qui pose problème.
Il y a-t-il un moyen de vérifier la conformité du fichier texte passé en paramètre?

Cordialement,

Julien
Messages postés
925
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
111
0
Merci
Bonjour,

Il est possible d'effectuer (Il s'agit de suggestions techniques qui n'ont pas été testées en réel ou qui, si elles ont été testées, ne l'ont pas été sur ce cas spécifique car reprises sur un existant):

- Un contrôle de présence du paramètre de passation :
        IF  %1                 ==       ""          	            ( 
             ECHO   ......... MESSAGE D'ANOMALIE
             GOTO            :EOF                                    )

- Un contrôle de présence du fichier :
        IF  NOT EXIST    "%FICHIER%" 	            ( 
             ECHO   ......... MESSAGE D'ANOMALIE
             GOTO            :EOF                                    )

- Un contrôle de conformité sur le nom et/ou l'extension et/ou  . . . . . . . :
rem Moyens pour extraire les données utiles aux différents contrôles possibles : 
     FOR          %%I     IN  (%FICHIER%)            DO (
         SET "nom_sans_extension=%%~nI"
rem Remplacer echo par un test de conformité IF NOT nom_sans_extension == ... 
         echo !nom_sans_extension!
         SET "nom_avec_extension=%%~nxI"
rem Remplacer echo par un test de conformité IF NOT nom_avec_extension == ... 
         echo !nom_avec_extension!                           
rem voir liste ci-dessous ( Doc. en ligne HELP FOR 2ème écran)
          SET ................................
)
    %~I         - étend %I en supprimant les guillemets (")
    %~fI        - étend %I en nom de chemin d'accès reconnu
    %~dI        - étend %I en lettre de lecteur uniquement
    %~pI        - étend %I en chemin d'accès uniquement
    %~nI        - étend %I en nom de fichier uniquement
    %~xI        - étend %I en extension de fichier uniquement
    %~sI        - chemin étendu contenant uniquement des noms courts
    %~aI        - étend %I en attributs du fichier
    %~tI        - étend %I en date/heure du fichier
    %~zI        - étend %I en taille du fichier
    %~$PATH:I   - parcourt les répertoires de la variable
                   d'environnement PATH et étend %I en nom du
                   premier fichier reconnu trouvé. Si le nom de la
                   variable d'environnement n'est pas défini ou
                   que le fichier n'est pas trouvé par la recherche,
                   alors ce modificateur étend en chaîne vide

Vous pouvez combiner les modificateurs pour obtenir des résultats composés 

    %~dpI       - étend %I en lettre de lecteur et chemin d'accès uniquemen
    %~nxI       - étend %I en nom de fichier et extension uniquement
    %~fsI       - étend %I en nom de chemin complet avec noms courts
                   uniquement
    %~dp$PATH:i - parcourt les répertoires listés dans la variable
                   d'environnement PATH à la recherche de %I et étend
                   en lettre de lecteur du premier trouvé.
    %~ftzaI     - étend %I en DIR comme ligne en sortie

- Un comptage des enregistrements pour contrôle en fin de traitement :
      SET /A  CPT_ENREG = 0
rem Utiliser la boucle FOR  existante : 
      FOR /F "tokens=1,1* delims= " %%I IN (%FICHIER%) DO (
             SET /A  CPT_ENREG += 1
             ...........................
             echo %%I ) 
rem en fin de boucle (de traitement) :
        IF  %CPT_ENREG%                 ==       0          ( 
             ECHO   ......... MESSAGE D'ANOMALIE
             GOTO            :EOF                                    )

- D'autres tests de conformité peuvent bien sûr être effectués en cours de traitement. Exemple test de présence de chacun des fichiers (si la présence de chacun d'eux est obligatoire bien entendu) dont le nom est extrait du fichier principal.
Messages postés
25
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
22 juillet 2008
1
0
Merci
Bonjour,

Merci, c'est ce genre de tests que je cherchais.
Entre temps, j'ai rééssayé de passer ce petit script en supprimant l'espace après le signe = de delims= et....banco. Comme quoi ça tient des fois à pas grand chose. Un grand merci pour ton aide, en espérant avoir l'occasion de pouvoir te renvoyer l'ascenseur un jour.

Cordialement,

Jul
Messages postés
925
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
111
0
Merci
Bonsoir,

En effet il faut supprimer les espaces après delims = . J'ai pourtant déjà rencontré ce problème, il m'est revenu à l'esprit à la lecture de ton dernier message. Comme quoi les échanges ça a du bon !

A+ j'espère,