[Résolu] [Batch] [Newbies] Diverses questions au sujet du Batch

Diverses questions au sujet du Batch [Résolu] [Batch] [Newbies] - Shell/Batch - Programmation

Marsh Posté le 27-03-2006 à 14:34:22    

Bonjour
 
Tout d'abort je souhaite remercier pascale73 pour son script ICI
 
Cependant j'aurais quelques questions au sujet du code que je n'arrive malheureusement pas à definir malgré l'ami google
 
@echo off  
@title Effacement de dossiers vides  
@dir /a: d /s /b "c:\dossier"|sort /r >%temp%\list-tri.txt  
@rem liste et trie tous les dossiers (avec leurs chemins) ordre alpha envers  
@rem boucle qui va examinier chaque ligne à partir du début  
@for /f "delims=" %%a in ('type %temp%\list-tri.txt') do call :commande "%%a"  
// A quoi consiste la fonction delims ? type ?
@rem les "" de %%a sont utiles si le nom des dossiers ont des espaces  
@echo fin de la liste : AU REVOIR !  
@del "%temp%\list-tri.txt"  
@pause  
 
 
:commande  
@set variable=%~1  
// Pourquoi initaliser la variable ci dessus %~1 ? A quoi correspond ~1 ?
@rem commande pas très utile variable sans "" on peut s'en passer  
@echo %variable%  
@rem idem remarque ci-dessus permet de visualiser les dossiers utile uniquement en test  
@rd "%variable%"  
 
 
@set variable=  
// Cette commande initialise la variable à NULL ? Pourquoi ?
 
Je ne connais pas l'endroit où est definit le fait que le dossier soit vide ou non.
 
Merci beaucoup pour votre aide
Cordialement
Ewkilian


Message édité par ewkilian le 28-03-2006 à 15:56:39
Reply

Marsh Posté le 27-03-2006 à 14:34:22   

Reply

Marsh Posté le 27-03-2006 à 19:05:00    

Bonjour,
 
Attention, Il est loin d'être parfait ce script !
et il a besoin de corrections.
Tu trouveras sur ce site un tutoriel batch très bien fait : ftp://anonymous.ftp.ovh.net/astas [...] _batch.pdf
qui te permettras de trouver ces réponses et de nombreuses autres.
 
