是否可以使用DOS命令获取当前文件夹名称(而不是当前目录路径)?如果是这样,怎么办?
我最接近的是这个,但它没有做到:
for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%
注意:上面的尝试是我尝试对字符串进行标记化并获取最后一个标记集作为CURR变量。
for /f
TomWij %~n*
。(Windows的cmd.exe
是不是DOS,这是一个原生的Windows程序。)
是否可以使用DOS命令获取当前文件夹名称(而不是当前目录路径)?如果是这样,怎么办?
我最接近的是这个,但它没有做到:
for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%
注意:上面的尝试是我尝试对字符串进行标记化并获取最后一个标记集作为CURR变量。
for /f
TomWij %~n*
。(Windows的cmd.exe
是不是DOS,这是一个原生的Windows程序。)
Answers:
我发现的最短方法:
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表示仅文件名和扩展名
%
用%%
。
.
)的文件夹名称,例如我的%USERPROFILE%文件夹。
*
在oo之前我从未见过使用它
如果您想知道批处理文件的当前位置(如果您的Windows不是很老的版本),请for /?
在“ DOS box”窗口中键入。向下滚动。读。
你会发现,你现在可以(从阅读中的批处理文件)这些变量:
%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
... (远程共享上的路径)...并且您将始终在变量中获得正确的值。
%~dpnx0
,不是吗?
另一种方法是:
set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%"
echo MyPath=%MyPath%
它与“。” 和路径名中的空格
它有什么作用?
将整个文件名(driveletter-path-filename-extension)放入MyPath
Var
从MyPath
var中删除文件名和扩展名
它还与UNC路径一起使用。如果需要在路径的末尾使用反斜杠。在第二个set命令中删除\
after MyPath
,例如。
set "MyPath=%%MyPath:%~nx0=%%"
%~dp0
cd | sed "s/.*\\//"
(将cd(cwd)的输出通过管道输入到正则表达式中进行搜索和替换,将最终\之前的所有内容全部