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

Получить имя текущей папки по команде DOS?

Можно ли получить текущее имя папки (не текущий путь к папке) с помощью команды DOS? Если да, то как?

Ближайшее, что я получил, это то, что она не делает этого:

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

Примечание: вышеописанная попытка заключалась в том, что я пытался прописать строку и получить последний набор токенов в качестве переменной CURR.

Odpowiedzi (9)

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

Самый короткий путь, который я нашел:

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

или внутри скрипта .bat:

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

или в .bat с Получить значение в переменной.

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

Пояснения: http://www.robvanderwoude.com/ntfor.php

nx означает только имя файла и расширение.

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

Если вы хотите узнать текущее местоположение пакетного файла (и если ваша Windows не очень старая версия), введите for /? в окне ‘DOS box’. Прокрутите вниз. Читать.

Теперь вы можете прочитать (из in пакетного файла) эти переменные:

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

Это работает во многих случаях. Допустим, пакетный файл называется mytest.bat. Вы можете вызывать его различными способами:

  1. ..\..\to\mytest.bat ………………………….. (относительный путь)
  2. d:\path\to\mytest.bat ……………………… (полный путь)
  3. \fileserver\sharename\mytest.bat(путь на удаленном ресурсе)

…и вы всегда получите правильное значение в ваших переменных.

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

Лично мне нравился ответ Томса, пока он не боролся с точками в именах дир. Это дал мне подсказку:

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

Ответ Тома хорош, но если у вас есть имя каталога с периодом в нем (т.е. wxwidgets-2.9.4), вы получите только полное имя. Таким образом, вместо этого будет выведено wxwidgets-2.9, потому что .4 было обработано как расширение (Да, даже если это имя каталога!).

Чтобы получить полное выходное имя, вы должны добавить расширение в конец:

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

и в режиме пакетного файла:

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

Или, конечно, установите переменную в пакетном файле вместо нее:

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

Другой способ:

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

он работает с “…” и пробелами в каталоге

Что он делает?

  1. вставляет полное имя файла (расширение буквенного пути) в MyPath Var

  2. удаляет имя файла и расширение из MyPath var

Он также работает с UNC Paths. Если вам нужна обратная косая черта в конце пути. Удалите `Другой способ:

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

он работает с “…” и пробелами в каталоге

Что он делает?

  1. вставляет полное имя файла (расширение буквенного пути) в MyPath Var

  2. удаляет имя файла и расширение из MyPath var

Он также работает с UNC Paths. Если вам нужна обратная косая черта в конце пути. Удалите после MyPath в команде второго набора, например

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

Текущую грязь можно ввести в переменную. Одна строка:

set a=%cd%

Проверьте с

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

Простые

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

или

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

Будьте осторожны с обратным слешем конца пути, он не должен быть обратным слешем конца.

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

Мой ответ в этот поток делает это в 3 простых строках:

@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

Это работает на меня из пакетного файла. Возвращает имя текущей рабочей директории.

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

Pytania pokrewne

3
19
10
28
12