Das Ergebnis eines Befehls aus UNIX-Tools an einen Variablen übergeben

  • Hallo,

    mit Unixtools für Windows (grep und gawk) habe ich den folgenden Befehl zusammengestellt:

    C:\UNIXTOOLS\grep WINDOWS C:\volume.txt | C:\UNIXTOOLS\gawk "{print $1}"

    Die Datei "volume.txt" enthält folgende Zeilen:
    Name VolumeName
    C: WINDOWS
    D: DATEN

    Wenn ich den Befehl in einem Kommandfenster ausführe, wird der Inhalt der Datei "volume.txt" ausgelesen und die für mich wichtige Info "der Laufwerksbuchstabe" als "C:" ausgegeben. Ich möchte diesen Befehl in AUTOIT verwenden und einer Variable zuweisen.

    In der Art wie:
    $VARIABLE = "C:\UNIXTOOLS\grep WINDOWS C:\volname.txt | C:\UNIXTOOLS\gawk "{print $1}""

    So funktioniert es leider nicht. Ich habe unterschiedliche Zeichen zum Maskieren benutzt, aber ohne Erfolg.

    Hat jemand eine Idee, wie ich diesen Befehl einer Variable zuweisen kann?

    Vielen Dank im Voraus.
    Ivan

  • mach ja sehr viel in gnu-Tools, aber auf was willst Du raus:

    a, das war nur ein blödes Beispiel, Du brauchst was anderes als das Auslesen der Volume.txt Datei

    b, willst Du mit Autoit die lokalen Festplatten abarbeiten (um z.B. dadrauf ne Datei zu suchen)

    bei b ist es 10 mal einfacher gleich das in Autoit zu programmieren.
    (auslesen der lokalen Festplattennamen)
    ; ===lokale Festplatten??
    $LWS = DriveGetDrive( "fixed" )
    If NOT @error Then
    ; MsgBox(4096,"", "Found " & $var[0] & " drives")
    For $i = 1 to $LWS[0]
    _poutput($PSYSINFOINI,"LOCAL_DIR" & $i & "=" & $LWS[$i])
    Next
    EndIf


    Achtung _poutput ist eine weitere Funktion von mir!!

    Schreib mal genau, was Du machen willst.

    Grüße

    German

  • Hallo,

    danke für die Antworten.
    Eigentlich möchte ich Anhand des Volumenamens die Laufwerksbuchstaben ermitteln, weil diese auf den Maschinen unterschiedlich sind. Danach möchte ich in AUTOIT weitere Operationen auf den Laufwerken durchführen, dabei als Laufwerksbuchstabe eine Variable verwenden. Dann spielt es keine Rolle mehr welcher Lufwerksbuchstabe z.B. für das Volume "DATEN" zugeordnet ist.
    Man könnte genau so mit der Abfrage einer bestimmten Datei die Laufwerksbuchstaben ermitteln. Volumenamen erschienen mir sicherer, wenn z.B. eine Partition gar keine Dateien enthält.
    Mit dem WMIC-Befehl habe ich die Zuordnung Volumename zu Laufwerksbuchstaben in eine Datei geschrieben. Diese Datei war nicht zu verarbeiten, mit dem TYPE-Befehl habe ich die Ausgabe in die Datei "volname.txt" umgeleitet, diese Datei enthält die Volumeinformationen:

    Name VolumeName
    C: WINDOWS
    D: DATEN

    Ich möchte dann herausfinden mit welchem Laufwerksbuchstaben ich weitere Aktionen z.B. auf der Partition "DATEN" durchführen kann.
    Dazu habe ich die Unixtools "grep" und "gawk" eingesetzt. Der u.a. Befehl gibt mir den entsprechenden Laufwerksbuchstaben:

    C:\UNIXTOOLS\grep WINDOWS C:\volume.txt | C:\UNIXTOOLS\gawk "{print $1}"

    Aber in Autoit funktioniert es nicht. Vermutlich die Variable für den "gawk"-Befehl "$1" (bedeutet erste Spalte) macht Probleme in Autoit.

    GtaSpider ,
    Die Anweisung
    Run($Variable)
    gibt den kompletten Befehl als Text aus. Ich möchte aber, dass er wie im Kommandfenster ausgeführt wird.

    msp-holzwurm
    Fall b) trifft zu.
    Da ich mit Autoit nicht so vertraut bin, habe ich mit Windows-Tools versucht mein Problem zu lösen.
    Dein Script scheint mein Problem zu lösen. Es wäre sehr nett, wenn du die Funktion "_poutput" zur Verfügung stellen würdest.

    Vielen Dank.
    Gruss
    Ivan

  • das könntest du alles komplett in autoit machen

    ebenfalls auch die abfrage welche laufwerk passend heißt

    dieses scriupt gibt alle laufwerke und ihre bezeichnung in die console:

    Spoiler anzeigen
    [autoit]


    #include "string.au3"
    For $iDrive=67 To 90
    $sDrive=Chr($iDrive) & ":"
    If(DriveGetType($sDrive)<>"") Then
    ConsoleWrite($sDrive & "->" & DriveGetLabel($sDrive) & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit]

    oder wenn du alle haben willst die zb Daten heißen in ner MsgBox:

    Spoiler anzeigen
    [autoit]


    #include "string.au3"
    For $iDrive=67 To 90
    $sDrive=Chr($iDrive) & ":"
    If(DriveGetType($sDrive)<>"" And DriveGetLabel($sDrive)=="Daten") Then
    MsgBox("","",$sDrive & "->" & DriveGetLabel($sDrive) & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit]

    mfg

  • Hallo Ceenen,

    beide Scripte sind genial!
    Das 2. Script ist das was ich genau gesucht hatte.
    Nun kann ich alles mit AUTOIT erledigen, als Krücke brauche ich keine weiteren Tools mehr.

    Besten Dank und einen schönen Tag.
    Gruss
    Ivan

    PS: Wer ändert den Status der Themen von "offen" auf "gelöst"?
    Dieses Thema kann als gelöst markiert werden.