Ich hatte letztens mal drüber geschrieben: mit erweiterten Stringoperationen kommt man leicht an Dateinamen, Endung, Ordner, Pfade, Dateieigenschaften und Ähnliches.
Ich möchte gerne die Aussagen und den Code korrigieren. Ich hatte folgendes vorgeschlagen:
Dieser Code ist unsicher, lest weiter unten für einen zuverlässigeren Code!
:: nur der Dateiname (ohne .ext) for %%a in (C:\test\geheim.txt) do set 1=%%~na :: -> geheim :: funktioniert auch mit Ordnern for %%a in (C:\test\ziemlich\geheim) do set 1=%%~na :: -> geheim
Letzte Datei und Ordner lassen sich so herausfinden. Ist auch korrekt, hat aber 2 Fehlerpotentiale:
Man sollte natürlich den Pfad, den man auswertet, in Gänsefüße stecken! Ansonsten gibt es nämlich Fehler sobald der gesuchte letzte Part (Dateiname/Ordnername) ein Leerzeichen enthält. Bei erweiterten Stringoperationen mit FOR sollte man doppelte Gänsefüße verwenden obwohl man sonst ja bei FOR Befehlen einfache nutzen sollte. Hier kommt es teilweise aber vor, dass im Ergebnis ein einfaches mit reingerät (“ geheim‘ „), was nicht gewollt ist. Doppelte Anführungsstriche sind hier zuverlässiger.
Ebenfalls wird es problematisch wenn man den letzten Ordnernamen sucht und dieser aber ein Punkt enthält („C:\Windows 3.1\“). For erkennt den Punkt und denkt, dass es sich um eine Datei handelt. Also gibt der Befehl „Windows 3“ zurück, dabei soll es „Windows 3.1“ zurückliefern.
Lösung:
:: Datei mit Anführungsstrichen und %%~n suchen! for %%a in ("C:\test\geheim.txt") do set 1=%%~na :: -> geheim :: den letzten Ordner immer mit Anführungsstrichen und %%~nx suchen! for %%a in ("C:\test\ziemlich\geheim 9.1") do set 1=%%~nxa :: -> geheim