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

Uzyskać bieżącą nazwę folderu za pomocą polecenia DOS?

Czy możliwe jest uzyskanie nazwy bieżącego folderu (nie bieżącej ścieżki katalogu) za pomocą polecenia DOS? Jeśli tak, to w jaki sposób?

Najbliższe temu było to, ale nie działa:

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

Uwaga: powyższa próba była moją próbą tokenizacji łańcucha i uzyskania ostatniego tokena ustawionego jako zmienna CURR.

Odpowiedzi (9)

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

Najkrótszy sposób jaki znalazłem:

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

lub w skrypcie .bat:

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

lub w .bat z Get value in variable.

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

Objaśnienie: http://www.robvanderwoude.com/ntfor.php ](http://www.robvanderwoude.com/ntfor.php)

nx oznacza tylko nazwę pliku i rozszerzenie.

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

Jeśli chcesz znać aktualną lokalizację pliku wsadowego (i jeśli twój Windows nie jest bardzo starym wydaniem), wpisz for /? w oknie ‘DOS box’. Przewiń w dół. Przeczytaj.

Dowiesz się, że możesz teraz odczytać (z wewnątrz pliku wsadowego) te zmienne:

%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 ...]

To działa w wielu przypadkach. Załóżmy, że plik wsadowy nazywa się mytest.bat. Możesz go wywołać na różne sposoby:

  1. ..\..\to\mytest.bat …………………………. (ścieżka względna)
  2. d:\path\to\mytest.bat ……………………… (pełna ścieżka)
  3. \fileserver\sharename\mytest.bat(ścieżka na zdalnym udziale)

…i zawsze będziesz miał właściwą wartość w swoich zmiennych.

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

Osobiście podobała mi się odpowiedź Tomsa, dopóki nie zmagał się z kropkami w nazwach dir. To ](http://forums.devshed.com/windows-help-34/finding-last-token-in-batch-file-412970.html) dało mi wskazówkę:

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

Odpowiedź Toma jest dobra, ale jeśli masz nazwę katalogu z kropką w środku (np. wxwidgets-2.9.4), otrzymasz tylko pełną nazwę. Tak więc zamiast tego otrzymamy wxwidgets-2.9, ponieważ .4 zostało potraktowane jako rozszerzenie (tak, nawet jeśli jest to nazwa katalogu!).

Aby uzyskać pełną nazwę wyjściową, musisz dodać na końcu rozszerzenie:

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

a w trybie pliku wsadowego:

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

Lub oczywiście zamiast tego ustawić zmienną w pliku wsadowym:

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

Innym sposobem jest:

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

działa to z “.” i spacjami w nazwie ścieżki

Co to robi?

  1. umieść całą nazwę pliku (driveletter-path-filename-extension) w MyPath Var

  2. usuń nazwę pliku i rozszerzenie z MyPath var

Działa również z UNC Paths. Jeśli potrzebujesz Backslash na końcu ścieżki. Usuń `Innym sposobem jest:

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

działa to z “.” i spacjami w nazwie ścieżki

Co to robi?

  1. umieść całą nazwę pliku (driveletter-path-filename-extension) w MyPath Var

  2. usuń nazwę pliku i rozszerzenie z MyPath var

Działa również z UNC Paths. Jeśli potrzebujesz Backslash na końcu ścieżki. Usuń po MyPath w drugiej komendzie set, np.

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

Możesz pobrać bieżący dir do zmiennej. One-liner:

set a=%cd%

Sprawdź za pomocą

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

po prostu proste

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

lub

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

Uważaj na backslash na końcu ścieżki, nie może to być backslash na końcu.

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

Moja odpowiedź w tym wątku robi to w 3 prostych liniach:

@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

To działa dla mnie z pliku wsadowego. Zwraca nazwę bieżącego katalogu roboczego.

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