Script qui liste un disque local

[Résolu]
Signaler
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007
-
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
-
Bonjour,
J'ai un script qui se présente comme ceci, il me sert a lister le contenu d'un répertoire dans un fichier txt. Seulement, tester le et vous verrez que qd je fais /list.a.dir , tout desuite une fenetre se lance pour me dire quel répertoire je veux lister. Je voudrais qu'il ne me demande pas quel repertoire je veux lister, mais que par défaut, il list le e:\ avec un depth 1, ainsi, qu'il liste que les dossier a la racine de ce lecteur local et qu'il enregistre aussi le txt automatiquement dans le c:\list.txt et qu'il ne me demande pas quel nom je veux donner a ce txt. Merci de m'éclaircir les idées la dessus, je ne sais pas trop ce qu'il faut changer, et j'avoue que j'nai pas trop envie de m'aventurer la dedans, et de tout faire foirer. Merci d'avance, je ne pense pas que ca soit si difficile. Merci d'avance.
Bien cordialement
Bonne soirée

alias list.a.dir {
  var %file = $file="Save List As..." C:\list.txt
  %file = " $+ %file $+ "
  write -c %file
  var %dir = $sdir="Select directory to list. Click cancel when no more dir to add."
  %dir = " $+ %dir $+ "
  %depth = 0
  while ( %depth != 1 && %depth != 2 ) { %depth = $$?="Enter the depth of search(1 or 2). Note that only the folders to the specified depth will be listed." }
  while ( %dir != $null ) {
    if ( %depth == 1 ) { echo 4 Number of Folders Listed: $finddir(%dir,*,0,%depth,write %file $nopath($1-)) }
    else { echo 4 Number of Folders Listed: $finddir(%dir,*,0,1, echo 4 $finddir($1-,*,0,1, write %file $nopath($longfn($1)) ).shortfn ).shortfn }    
    %dir = $sdir="Select directory to list. Click cancel when no more dir to add."
    %dir = " $+ %dir $+ "
    %depth = 0
    while ( %depth != 1 && %depth != 2 ) { %depth = $$?="Enter the depth of search(1 or 2). Note that only the folders to the specified depth will be listed." }
  }
}

42 réponses

Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

re

en fait au lieu d'utiliser %line, ne serait t'il pas possible de faire if ( $1 === une ligne dans list.txt, alors delete cette ligne )

