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变量。

答案 (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中使用变量中的Get值。

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不是一个非常古老的版本),在 “DOS框 "窗口中输入for /?。向下滚动。读取。

你会发现,你现在可以读取(从批处理文件中)这些变量:

%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

我个人很喜欢Toms的答案,直到它在dir名中的点上有了困难。这个给了我一个提示:

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

Tom 的回答很好,但是如果你的目录名中有句号(例如 wxwidgets-2.9.4),你将只得到全名,所以这将输出 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

在批处理文件模式下:

0x1&

4
4
4
2012-03-15 10:19:31 +0000

另一种方法是:

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

它适用于路径名中的". “和空格

它做什么?

1.把整个文件名(driveletter-path-filename-extension)放入MyPath Var

2.从MyPath var

中删除文件名和扩展名,它也适用于UNC路径。如果你需要在路径末尾加上反斜杠。在第二条设置命令中删除`另一种方法是:

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

它适用于路径名中的”. “和空格

它做什么?

1.把整个文件名(driveletter-path-filename-extension)放入MyPath Var

2.从MyPath var

中删除文件名和扩展名,它也适用于UNC路径。如果你需要在路径末尾加上反斜杠。在第二条设置命令中删除后面的MyPath,例如:

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

你可以把当前的dir变成一个变量。一句话:

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

我在这个帖子中的答案只用了三行简单的文字。

@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