per Batch ersten Filename aus Ordner auslesen

  • Hallo Leute,
    ich bin gerade an einem batchfile dran, dass mir Frame-Sequenzen in mp4 umwandeln soll. Das ganze soll am Ende so ablaufen, dass ich nur noch den Ordner auf das Batchfile ziehen muss. String in Name und Extension splitten klappt schon... Momentan hänge ich aber noch dran, den Sourcefile Name zu ermitteln. Das heißt ich muss an den ersten Filename im Ordner ran kommen.

    Habt ihr eine Idee wie ich das hin bekomme?

    Grüße

    jb_

  • ich hatte ein ähnliches problem in meinen surun extentions, um den aktuellsten java ordner zu ermitteln
    letzendlich ist es ein 'DIR'- befehl mit filteroptionen verpackt in einer 'FOR'-schleife

    hier mein code schnipsel

    Zitat

    for /F "delims=" %a in ('dir * /B /AD /O-D') do set xJarDir=%CD%\%a\bin 2>nul

  • Habe da jetzt was, was auch so funktioniert, aber ich denke vom Code her wäre da ein Wurm drin.

    Code
    @echo off  for /F %%a in ('dir %1 /b ') do (     set file= %%a  )  echo.%file%set ext=%file:~-4%echo.%ext%call set name=%%file:%ext%=%%echo.%name%set newname=%name:~0,-4%echo.%newname%set "var=%newname%%%4d%ext%"echo.%var%pause>nul

    Ziehe ich ein Ordner auf das Batch, wird mir die letzte Datei ausgeben. Stört mich jetzt prinzipiell nicht, da ich mit diese genau so arbeiten kann. Würde mich aber trotzdem mal interessieren, warum er das macht.

    Edit:

    Hier noch mal der ganze Code, falls mal wer was Ähnliches machen will.

    Ist jetzt halt drauf ausgelegt, dass die Image Sequenzen immer 4stellige Zahlen, anfangend bei 0, haben.

  • Da hast du bei dem Trick was entscheidendes vergessen: Das Sortieren der DIR-Ausgabe in absteigender Richtung. "Die letzten werden die ersten sein" - in der FOR-Schleife wird die Variable mit allen Dateinamen der Reihe nach überschrieben, so dass sie am Ende den letzten Namen behält. Du musst also dafür sorgen, dass der "erste" Dateiname als letztes in die Variable kommt.

  • Doch, das geht.

    In einer Batch-Datei (da muss man für FOR-Variablen das Prozent verdoppeln) etwa so:

    Code
    @echo off
    for /f "usebackq" %%f in (`dir /b /a:-d /o:-ne`) do set %File%=%%f
    echo Erste Datei ist %File%

    Folgende DIR-Parameter sind notwendig:

    • /b = nur die reinen Dateinamen ohne Größe oder Zeit
    • /a:-d = Attribute: Keine Verzeichnisse {directories}, nur Dateien
    • /o:-ne = Reihenfolge {order}: absteigend (minus) nach Name und Erweiterung
  • Ich danke Dir LigH für Deine Mühe! Habe es nochmal etwas abändern müssen, damit es so funktioniert wie ich es möchte. Der Code schaut nun so aus:

    Code
    @echo off
    for /f "usebackq" %%f in (`dir %1 /b /a:-d /o:-ne`) do set File=%%f
    echo Erste Datei ist %File%

    Ohne zusätzliches %1 ging es nicht, da ansonsten der Ordner drüber genommen wurde. "do set %File%" hab ich noch in "do set File" geändert, da hier die % wohl an der falschen Stellen waren.
    Jetzt habe ich nur noch das Problem, dass Filenamen, sobald ein Leerzeichen kommt, abgeschnitten werden. Muss mal schauen, wie ich das noch in den Griff bekommen.

  • Zitat

    Ohne zusätzliches %1 ging es nicht, da ansonsten der Ordner drüber genommen wurde


    na klar kann es nicht funktionieren
    entweder man wechselt vorher ins arbeitsverzeichnis, oder man gibt 'dir', das zu untersuchende verzeichnis direkt an

    wenn man nichts angibt, dann wird das aktuelle verzeichnis genommen
    (geöffetes verzeichnis im explorer, bzw. aktueller ort im CMD)

    ich gebe immer zubeginn des scrips den arbeitsfad an

    Code
    @echo offcd /d "%~dp0"[COLOR='#808080'] ;arbeitsverzeichnis vom script selber[/COLOR]...
    Code
    @echo offcd /d "%~dp1"[COLOR='#808080'] ;eingabe von datei[/COLOR]...
    Code
    @echo offcd /d %1[COLOR='#808080'] ;eingabe von verzeichnis[/COLOR]...

    cd /d "%~dp0" ist eigendlich unnötig,
    aber wenn wenn ich scripte mit 'call' kombiniere,
    dann brauch ich die relativen pfade nicht mehr anpassen

    [edit:]
    ich hatte mal n codeschnipsel zusammengezimmert,
    der geprüft hat ob die eingabe (%1) ein verzeichnis oder eine datei ist
    kann ihn aber nicht mehr finden :(

    Code
    @echo off
    cd /d "%~dp1" 2>nul
    cd /d %1 2>nul
    ...

    es kann so einfach sein,
    solange probieren bis man drin ist und fehlermeldungen ausblenden :P

    damit ist es egal ob man eine datei oder dessen arbeitsverzeichnis auf das script zieht... :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!