通过DOS命令获取当前文件夹名称?
是否可以通过DOS命令获取当前文件夹名(不是当前目录路径)?如果可以,怎么做?
我得到的最接近的是这个,但是没有做到。
for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%
注: 上面的尝试是我试图对字符串进行标记化 并将最后一个标记设置为CURR变量。
是否可以通过DOS命令获取当前文件夹名(不是当前目录路径)?如果可以,怎么做?
我得到的最接近的是这个,但是没有做到。
for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%
注: 上面的尝试是我试图对字符串进行标记化 并将最后一个标记设置为CURR变量。
我找到的最短的方法是:
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表示仅文件名和扩展名。
如果你想知道批处理文件的当前位置(如果你的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
。你可以用不同的方式来调用它。
..\..\to\mytest.bat
…………………………. (相对路径) d:\path\to\mytest.bat
……………………… (完整路径) \fileserver\sharename\mytest.bat
… (远程共享的路径) …这样你就可以在变量中得到正确的值。
我个人很喜欢Toms的答案,直到它在dir名中的点上有了困难。这个给了我一个提示:
for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
```。
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&
另一种方法是:
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=%%"
```。
我在这个帖子中的答案只用了三行简单的文字。
@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