2010-07-06 21:29:58 +0000 2010-07-06 21:29:58 +0000
68
68

Aktuellen Ordnernamen mit einem DOS-Befehl abfragen?

Ist es möglich, den aktuellen Ordnernamen (nicht den aktuellen Verzeichnispfad) mit einem DOS-Befehl zu ermitteln? Wenn ja, wie?

Am nächsten kam ich mit dem folgenden Befehl, aber der bringt es nicht:

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

Hinweis: Bei dem obigen Versuch habe ich versucht, die Zeichenfolge zu tokenisieren und das letzte Token als CURR-Variable zu erhalten.

Antworten (9)

95
95
95
2010-07-06 22:27:07 +0000

Der kürzeste Weg, den ich gefunden habe:

for %I in (.) do echo %~nxI

oder innerhalb eines .bat-Skripts:

for %%I in (.) do echo %%~nxI

oder in .bat mit Wert in Variable holen.

for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%

Erläuterung: http://www.robvanderwoude.com/ntfor.php

nx bedeutet nur Dateiname und Erweiterung

31
31
31
2010-08-07 14:55:35 +0000

Wenn Sie den aktuellen Speicherort der Batch-Datei wissen wollen (und wenn Ihr Windows noch nicht sehr alt ist), geben Sie for /? in ein ‘DOS-Box’-Fenster ein. Scrollen Sie nach unten. Lesen Sie.

Sie werden feststellen, dass Sie nun (aus innerhalb der Batchdatei) diese Variablen lesen können:

%0 - as the name how this batchfile was called
%~d0 - as the drive letter where this batchfile is located ('\' in case of share)
%~p0 - as path (without the drive letter) where this batchfile is located
%~n0 - as filename (without suffix) of this batchfile
%~x0 - as filename's suffix (without filename) of this batchfile
%~a0 - as this batchfile's file attributes
%~t0 - as this batchfile's date+time
%~z0 - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]

Das funktioniert in vielen Fällen. Angenommen, die Batchdatei heißt mytest.bat. Sie können sie auf verschiedene Arten aufrufen:

  1. ..\..\to\mytest.bat …………………………. (relativer Pfad)
  2. d:\path\to\mytest.bat ……………………… (vollständiger Pfad)
  3. \fileserver\sharename\mytest.bat(Pfad auf entfernter Freigabe)

…und Sie erhalten immer den richtigen Wert in Ihren Variablen.

16
16
16
2011-11-17 09:20:12 +0000

Ich persönlich mochte Toms Antwort, bis er mit Punkten in Dir-Namen kämpfte. Dieses ](http://forums.devshed.com/windows-help-34/finding-last-token-in-batch-file-412970.html) gab mir einen Hinweis:

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
5
5
5
2013-08-06 13:11:55 +0000

Toms Antwort ist gut, aber wenn Sie einen Verzeichnisnamen mit einem Punkt darin haben (z. B. wxwidgets-2.9.4), erhalten Sie nur den vollständigen Namen. Dies würde also stattdessen wxwidgets-2.9 ausgeben, weil die .4 als Erweiterung behandelt wurde (Ja, obwohl es ein Verzeichnisname ist!).

Um den vollen Ausgabennamen zu erhalten, müssen Sie die Erweiterung an das Ende anfügen:

FOR %I IN (.) DO Echo %~nI%~xI

und im Batch-Dateimodus:

FOR %%I IN (.) DO Echo %%~nI%%~xI

Oder natürlich stattdessen eine Variable in der Batch-Datei setzen:

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
4
4
4
2012-03-15 10:19:31 +0000

Eine andere Möglichkeit ist:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%

Es funktioniert mit “.” und Leerzeichen im Pfadnamen

Was macht es?

  1. den ganzen Dateinamen (Laufwerksbuchstabe-Pfad-Dateinamen-Erweiterung) in MyPath Var

  2. den Dateinamen und die Erweiterung aus MyPath var

entfernen Es funktioniert auch mit UNC-Pfaden. Wenn Sie den Backslash am Ende des Pfades benötigen. Entfernen Sie das `Eine andere Möglichkeit ist:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%

Es funktioniert mit “.” und Leerzeichen im Pfadnamen

Was macht es?

  1. den ganzen Dateinamen (Laufwerksbuchstabe-Pfad-Dateinamen-Erweiterung) in MyPath Var

  2. den Dateinamen und die Erweiterung aus MyPath var

entfernen Es funktioniert auch mit UNC-Pfaden. Wenn Sie den Backslash am Ende des Pfades benötigen. Entfernen Sie das nach MyPath im zweiten Set-Befehl, z. B.

set "MyPath=%%MyPath:%~nx0=%%"
4
4
4
2012-04-24 15:54:31 +0000

Sie können das aktuelle Dir in eine Variable holen. Einzeiler:

set a=%cd%

Prüfen mit

echo %a%
2
2
2
2016-10-10 02:11:12 +0000

einfach

for %%d in ("%CD%") do echo %%~nxd

oder

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

Achten Sie auf den Backslash am Ende des Pfades, es darf kein Backslash am Ende sein.

1
1
1
2011-12-07 18:59:40 +0000

Meine Antwort in diesem Thread macht es in 3 einfachen Zeilen:

@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul
1
1
1
2015-05-28 16:08:10 +0000

Dies funktioniert bei mir von einer Batch-Datei aus. Es gibt den Namen des aktuellen Arbeitsverzeichnisses zurück.

pushd %1 & for %%i in (.) do @echo %%~ni