Avant de se lancer dans de longues explications, regarde ce document.
et voici une réponse rapide
question numéro 1 : récupère les lignes unes par unes, voir l'aide de la commande for (aide et support, c'est plus agréable que for /?)
question numéro 2 : supprime les "" voir http://www.astase.com/forums/viewtopic.php?t=1786
question numéro 3 : réinitialise une variable (voir l'aide de la commande set) effectivement pas indispensable.

Reply

Marsh Posté le 28-03-2006 à 08:50:41    

Merci beaucoup pour les informations.
Tout cela est encore assez flou pour moi, mais ca viendra...
A present grace à votre script j'obtiens un fichier texte avec les chemins des dossiers et des fichiers. Et il possible d'effectuer un traitement spécial pour les fichiers.
je m'explique au moment de la 2eme boucle, le script relie chaque ligne. lorsqu'il tombe sur un dossier vide il l'efface, lorsqu'il tombe sur un fichier il genere une erreur --> Normal. Cependant je souhaiterais  
faire la difference entre un dossier et un fichier.
 
je souhaiterais effectuer cela :
If ( LigneLu == Dossier )
     Rd LigneLu
else
     Fonction (LigneLu)
 
J'espere que je me suis pas trop mal exprimé
Merci beaucoup pour votre aide
EwKilian

Reply

Marsh Posté le 28-03-2006 à 10:27:44    

Cette commande ne liste pas les fichiers mais uniquement les dossiers :
dir /a:d /s /b "c:dossier"|sort /r >%temp%list-tri.txt
à cause de l'option /a avec paramètre d.
 
dir /?
pour plus d'infos.
 
Il y a beaucoup à améliorer dans ce script, c'est vrai. Le mieux serait d'expliquer ton objectif pour une meilleure orientation.
 
Pour ta question du début : la commande
rd "%variable%"
supprime un dossier uniquement s'il est vide, au contraire il génèrera un message d'erreur et passe son chemin.


Message édité par wackevat le 28-03-2006 à 10:28:36
Reply

Marsh Posté le 28-03-2006 à 11:12:28    

Explication du systeme que je souhaite mettre en place :
 
Dossier 1
     - Fichier.txt
     - Fichier.doc
Dossier 2
     - Fichier.txt
     - Fichier.doc
Dossier 3
 
Dossier 4
     - Fichier.txt ( agé de plus de 30jours )
     - Fichier.doc ( agé de plus de 30jours )
 
Voila donc je souhaiterais mettre en place un script qui effacer les dossiers Vides et les dossiers ayant des fichiers vieux de plus de 30jours par conséquent d'apres l'exemple ci-dessus, il ne resterait plus que les dossier1 & dossier2. Les 2 autres seront supprimés
J'ai en ma posséssion un programme qui me permet d'effacer les fichiers agés de plus de 30jours, que je lance comme cela :
supprime.sh "c:/chemin/" 30 *.txt
[Commentaire]
30 = agé de 30jours
*.txt = type de fichier à verifié
[/Commentaire]
 
la petite ligne ci-dessus est utilisée dans un autre code batch et je suis certain qu'elle fonctionne
 
Merci à vous tous pour votre aide, ça fait vraiment plaisir

Reply

Marsh Posté le 28-03-2006 à 11:30:28    

Que se passe-t-il si un dossier contient des fichiers de plus de 30 jours et d'autres plus jeunes ?
 
Il sera également supprimé ou uniquement les vieux fichiers le seront ? Si le deuxième cas :
- Est-ce que ton script supprime.sh traite le dossier donné en paramètre récursivement ?
- Et si tu lançais supprime.sh au tout début du batch, avant de procéder à la suppression des dossiers vides ?

Reply

Marsh Posté le 28-03-2006 à 11:31:35    

nglechau :
 
En executant le code de pascale73 voici ce que j'obtiens dans le fichier list-tri.txt  
 
[list-tri.txt]
c:\test\5\Nouveau Document texte.txt
c:\test\5
c:\test\4\Nouveau Document texte.txt
c:\test\4
c:\test\3
c:\test\2
c:\test\1\Nouveau Document texte.txt
c:\test\1
[/list-tri.txt]
 
Par conséquent on s'appercoit bien que le code liste également les fichiers.
 
A bientot
Ewkilian


Message édité par ewkilian le 28-03-2006 à 11:32:22
Reply

Marsh Posté le 28-03-2006 à 11:40:23    

Pour éviter le bug des smileys sur le forum, il avait mis un espace après le /a: et avant le d. L'as-tu enlevé ?
 
D'où ma suggestion :
dir /?

Reply

Marsh Posté le 28-03-2006 à 14:24:33    

nglechau :  
J'ai enlevé l'espace et maintenant il m'affiche seulement les chemins des dossiers, Parfait
Maintenant ton idée au sujet de passer le supprime.sh avant est interessante.
 
je pense que cela devrait fonctionner à une condition, les  :
en ce moment j'ai cela :
 
c:\test4\  
c:\test3\  
 
et
 
il me faudrait cela
 
c: /test/4     ( sans espace )
c: /test/3     ( sans espace )  
 
Existe t il une option ou une fonction pour effectuer cela ?
 
Merci


Message édité par ewkilian le 28-03-2006 à 14:25:26
Reply

Marsh Posté le 28-03-2006 à 14:37:44    

Oui.
 
set VAR=%VAR:x=y%
 
set /?
pour plus d'info.

Reply

Marsh Posté le 28-03-2006 à 14:37:44   

Reply

Marsh Posté le 28-03-2006 à 15:04:12    

J'ai lu la doc set /?  
 
Mais ta fonction est toujours encore aussi flou pour moi ( désolé )
En faite je ne sais pas à quel endroit je peux placer cela ? je pense au niveau du dir ?
 
Qu'elle est l'argument qui tranforme le  \ en /
 
Je m'excuse vraiment pour mes questions, mais la je "nage" complement
Merci beaucoup


Message édité par ewkilian le 28-03-2006 à 15:04:24
Reply

Marsh Posté le 28-03-2006 à 15:09:23    

Dans  
set /?
tu lis notamment le paragraphe (je suis en anglais) :
---
Environment variable substitution has been enhanced as follows:
 
    %PATH:str1=str2%
 
etc.
---
C'est pareil pour toute variable.

Reply

Marsh Posté le 28-03-2006 à 15:55:43    

C'est bon j'ai finit tout mon script grace a votre aide, un grand merci à l'equipe etc....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed