Hallo Besucher, der Thread wurde 4,6k mal aufgerufen und enthält 12 Antworten

letzter Beitrag von Pf@nne am

Unterstützung bei Batch-File-Erstellung

  • Moin,



    ich bin in der Verlegenheit einen Batch-File für das umkopieren von Files zu erstellen.



    Was soll der Batch können:

    • Auslesen der vorhandenen Verzeichnisse in einem vorgegebenen Verzeichnis (nur die erste ebene ohne Unterverzeichnisse)
    • Anzeigen der ausgelesenen Verzeichnisse mit führender Nummerierung
      [1] DIR01
      [2] DIR02
      [3] ...
    • Einlesen des Tastendrucks z.B. "2"
    • Start des Kopiervorgang mit Verwendung des ausgewählten Verzeichnisnamens als Variable
      copy c:\test\%DIR%\myFile.txt c:\

    Jetzt habe ich versucht
    mich ein wenig in die Batchfileerstellung einzulesen, bin aber schon an
    der Syntax der FOR-Schleife kläglich gescheitert.



    Meine Frage wäre, ob mir ein sehender Batchler... hier unter die Arme greifen könnte.


    Ein wenig habe ich schon geschafft:


    Ausgabe:

    Code
    1. [1] DEMO_GPIO
    2. [2] DEMO_I2C_OW
    3. [3] lightSensor
    4. [4] simpleSwitch
    5. [5] SWA1
    6. Es wurden 5 Verzeichnisse gefunden.
    7. Welches Device soll geladen werden?
    8. 4
    9. Verzeichnis #4


    Wie kann ich es jetzt erreichen, dass Verzeichnis 4 "simpleSwitch" in eine Variable geschrieben wird?
    Vielleicht die Schleife nochmal durchlaufen lassen und bei 4 abbrechen?



    Jemand eine eine weiterführende Idee?



    Gruß
    Pf@nne

  • Ich weiss, das willst Du wahrscheinlich nicht hoeren, aber willst Du es nicht versuchen mit Powershell?
    Ich habe selbst auch lange gezadert, aber mittlererweile mache ich alles, was mehr als fixe Dateien kopieren ist, automatisch in PS.


    Das was Du da willst:

    • Auflistung der Verzeichnisse OHNE die Punkt Verzeichnisse (DIR /AD zeigt die an)
    • Nummerierung von Zeilen in einem bestimmten Format (ja mit FOR-> dazu musst du das DIR in eine Datei umleiten und dann zeilenweise auslesen)
    • Tastendruck entgegen nehmen als EIngabe (kann man machen durch Tastendruck in eine Datei umleiten und dann per Vergleich und FOR Schleife das Verzeichnis finden)
    • Schreiben eines Verzeichnisnames in einer Variable (ich meine das geht mich ECHO oder Pipeing)

    sind typische Programmieraufgaben eines Admins und klar kann man das irgendwie auch in CMD loesen, aber will man diese ums Verrecken damit machen? Der "Code" wird oft unleserlich und damit fuer Andere oder Dir selbst nach einer Weile unwartbar werden.

  • Hier mal ein Powershell Script.


  • Ja. Und wenn es Batch-iger werden soll, nur mit ordentlichen Befehlen, würde ich TCC/LE empfehlen. Das hat sogar ein Auswahlkommando, das die per Cursor getroffene Auswahl auf Befehle oder Befehlsgruppen anwendet. Und, es ist syntaxmäßig erstmal Batch-kompatibel, bietet aber erweiterte Konstrukte an, was gerade Schleifen lesbarer macht. Hab damit in letzter Zeit wieder einige Automatisierungen gemacht.

  • Nö, TCC/LE ist konsolig (und kostenlos).
    Der kostenpflichtige "große Bruder", TakeCommand,
    ist mehr so terminalig. :-D
    Nur die Hilfe ist dann in einem Windows-Fenster,
    nicht in einem Textmode-Overlay.

  • Ich habe mir heute mit Powershell das WinSCP Automation DLL eingebunden, um Backup Dateien eines Cloud-basierdenden Systems per FTPES runterzuladen.
    Der eigentliche "GetFiles" Teil ist eine einzige Zeile.


    Ich kann mich an Batchdateien bei den Kunden erinnern, die haben z.B. auch Debi-Belege per ftp und CMD zwischen ERP und ein SAP System hin- und her übertragen.
    Klar es geht, aber Exceptionhandling ist dann ein Drama per Batch.

  • Moin,


    erst mal vielen Dank für die Anregungen!!
    Ich freue mich, dass ich hier richtig bin!!


    PowerScript scheint mir auch die deutlich bessere Wahl zu sein, zumal mir unter ATOM/PlatformIO PS auch sofort zur Verfügung steht.


    @syshack
    Ich werde mir deinen Scriptvorschlag nachher näher anschauen.


    Ich hoffe weiterhin auf eure Unterstützung!


    MfG
    Pf@nne

  • Hi,
    hier ein Batchskript. Bin aber auch der Meinung, besser auf Powershell zu setzen. Mit dem .Net Framework hat man erheblich mehr Vielfalt und vorgefertigte Templates als mit der Batch.


    Die Variable ReadFolders entsprechend anpassen.


  • So viel Code! 8|
    Der Vollständigkeit halber in TCC/LE:



    select /1 /A:D set verzeichnis=(c:\test\*)
    copy %verzeichnis%\myFile.txt c:\



    Incl. Cursorsteuerung.

  • Is das aber nicht cheaten?
    Ohne die TCC/LE Syntax zu kennen, ich sehe hier keine Auswahl an verschiedenen Verzeichnissen in Deinem Snipplet.
    Ich nehme mal an, das SELECT wartet auf eine Benutzereingabe?

  • Genau! :-)


    Das listet die in Frage kommenden Verzeichnisse auf,
    man kann mit Cursor oder Maus eine Auswahl treffen
    (in diesem Fall nur eine, in anderen Anwendungsfällen
    wäre auch eine Mehrfachauswahl möglich), und auf diese
    Auswahl wird das Kommando angewendet. Der Umweg
    über SET ist leider notwendig, weil ein Wildcard in der
    Mitte des Filespec-Pfades nicht interpretiert wird, daher
    hier auch keine Mehrfachauswahl möglich (nach der
    obigen Beschreibung aber auch nicht erforderlich).


    Cheaten? Naja! :-D
    Eben nicht alles zu Fuß machen müssen...

  • Ich hab das jetzt per Batch gelöst......
    Das Problem mit TCC/LE ist, dass das Script auch auf diversen anderen Rechnern laufen muss ohne vorher TCC/LE zu installieren.
    Daher ist ein Batch-File am universellsten.


    In jedem Fall danke ich euch für die tatkräftige Unterstützung und die vielen Vorschläge!