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

Moh*_*deh 6 windows files directory batch-file strings

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

例如,我有以下路径:A\B\C\D,我想存储D在像file_name=D.

jsc*_*ott 8

由于您的 Windows 标签,我假设您cmd.exe内置了扩展。如果是这种情况,您可以使用FOR's 的两个特殊替换变量引用:

给定一个%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
Run Code Online (Sandbox Code Playgroud)

另外,你应该没有在您的扩展cmd.exe,您可以使用delims=\,算上目录分隔符,并基于该号码拆分您的路径/文件字符串。

编辑:根据您对错误的评论。以上是命令行上的示例。如果要批处理脚本中执行相同的操作,则需要%在变量上加倍:

FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA
Run Code Online (Sandbox Code Playgroud)

要在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%
Run Code Online (Sandbox Code Playgroud)