# [batch] Verzeichnisnamen aus Pfad auslesen



## Joerg66 (4. Juni 2013)

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?


```
@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


----------



## deepthroat (4. Juni 2013)

Hi.

Du kannst dafür den call Befehl verwenden:

```
call :basename %1
echo.name = %basename%
goto :eof

:basename
  set basename=%1
  if "%basename:~-1%" == "\" (
    call :basename %basename:~0,-1%
  ) else (
    set basename=%~nx1
  )
goto :eof
```

 "help call"

Ansonsten, siehe http://www.dostips.com/DtTipsStringManipulation.php


----------



## Joerg66 (5. Juni 2013)

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:


```
set "basename=%~nx1"
```

macht schon ganz genau was ich haben will 
Oder kann dabei etwas passieren, was ich nicht bedenke, beachte oder gefunden habe?


----------



## deepthroat (5. Juni 2013)

Joerg66 hat gesagt.:


> 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

```
set basename=%~1
```
\nachtrag: und Zeile 8 mit

```
call :basename "%basename:~0,-1%"
```



Joerg66 hat gesagt.:


> Naja, jedenfalls hast du mich auf die Lösung gebracht, ein simples:
> 
> 
> ```
> ...


Das Problem ist das es nicht funktioniert wenn du einen Backslash ans Ende des Pfades schreibst, dann bekommst du nur einen leeren String.


----------



## Joerg66 (5. Juni 2013)

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.


```
@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%"
```


----------

