Bonjour,
Je me permets de vous solliciter sur le probème suivant : exploitation de fichier avec un nom long.
J'ai cherché dans la FAQ et sur le site mais je ne suis pas arrivé à trouver une solution (peut-être trop néophyte sur le sujet).
Problème : l'objectif étant de supprimer les fichiers contenus dans des sous répertoires.
Le script joint réalise les actions suivantes :
1. Lister les sous répertoires d'un répertoire donné
2. Constituer un fichier contenant la liste suivant le format chemin\sous-repertoire
3. Lecture du fichier et suppression des fichiers du fichier précédemment constituer.
Prenons un exemple :
1. Liste les sous répertoires de C:\Tmp\01. Dev
Imaginons le résultat :
Toto (sous répertoire)
Tutu (sous répertoire)
Titi (sous répertoire)
2. Création du fichier C:\Tmp\ListeRepIni.txt contenant les sous répertoires
3. Création du fichier C:\Tmp\ListeRepFinal.txt contenant la liste les sous répertoires suivant le format :
"Chemin\sous répertoire"
3. Suppression de tous les fichiers des sous répertoires listés par la commande DEL
Etant donné que le répertoire "01. Dev" a un espace, une erreur apparait, c'est la raison pour laquelle ajout de " pour réaliser la commande DEL
Néanmoins, je n'arrive pas à trouver une solution pour executer la ligne 23 à cause de l'espace.
Pourriez-vous me dire comment je peux executer la commande DEL avec des noms de fichiers longs en relisant un fichier ?
Merci d'avance de votre aide,
Cordialement.
Elgringo 123456
Ps : je fais un copier / coller du script car je n'arrive pas joindre le fichier.bat
REM @echo off
echo .
echo ###################################################
echo Répertoire : Nettoyage des sous répertoires
echo ###################################################
echo .
REM Initialisation de l'environnement
Set rep_src="C:\Tmp\01. Dev"
Set ListeInit=C:\Tmp\ListeRepInit.txt
Set ListeFinal=C:\Tmp\ListeRepFinal.txt
IF EXIST %ListeInit% DEL /S /Q %ListeInit%
IF EXIST %ListeFinal% DEL /S /Q %ListeFinal%
if NOT EXIST C:\Tmp mkdir C:\Tmp
dir %rep_src% /B > %ListeInit%
REM Liste le contenu du fichier - Suppression des "
FOR /f %%a IN (%ListeInit%) DO (echo %rep_src:~1,-1%\%%a >> %ListeFinal%)
PAUSE
FOR /f %%a IN (%ListeFinal%) DO (DEL echo "%%a\*.*")
PAUSE
REM DEL %ListeInit%
REM DEL %ListeFinal%
echo ON
Exploitation des noms de réptertoires longs
Modérateur : WIN32-[GG]
-
- Batcheur occasionnel
- Messages : 3
- Enregistré le : 08 févr. 2009 15:39
Re: Exploitation des noms de réptertoires longs
Bonjour,
Servit sur un plateau
Bonne soirée
Servit sur un plateau
Code : Tout sélectionner
REM
@echo off
echo .
echo ###################################################
echo R‚pertoire : Nettoyage des sous r‚pertoires
echo ###################################################
echo .
REM Initialisation de l'environnement
set rep_src=%~d0\Tmp
Del /S /Q %rep_src%\ListeRepFinal.txt 2>NUL >NUL
if not exist %rep_src% md %rep_src%
Rem Liste tous les DOSSIERS du répertoire et supprime tous les fichier dans les sous répertoires
Rem Les liste dans le fichier final
for /f "tokens=*" %%a in ('dir /B /ad %rep_src%') do (
for /f "tokens=*" %%i in ("%%a") do Del /S /Q "%rep_src%\%%i\*.*" &echo %rep_src%\%%i >> %rep_src%\ListeRepFinal.txt)
pause
-
- Batcheur occasionnel
- Messages : 3
- Enregistré le : 08 févr. 2009 15:39
Re: Exploitation des noms de réptertoires longs
Bonjour BatchMan,
Tout d'abord je tiens à te remercier pour le script donné.
Effectivement, ça marche tres bien.
Je me permets d'avoir quelques questions sur la problématique suivante :
+ Que signifie ~d0 ? => C:\ ?
+ Dans le cas de la lecture d'un fichier txt, existe-t-il une fonction TRIM LEFT et TRIM RIGHT pour supprimer les espaces vides aux extremites de la ligne ?
Par exemple dans le fichier TOTO.txt :
" C:\Tmp\01. Dev\Toto.txt " => Objectif est de supprimer les espaces vides aux extremités.
Auriez-vous une idée sur la question ?
Encore désolé de vous importuner,
Cordialement.
El Gringo 123456
Tout d'abord je tiens à te remercier pour le script donné.
Effectivement, ça marche tres bien.
Je me permets d'avoir quelques questions sur la problématique suivante :
+ Que signifie ~d0 ? => C:\ ?
+ Dans le cas de la lecture d'un fichier txt, existe-t-il une fonction TRIM LEFT et TRIM RIGHT pour supprimer les espaces vides aux extremites de la ligne ?
Par exemple dans le fichier TOTO.txt :
" C:\Tmp\01. Dev\Toto.txt " => Objectif est de supprimer les espaces vides aux extremités.
Auriez-vous une idée sur la question ?
Encore désolé de vous importuner,
Cordialement.
El Gringo 123456
Re: Exploitation des noms de réptertoires longs
Bonjour !
est le lecteur où se trouve le batch: C:
Pour ta deuxième question, non je ne connais pas quelque chose pouvant faire cela
es-tu sous vista ( pour savoir s'il fonctionne sur xp + vista )
Batch_Man
Code : Tout sélectionner
%~d0
Pour ta deuxième question, non je ne connais pas quelque chose pouvant faire cela
es-tu sous vista ( pour savoir s'il fonctionne sur xp + vista )
Batch_Man
-
- Batcheur occasionnel
- Messages : 3
- Enregistré le : 08 févr. 2009 15:39
Re: Exploitation des noms de réptertoires longs
Hello Mr Batchman,
Merci encore pour ces infos.
Le script fonctionne sous XP.
A+
El Gringo 123456
Merci encore pour ces infos.
Le script fonctionne sous XP.
A+
El Gringo 123456
Re: Exploitation des noms de réptertoires longs
Bonsoir,
Pour enlever l'espace:
Batch_Man
Pour enlever l'espace:
Code : Tout sélectionner
@echo off
echo .
echo ###################################################
echo R‚pertoire : Nettoyage des sous r‚pertoires
echo ###################################################
echo .
REM Initialisation de l'environnement
set rep_src=%~d0\Tmp
Del /S /Q %rep_src%\ListeRepFinal.txt 2>NUL >NUL
if not exist %rep_src% md %rep_src%
Rem Liste tous les DOSSIERS du répertoire et supprime tous les fichier dans les sous répertoires
Rem Les liste dans le fichier final
for /f "tokens=*" %%a in ('dir /B /ad %rep_src%') do (
for /f "tokens=*" %%i in ("%%a") do Del /S /Q "%rep_src%\%%i\*.*" &echo %rep_src%\%%i>>%rep_src%\ListeRepFinal.txt)
pause