ca serait plus simple.
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Ben dans ton dossier tu connais la ligne qui peux etre succeptible d'etre presente et elle ne change jamais ? si oui bah $1 represente le repertoire donc if ($1 == taligne) {
tu devrait stocker une var sur 1 et seulement a  la fin du play ( avec l'evenement on playend ) tu supprime ta ligne en cherchant le n° de la ligne qui correspond a ta ligne
//noop $read(list.txt,w,$+(*,taligne,*)) | write -dl $+ $readn list.txt
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

Bonsoir, je ne comprends pas tout ce que tu dis wims

Dans le fichier list.txt : les lignes se présente de cette facon ex :
Ligne 1 : !test Documents_And_Settings

Imaginons, sur #channel, je fais
!test Documents_And_Settings

Le bot répond avec 5s de lag,
Documents_And_Settings allowed
Ou alors : documents_and_settings allowed ( la ca change, documents_and_settings !=== à la source Documents_And_Settings )

Imaginons, que je ne sais pas  dans quelle ligne du fichier list.txt se trouve !test Documents_And_Settings

Je veux d'une facon ou d'une autre, trouver l'endroit ou se trouve Documents_And_Settings dedans, vérifier si les majuscules minuscules sotn respectées avec (  === )  ,  si  oui,  delete cette ligne.

Comment faire ? J'espere que vous comprenez ce que je veux dire, defois le bot, répond, mais le format majuscules minuscules n'est pas respecté, et il faut tenir compte de ca.

Merci d'avance.

 
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Tu as essayé d'utilisé un if ($1 === Documents_And_Settings) { } ?
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

quand on play list.txt, on !test plein de releases, pas qu'une seule, et Documents_And_Settings était un exemple, je vois pas en quoi il serait util dnas le code.
Tu comprends ce que je veux dire ? j'ia l'impression de vous enbrouiller
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
lorsque tu play le fichier ya une ligne que tu veux supprimer ou y'en a plusieur ? est ce que tu sais laquelle c'est ? ( je croyais que ct Documents_And_Settings :\ ) sinon est ce que ya un moyen de chercher si une ligne dois etre supprimé ou pas ?
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

le truc, c'est que je veux juste !test toutes les lignes de list.txt, et supprimer celle qui sont bonnes. et a la fin, report celle qui reste, et qui sont donc fausse, car pas allowed par le bot, ou alors, majuscule, mininuscule pas respectée. Tu vois ce que je veux dire ?
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Ah ! Donc imaginons que ton fichier sois comme ceci :
F:\ok
F:\ok1
F:\ok2
F:\ok3

tu play et le bot te dis que les deux premiere ligne sont allowed  et les deux autres non,
tu veux sauver celle qui ne sont pas allowed ?
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

Bonjour,
Oui voila, je veux qu'au final, il ne reste plus que les mauvais. Tous les bons dossiers auront été retiré.
Comment faire ?
Merci d'avance
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Ben tu na copié copier le fichier obtenue apres le $finddir comme ca tu as deux fichier identique, avec un que tu va play pour ton bot, et des que ton bot te sors un "allowed"
il suffit de supprimer la ligne dans le fichier copié.Ensuite tu supprime le fichier que tu a play et tu renomme le second fichier qui contient seulement les bon repertoire avec le nom du premier fichier.
pour copier le fichier > /help /play
pour supprimer la ligne > //noop $read(fichier.txt,w,$+(*,$1,*)) cette apelle de $read s'il retourne qqch va remplir l'identifieur $readn qui retourne le numero de la ligne retourné donc il suffit de faire /write -dl $+ $readn fichier.txt
pour renommer un fichier /help /rename
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

Bonsoir wims,
Votre message de cette apres midi, m'a beaucoup aidé. Il me reste une toute derniere chose a savoir apres j'arrete de vous embeter.
J'ai $readn = 30

Quelle est la commande, qui permet de delete la ligne $readn dans list.txt

Merci d'avance
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

        /write -dl $+ $readn list.txt
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

J'aimerais bien rajouter une derniere chose, est-il possible de déplacer un dossier et tout son contenu avec mIRC ?

Je voudrais faire en sorte, que si le dossier est allow, le déplacer de f:\ à c:\good par exemple.

Merci de me dire si c faisable
Messages postés
840
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 février 2009
1
Il est impossible de déplacer un dossier en entier.
Cependant, il est possible d'arriver au même résultat en déplaçant les fichiers du premiers dossier vers le second de manière manuelle.
-Tu crées le dossier de destination s'il n'existe pas (/help /mkdir et $isdir())
-Puis tu copies (/help /rename) tes fichier du premier vers le second dossier a l'aide d'un $findfile
-Enfin, tu supprimes le premier dossier (qui est désormais vide) (/help /rmdir)
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

Bonsoir,
J'aurais aimé faire une autre chose, faire un report 5s apres la fin du play list.txt.

Et voir lesquels ils restent dans list2.txt

Est ce possible ?

Merci d'avance
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

Re bonsoir,
J'ai une seconde question. Je viens de regarder comme vous me l'aviez dis comment faire une copie.

Voici un début de mon boulot, mais ca ne marche pas. Vous pouvez me dire ce qui pose probleme ?

alias copy.x {
  var %destination = c:\TEST
  var %source = d:\STUFF
  /mkdir %destination
  $findfile(%source,*.*,0,1,rename " $+ $1- $+ " %destination)
}
Messages postés
840
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 février 2009
1
On ne peux pas appeler $finfile "comme ça", utilise noop puisque ce que la fonction nous retourne ne nous interesse pas.
Apres,$findfile retourne avec $1- le chemin COMPLET vers le fichier, donc pour avoir le nouveau chemin vers ce fichier, il faut associer ton rep %destination et le nom du fichier: $+(",%destination,\,$nopath($1-),")

Au final cela donne:

alias copy.x {
  var %destination = c:\TEST
  var %source = d:\STUFF
  mkdir %destination
  noop $findfile(%source,*.*,0,1,rename $+(",$1-,")  $+(",%destination,\,$nopath($1-),"))
}

Par contre tu devrais verifier que le dossier que tu crées n'existes pas déja (/help $isdir)
et aussi il faut savoir qu'on ne peut pas créer un dossier si son dossier parent existe c'est a dire que si je veux creer le dossier c:\test\test2 il faut que le dossier c:\test existe
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
"et aussi il faut savoir qu'on ne peut pas créer un dossier si son dossier parent existe c'est a dire que si je veux creer le dossier c:\test\test2 il faut que le dossier c:\test existe"

Pas mal l'embrouille :p, il manque juste un "pas" apres le 1er existe ^^
Messages postés
70
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
25 février 2007

Bonsoir,
J'ai encore un probleme avec mon script, et oui encore :) Vous devez commencer a en avoir marre ...
Voici comment se présente mon code :

alias copy.x {
  var %destination = c:\TEST
  var %source = d:\STUFF
  mkdir %destination
  noop $findfile(%source,*.*,0,1,rename $+(",$1-,")  $+(",%destination,\,$nopath($1-),"))
}

Imaginons que maintenant, j'ai plusieurs dossier dans %source
Je voudrais que ca les créer dans %destination
Et qu'ensuite ca copie tous les fichier dans chaques dossiers de %source et que ca les mette dans leurs dossiers respectifs dans %destination.
Est-ce faisable ? Il faut utiliser $finddir ?

Merci d'avance.
Bonne soirée
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Il suffit de faire une boucle dans ton alias :

alias copy.x {  var %d c:\TEST ,%s d:\STUFF ,%a 1 ,%b = $numtok(%s,44)
  mkdir %destination
  while (%a <= %b) {
  noop $findfile($token(%s,%a,44),*.*,0,1,rename $qt($1-) $qt($+(%d,\,$nopath($1-)))
 inc %a
 }
}

les differentes "source" doivent etre séparé par une virgule ex :
%s = D:\STUFF,D:\FJX,D:\ARKA