[batch] Verzeichnisnamen aus Pfad auslesen


Joerg66

Erfahrenes Mitglied
#1
Hallo,
ich übergebe einen Pfad an eine batch und brauche zur Weiterverarbeitung den Namen des Verzeichnisses.
Also, Pfad = U:\Daten\MessungSiemens
und ich brauche = MessungSiemens
Mit folgendem bekomme ich das "U:" wie kann ich von rechts nach links arbeiten?

Code:
@echo off  & setlocal 
set "String=%1" 
echo %string%
set "Zeichen=\" 
for /f "delims=%Zeichen%" %%i in ("%String%") do set "Verzeichnis=%%i" 
echo %Verzeichnis%
pause
Wäre für einen Tritt sehr dankbar :)
 

Joerg66

Erfahrenes Mitglied
#3
Vielen Dank für deine Antwort, doch als ich den Code eingesetzt hatte, bekam ich nur einen Syntaxfehler -ganz tolle Antwort von der bash, ein "wo" wäre ja nett gewesen . . .
Nun ja, ich habe dann natürlich Fehler gesucht . . . . und nicht gefunden, gemeckert hat er in der "if . . ." Zeile.
Naja, jedenfalls hast du mich auf die Lösung gebracht, ein simples:

Code:
set "basename=%~nx1"
macht schon ganz genau was ich haben will :)
Oder kann dabei etwas passieren, was ich nicht bedenke, beachte oder gefunden habe?
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
#4
Vielen Dank für deine Antwort, doch als ich den Code eingesetzt hatte, bekam ich nur einen Syntaxfehler -ganz tolle Antwort von der bash, ein "wo" wäre ja nett gewesen . . . Nun ja, ich habe dann natürlich Fehler gesucht . . . . und nicht gefunden, gemeckert hat er in der "if . . ." Zeile.
Du hast offenbar einen Pfad mit Quotes übergeben. Ersetze mal Zeile 6 mit
Code:
set basename=%~1
\nachtrag: und Zeile 8 mit
Code:
    call :basename "%basename:~0,-1%"
Naja, jedenfalls hast du mich auf die Lösung gebracht, ein simples:

Code:
set "basename=%~nx1"
macht schon ganz genau was ich haben will :)
Oder kann dabei etwas passieren, was ich nicht bedenke, beachte oder gefunden habe?
Das Problem ist das es nicht funktioniert wenn du einen Backslash ans Ende des Pfades schreibst, dann bekommst du nur einen leeren String.
 
Zuletzt bearbeitet:

Joerg66

Erfahrenes Mitglied
#5
Das kommt nicht vor, da ich des Verzeichnis mit gdrückter LM auf die batch ziehe, die auf dem Desktop liegt.
Die ganze batch sieht jetzt so aus, nur für leute, die so mal ein Verzeichnis packen wollen und der Dateiname dann "Verzeichnis.7z" sein soll.

Code:
@echo off  
rem aus dem Übergebenen Pfad den Verzeichnisnamen auslesen
set "Programmnummer=%~nx1"

rem Ziel-Pfad zusammenbauen
set "Ziel=D:\Prog\upload\%Programmnummer%.7z"

rem Übergebenen Pfad in Variable >Quelle< speichern
set "Quelle=%1"

rem Anführungszeichen am Anfang und Ende entfernen und das Zeichen "\" anhängen
for /f "useback tokens=*" %%a in ('%Quelle%') do set Quelle=%%~a\

rem .7z Datei erzeugen
start "" "C:\Program Files\7-Zip\7z.exe" a -t7z "%Ziel%" "%Quelle%"