如何将目录的最后一部分存储在变量中?
例如我有以下路径:A\B\C\D
,我想将其存储D
在类似的变量中file_name=D
。
答案1
由于您的 Windows 标签,我假设您的cmd.exe
已内置扩展。如果是这种情况,您可以使用 的两个FOR
特殊替换变量引用:
给定一个变量%A
,包含路径和文件:
%~nA
将输出文件名,%~xA
将输出文件扩展名。以下示例使用竖线字符|
作为分隔符。竖线字符对于文件和路径来说是无效字符,应该不是出现在路径中。这将允许路径和文件名中有空格。请参阅FOR /?
以了解完整详情。
C:\> SET FSPATH=C:\WINDOWS\Temp\file.txt
C:\> echo %FSPATH%
C:\WINDOWS\Temp\file.txt
C:\> FOR /F "delims=|" %A IN ("%FSPATH%") do echo %~nxA
file.txt
或者,如果您的中没有扩展名cmd.exe
,您可以使用delims=\
,计算目录分隔符,并根据该数字拆分路径/文件字符串。
编辑:根据您对错误的评论。以上是一个例子在命令行上. 如果你想执行相同的之内批处理脚本,您需要将%
变量加倍:
FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA
要在循环外使用该值FOR
,您需要将该值分配给另一个变量。变量%%A
的范围限制为FOR
。
:: example.bat
SET FSPATH=C:\Windows\bfsvc.exe
FOR /F "delims=|" %%A IN ("%FSPATH%") DO (
echo Inside loop %%~nxA
SET SOMEFILE=%%~nxA
)
ECHO Outside loop %SOMEFILE%
答案2
尝试一下:
for %f in (A\B\C\D) do set var=%~nxf