Batch suppression de fichiers
Résolu
Jul-ACTH
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Batch suppression de fichiers
- Forcer suppression fichier - Guide
- Fichier batch - Guide
- Explorateur de fichiers - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
10 réponses
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 ?
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 ?
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
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
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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=
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
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
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):
- 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.
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.
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
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