Aktuellen Ordnername in Variable Speichern CMD?
Hallo. Ich möchte den Aktuellen Ordnername in einer Variable Speichern. Dies sollte eine Batchdatei sein.
Also:
Wenn ich im Ordner-Path: "H:\MamaPapaKuchen" wäre, möchte ich, dass in der Variable "MamaPapaKuchen" Steht.
Alternativ:
Wenn ihr es könnt, könnt ihr mir auch einfach Schreiben wie man einen Ordner kopiert ohne dass ich im Zielpath den Ordnername angeben muss. Also: Dass ich Den Ordner "Kuchen" nach "H:\" kopieren möchte ohne dass ich "H:\Kuchen" Angeben muss.
2 Antworten
relativ simpel.
Die ParameterVariable %%~nxV (V steht für den Buchstaben der For-Loop-Laufvariable) oder %~nx1 (1 steht für die Position der übergebenen Call-Parameters) gibt dem letzten Teil eines Pfades zurück.
Das ist normalerweise ein name.Extension einer Datei. Da %cd% jedoch leidlich einen Ordnerpfad übergibt, ist wird der OrdnerName gefiltert. die Extension wäre dann einfach Teil des Ordnernamen (auch Ordnernamen können Punkte enthalten).
demo1.cmd
for %%a in ("%cd%") do (set "currendFolderName=%%~nxa")
echo Der Name des aktuellen Ordners ist: "%currendFolderName%"
pause
...oder du schickst den Pfad an eine Subroutine:
demo2.cmd
call :GetFolderName "%cd%"
echo Der Name des aktuellen Ordners ist: "%currendFolderName%"
pause
exit /b
:::: Subroutines ::::
:GetFolderName
set "currendFolderName=%~nx1"
exit /b
Für eine einmalige Verwendung ist eine Subroutine eindeutig überdimensioniert. brach man das Ganze jedoch öfter in einem Script und mit verschiedenen Zielvariablen erweist sich eine Subroutine wie die folgende durchaus als zweckmäßig:
demo3.cmd
@echo off
echo ich bin jetzt in "%cd%"
rem speichere den Namen des jetzigen Ordners in der Variable %Name1%
call :GetFolderName "%cd%" Name1
echo Der Name des aktuellen Ordners ist: "%Name1%"
rem wechsle zum Desktop
cd /d "%UserProfile%\Desktop"
echo ich bin jetzt in "%cd%"
call :GetFolderName "%cd%" Name2
echo Der Name des aktuellen Ordners ist: "%Name2%"
rem gehe zum übergeordneten Ordner
cd ..
echo ich bin jetzt in "%cd%"
rem speichere den namen des jetzigen Ordners in der Variable %andereVariable%
call :GetFolderName "%cd%" Name3
echo Der Name des aktuellen Ordners ist: "Name3%"
rem und so weiter
echo:
echo Ich war schon in "%Name1%" , "%Name1%" und "%Name3%"...
pause
exit /b
:::: Subroutines ::::
:GetFolderName
set "%~2=%~nx1"
exit /b
Was Du verwendest bleibt Dir überlassen.
Direkt in der Console verwendet man einfache %-Zeichen statt %%.
Console dirkt:
for %a in ("%cd%") do (set "currendFolderName=%~nxa")
...und call :Subroutine ist nur in Batch verfügbar.
%CD%
liefert das aktuelle Verzeichnis,
%~pI
das Verzeichnis, aus dem dem heraus die Batch Datei gestartet wurde.
Guggsdu:
set /?
und
for /?
Nicht gerade hilfreich. Ich weiß nicht ob du es Verstanden hast, dass ich nur den Ordner namen haben möchte, NICHT den Path davor. Und dein "%~pI" funktioniert überhaupt nicht. (Bzw. Die Batchdatei stürzt ab)
Die ersten beiden funktionieren schonmal nicht. EDIT: Sorry ich habe es nur in der CMD getestet und nicht in einer Batchdatei