Aktuellen Ordnername in Variable Speichern CMD?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.


Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Jklas2011 
Fragesteller
 20.04.2022, 16:58

Die ersten beiden funktionieren schonmal nicht. EDIT: Sorry ich habe es nur in der CMD getestet und nicht in einer Batchdatei

1
Erzesel  20.04.2022, 18:27
@Jklas2011

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.

0
%CD%

liefert das aktuelle Verzeichnis,

%~pI

das Verzeichnis, aus dem dem heraus die Batch Datei gestartet wurde.

Guggsdu:

set /?

und

for /?
Jklas2011 
Fragesteller
 14.04.2022, 17:25

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)

0