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

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

Advertisement

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.

Advertisement
Advertisement

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
Advertisement
16
16
2011-11-17 09:20:12 +0000
Advertisement

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
Advertisement
4
4
2012-03-15 10:19:31 +0000
Advertisement

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
Advertisement
2
2
2016-10-10 02:11:12 +0000
Advertisement

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
Advertisement
1
1
2015-05-28 16:08:10 +0000
Advertisement
-->

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

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

Pytania pokrewne

3
19
10
28
4
Advertisement