Batch: Datei mit variablem Namen öffnen

Es gibt 10 Antworten in diesem Thema, welches 4.669 mal aufgerufen wurde. Der letzte Beitrag (10. August 2015 um 14:24) ist von 1ST1.

  • Moin,
    ich will eine update.bat schreiben, in welcher eine Datei nicht immer den gleichen Namen hat (Virenscanner xdat)
    Die Dateien befinden sich auf einem Wechselmedium also bei mir gerade F:\ ich vermute aber, wenn ich den an einen anderen PC anschließe, dass sich der Laufwerksbuchstabe ändern würde.
    Da es sich um 2 .exe Dateien handelt, habe ich einen weiteren Ordner angelegt, in welchem sich die .exe mit dem variablen Namen befindet.
    Zur Zeit heißt die Datei 7884xdat.exe
    das einzige, was sich wohl langfristig nicht ändert ist die 7***xdat.exe aber wie sagt man das der Batchdatei?

    Bisher habe ich das so gemacht:

    Code
    start "" "blabl.exe"
    start "\bat\*.exe"
    pause


    Hab das jetzt schon in den verschiedensten Variationen probiert.

    Code
    for %%i in "\bat\*.exe" do start


    (den hier hab ich nun gegoogelt...


    Geht das überhaupt irgendwie?
    Wirklich Ahnung habe ich nicht von Batch. Ich weiß, dass man das unter Linux so machen kann... aber bei ner batch?!

    Vielen Dank schon mal!

  • Zitat

    Zur Zeit heißt die Datei 7884xdat.exe
    das einzige, was sich wohl langfristig nicht ändert ist die 7***xdat.exe aber wie sagt man das der Batchdatei?


    also ich mache das bei meinem Update-Script einfach mit einer Umbenennung des Filenamens (siehe unten, Zeile8 ).
    Auch eine Copy wäre denkbar, allerdings nicht so performant.
    Bei Dir müßte Zeile 8 dann (jetzt mal ungeachtet vom Rest des Scriptes) so heißen:

    Code
    ren *xdat.exe xdat_LuxOculus.exe


    EDIT: vorausgesetzt, Du hast in dem Ordner nur EINE 7XXXxdat.exe liegen, aber DAS kann man ja regeln bzw. im Script abfangen ....
    Nach dem RENAME kannst Du dann mit xdat_LuxOculus.exe weiterarbeiten ;)

    Viele Grüße,
    GI-Joe
    Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen.

  • Wo kriegst du denn diese sdat überhaupt her?? Ich kann nur diese 7***xdat.exe runterladen.
    Aber danke! Das ist ja schon mal eine gute Lösung.

  • Nun wäre ja für den Benutzer noch schön zu wissen, ob er den Stick wieder ziehen kann... (weil ich das nicht selber mache)
    If exist SuperDAT.log
    macht da auch keinen Sinn... denke ich mal...
    Kann man irgendwie fragen, ob der Updateprozess noch läuft? Wenn nein - dann msgbox oder sowas?
    Ich merk schon ^^ gefährliches Halbwissen :P

  • Wegen der unterschiedlichen Laufwerksbuchstaben zwei Tipps:

    1. in der Systemvariable %CD% steht der aktuelle Pfad, das ist nützlich, wenn du die Batch vom Wechselmedium startest. Mittels diverser String-Funktionen die ich bis heute nicht verstanden habe :( kann man da auch z.B. den ersten Buchstaben extrahieren.

    2. Das Laufwerk ermitteln, auf dem eine Datei liegt:

    Code
    set pfad=pfad\dateiname.ext
    for %i in (a: b: c: d: e: f:) do (
      if exist %i\%pfad% echo Datei auf Laufwerk %i gefunden
    )

    Alternativ:

    Code
    set pfad=pfad\dateiname.ext
    for %i in (a b c d e f) do (
      if exist %i:\%pfad% echo Datei auf Laufwerk %i gefunden
    )

    Die Laufwerksliste in der Klammer kannst du bis z: erweitern, bin dafür nur zu schreibfaul. Kannst auch Laufwerksbuchstaben weglassen, die auf jeden Fall nicht in Betracht kommen. Nachteil an der Methode: System fordert, ein Medium in leere Laufwerke einzulegen, wenn sie angesprochen werden. Damit ist Benutzereingriff erforderlich.

    3. Kann auch nützlich seiin: in %0 steht der Dateiname der ausgeführten Datei, kann evtl nützlich sein, ich nutze das ab und zu, in dem ich eine Batch schreibe, die sich in Abhängigkeit ihres Dateinamens anders verhält. So brauche ich nur eine Batch zu pflegen und mache dann Kopien unter verschiedenen Namen.

    Mal hier, mal da, mal dort. Aber auf jeden Fall auf der Bitte melde dich an, um diesen Link zu sehen.! Und hier Bitte melde dich an, um diesen Link zu sehen.!

  • Wo kriegst du denn diese sdat überhaupt her?? Ich kann nur diese 7***xdat.exe runterladen.

    oh, mein Script und somit meine Filenamen sind wohl veraltet :whistling:

    falls Du nur die dat-files brauchst - die gibts hier: Bitte melde dich an, um diesen Link zu sehen.
    Im script sieht der download-Befehl für alle kommenden Versionen dann so aus:

    Code
    @wget --progress=bar:force --passive-ftp ftp://ftpeur.nai.com/pub/antivirus/datfiles/4.x/avvdat*.tar


    (Hier ab und zu mal checken, ob das Filenamenschema auch gleich geblieben ist :whistling: )

    Unter Linux funzt dat so, unter Windows brauchst Du dafür das Tool Bitte melde dich an, um diesen Link zu sehen. (befindet sich im UnxUtils.zip).

    Viele Grüße,
    GI-Joe
    Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen.

  • Zitat

    falls Du nur die dat-files brauchst - die gibts hier: Bitte melde dich an, um diesen Link zu sehen.
    Im script sieht der download-Befehl für alle kommenden Versionen dann so aus:

    Code
    @wget --progress=bar:force --passive-ftp ftp://ftpeur.nai.com/pub/antivirus/datfiles/4.x/avvdat*.tar


    (Hier ab und zu mal checken, ob das Filenamenschema auch gleich geblieben ist :whistling: )

    Das TAR-Archive hat den Vorteil: hier weißt Du, wann das Enpacken fertig ist und kannst es besser ins Script mit einbauen bzgl. "STICK ENTFERNEN" ;)

    Viele Grüße,
    GI-Joe
    Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen. * Bitte melde dich an, um diesen Link zu sehen.


  • Kann man irgendwie fragen, ob der Updateprozess noch läuft? Wenn nein - dann msgbox oder sowas?

    Code
    tasklist | find "prozessname.exe"
    if %errorlevel%==1 echo Prozess läuft nicht.

    Wichtig: Der Errorlevel muss direkt nach dem find-Befehl folgen, weil andere Befehle den Errorlevel wieder ändern !

    Mal hier, mal da, mal dort. Aber auf jeden Fall auf der Bitte melde dich an, um diesen Link zu sehen.! Und hier Bitte melde dich an, um diesen Link zu sehen.!

  • Ich lade die Update-Datei hier auf meinem Rechner, verteile sie auf 3 Sticks und gebe sie den Anwendern um ihre Notebooks damit zu versorgen (ohne Internetverbindung)
    Und die sollen wissen, wann das Update abgeschlossen ist.
    Es gibt die Funktion /SILENT - da sieht man nicht den Installationsassistenten. Was vielleicht für die "Vielklicker" von vorteil wäre...
    Also eigentlich müsste ich wissen, ob das Update abgeschlossen ist und dann soll sich der Stick melden...
    Es kann auch sein, dass der davor ausgeführte Skript noch läuft. Also müsste ich eigentlich 2 Prozesse abfragen, wenn sowas geht.

  • Moin,
    ich habe gedacht, ich poste hier dann auch mal die Lösung zu meinem Problem :wink:
    Vielen Dank noch mal für die Hilfe!

    Ja wahrscheinlich kann man das auch noch hübscher schreiben, aber so machen die Anfänger das :P
    Ist auch noch etwas verdreht von der Benamung her. Hatte das vorher andersherum gestartet :wink:

  • Wenns ja läuft, ist es gut. Aber 2 Fragen hätte ich da... Warum setzt du den Errorlevel über ein Ping zurück? Die nächste Suche nach dem Task tut das ohnehin. Oder geht es dabei eher um eine kleine Warteschleife? Und was man sich auf jeden Fall angewöhnen sollte, die Errorlevel-Abfrage direkt nach dem auslösenden Befehl zu machen, und kein REM dazwischen. Und wenn du eine Ausgabeumleitung nach >nul machst (statt >null) dann brauchst du hinterher die Datei null nicht zu löschen. Das Goto in Zeile 4 kannst du auch sparen, weil der Sprunglabel direkt dahinter folgt. Zeile 22 ebenso. Was soll in Zeile 21 das doppelte Anführungszeichen?

    Mal hier, mal da, mal dort. Aber auf jeden Fall auf der Bitte melde dich an, um diesen Link zu sehen.! Und hier Bitte melde dich an, um diesen Link zu sehen.!