[Ex] (BatWrap) imprimer un DIR

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
MClaveau
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 28
Enregistré le : ven. 08 févr. 2008 22:11
Status : Hors ligne

[Ex] (BatWrap) imprimer un DIR

#1

Message par MClaveau »

TOUTOTOMATIC.

Code : Tout sélectionner

;;;------- DIR imprimé (possibilité de grouper 1 à 5 directories / patterns)

    ; ATTENTION : les répertoires DOIVENT exister
    ; ATTENTION : les triples guillemets, pour les noms contenant des espaces 
$dir1="""C:\Temp\*.gif""" 
$dir2="""C:\Temp\*.jpg""" 
$dir3="""C:\Temp\*.exe""" 
$dir4="""D:\Tempbis\*.dll""" 
$dir5=""
$diroptions="/B /S"    ; pour choisir les détails du dir 


$bat="@echo off " & @CRLF 
$bat=$bat& "dir "& $dir1 &" "& $dir2 &" "& $dir3 &" "& $dir4 &" "& $dir5 &" "& $diroptions &" > ""%temp%\DIR.txt"" " & @CRLF 
$bat=$bat& "start /w notepad /p ""%temp%\DIR.txt"" " & @CRLF
$bat=$bat& "del ""%temp%\DIR.txt"" " & @CRLF
$bat=$bat& "exit" & @CRLF


$r=batwrap($bat)
Exit


Func batwrap($bat)
    $file = FileOpen(@TempDir & "\tmp.bat", 2)
    FileWrite($file, $bat)
    FileClose($file)

    $result=""
    $pid = Run("cmd /c" & @TempDir & "\tmp.bat","",0,6)
    While 1
        $result &= StdoutRead($pid)
        If @error Then ExitLoop
    Wend
    FileDelete($file)
    return $result
EndFunc
 
@-salutations (pas de messages perso ; merci)
--

Michel Claveau
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: (BatWrap) imprimer un DIR

#2

Message par ani »

j'ai les même à la maison :mrgreen:
Petite info

Code : Tout sélectionner

$bat="@echo off " & @CRLF
$bat=$bat& "dir "& $dir1 &" "& $dir2 &" "& $dir3 &" "& $dir4 &" "& $dir5 &" "& $diroptions &" > ""%temp%\DIR.txt"" " & @CRLF
$bat=$bat& "start /w notepad /p ""%temp%\DIR.txt"" " & @CRLF
$bat=$bat& "del ""%temp%\DIR.txt"" " & @CRLF
$bat=$bat& "exit" & @CRLF
Peut s'écrire de cette manière

Code : Tout sélectionner

$bat="@echo off " & @CRLF
$bat&= "dir "& $dir1 &" "& $dir2 &" "& $dir3 &" "& $dir4 &" "& $dir5 &" "& $diroptions &" > ""%temp%\DIR.txt"" " & @CRLF
$bat&= "start /w notepad /p ""%temp%\DIR.txt"" " & @CRLF
$bat&= "del ""%temp%\DIR.txt"" " & @CRLF
$bat&= "exit" & @CRLF
ou encore

Code : Tout sélectionner

$bat="@echo off " & @CRLF & _
     "dir "& $dir1 &" "& $dir2 &" "& $dir3 &" "& $dir4 &" "& $dir5 &" "& $diroptions &" > ""%temp%\DIR.txt"" " & @CRLF & _
     "start /w notepad /p ""%temp%\DIR.txt"" " & @CRLF & _
     "del ""%temp%\DIR.txt"" " & @CRLF & _
     "exit" & @CRLF
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: (BatWrap) imprimer un DIR

#3

Message par Tlem »

Et ceci :

Code : Tout sélectionner

$dir1="""C:\Temp\*.gif"""
$dir2="""C:\Temp\*.jpg"""
$dir3="""C:\Temp\*.exe"""
$dir4="""D:\Tempbis\*.dll"""
 
Peut être transformé en cela :

Code : Tout sélectionner

$dir1='"C:\Temp\*.gif"'
$dir2='"C:\Temp\*.jpg"'
$dir3='"C:\Temp\*.exe"'
$dir4='"D:\Tempbis\*.dll"'
 
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] (BatWrap) imprimer un DIR

#4

Message par ani »

J'ai tester le script, il ne fonctionne pas !
Notepad ouvre un fichier qui n'existe pas, ensuite le fichier bat ne s'efface pas.

Problème dans le paramètre de notepad, chez moi, je dispose de notepad2, installé dans c:\windows , il suffit de l'appeler sans start.

Pour le bat qui ne s'efface pas, tu prenais la $variable d'ouverture du fichier et non son nom.

Faut aussi faire attention au variable utilisé, tu utilise $bat comme variable et idem dans ta la fonction.=> batwrapper($bat)

On pourrait aussi écrire batwrapper("Echo off ....)

j'ai remarqué que la macro tempdir prenais bcp de ressource comparait a sa jumelle sous dos %TEMP%, c'est du a quoi ? en utilisant les macro dos sa me semble plus rapide et chez vous ?

voici une mini correction
rappel parametre dir
/B Utilise le format abrégé (noms des fichiers).
/S Affiche les fichiers d'un répertoire et de ses sous-répertoires.

Code : Tout sélectionner

#include <Constants.au3>
$Quote = chr(34) 
$SpaceQuote = chr(32) & $Quote
$QuoteSpace = $Quote & chr(32) 
$QuoteSpaceQuote = $QuoteSpace & $Quote 

;Paramètre de la cmd dir et de sa sortie
$Dir_CMD = "DIR"
$Dir_Options="/B /S"    ; pour choisir les détails du dir
$Sortie = "%TEMP%.\%~n0.txt" ; %~n0= nom du fichier bat ..@tempdir & "tmp.txt"

;Dossier, fichier extension (tout)
$Dir1="%TEMP%"
;le dossier suivant vous montre une autre méthode
$Dir2='c:\autoit3wrapper*.exe" "c:\aut2exe.exe' 
;Le fichier bat
$bat="@echo off" & @CRLF
$bat&= $Dir_CMD & $SpaceQuote & $dir1 & $QuoteSpaceQuote & $Dir2 &  $QuoteSpace  & $Dir_Options & " >" & $Sortie & @CRLF
$bat&= "notepad" & $SpaceQuote & $Sortie& $Quote & @CRLF
$bat&= "del" & $SpaceQuote & $Sortie & $Quote  & @CRLF
$bat&= "exit" & @CRLF

batwrap($bat)
Exit

Func batwrap($sBaT)
    Consolewrite($sBaT) ; variable $bat
    Local $File = @tempdir & "\tmp.bat" ;"%TEMP%.\tmp.bat"
    Local $Result=""
    $OpenFile = FileOpen($File, 2)
    FileWrite($OpenFile, $sBaT)
    FileClose($OpenFile)
    Local $Pid = Run("cmd /c" & $File,"",0,6)
    While 1
        $Result = StdoutRead($Pid)
        If @error Then ExitLoop
        MsgBox(0, "STDOUT read:", $Result)
    Wend
    FileDelete($File) ; on efface le fichier bat
    return $Result
EndFunc

Dans ton exemple tu crée un fichier bat, mais il n'est pas obligatoire, vu qu'on utilise la console ?
Répondre