Page 1 sur 1

[Ex] (BatWrap) imprimer un DIR

Posté : mar. 26 févr. 2008 12:18
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
 

Re: (BatWrap) imprimer un DIR

Posté : mar. 26 févr. 2008 13:46
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

Re: (BatWrap) imprimer un DIR

Posté : mar. 26 févr. 2008 20:53
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"'
 

Re: [Ex] (BatWrap) imprimer un DIR

Posté : mar. 04 mars 2008 02:03
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 ?