Exploitation des noms de réptertoires longs

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
elgringo123456
Batcheur occasionnel
Messages : 3
Enregistré le : 08 févr. 2009 15:39

Exploitation des noms de réptertoires longs

Message par elgringo123456 »

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
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: Exploitation des noms de réptertoires longs

Message par Batch_Man »

Bonjour,

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
Bonne soirée
elgringo123456
Batcheur occasionnel
Messages : 3
Enregistré le : 08 févr. 2009 15:39

Re: Exploitation des noms de réptertoires longs

Message par elgringo123456 »

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

:D
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: Exploitation des noms de réptertoires longs

Message par Batch_Man »

Bonjour !

Code : Tout sélectionner

%~d0
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
elgringo123456
Batcheur occasionnel
Messages : 3
Enregistré le : 08 févr. 2009 15:39

Re: Exploitation des noms de réptertoires longs

Message par elgringo123456 »

Hello Mr Batchman,

Merci encore pour ces infos.
Le script fonctionne sous XP.

A+
El Gringo 123456
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: Exploitation des noms de réptertoires longs

Message par Batch_Man »

Bonsoir,

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
Batch_Man
Répondre