如何从命令行获取目录的最后一部分

如何从命令行获取目录的最后一部分

如何将目录的最后一部分存储在变量中?

例如我有以下路径: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

相关内容