Batch suppression de fichiers

Résolu/Fermé
Jul-ACTH Messages postés 25 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 22 juillet 2008 - 19 juil. 2008 à 14:07
cchristian Messages postés 921 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
A voir également:

10 réponses

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
19 juil. 2008 à 17:10
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 ?
0
Jul-ACTH Messages postés 25 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 22 juillet 2008 3
19 juil. 2008 à 19:07
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
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
19 juil. 2008 à 20:29
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)
0
Jul-ACTH Messages postés 25 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 22 juillet 2008 3
19 juil. 2008 à 21:07
Ok, je teste.
Un grand merci de toute manière.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jul-ACTH Messages postés 25 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 22 juillet 2008 3
19 juil. 2008 à 21:20
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
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
19 juil. 2008 à 22:16
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=
0
Jul-ACTH Messages postés 25 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 22 juillet 2008 3
20 juil. 2008 à 10:27
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
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
20 juil. 2008 à 16:02
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.
0
Jul-ACTH Messages postés 25 Date d'inscription mardi 29 mai 2007 Statut Membre Dernière intervention 22 juillet 2008 3
20 juil. 2008 à 19:22
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
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
20 juil. 2008 à 21:20
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,
0