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

如何将目录的最后部分存储在variables中?

例如,我有以下path: A\B\C\D ,我想存储D像variablesfile_name=D

由于您的Windows标记,我假设您的cmd.exe具有内置的扩展名。 如果是这样的话,可以使用两个FOR的特殊replacevariables引用:

给定一个variables%A ,包含一个path和文件:

%~nA会输出文件名, %~xA会输出文件扩展名。 以下示例使用pipe道字符| 作为分隔符。 pipe道是文件和path的无效字符,不应出现在path中。 这将允许path和文件名中的空格。 见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=\ ,计算目录分隔符并根据该数字拆分path/文件string。

编辑:根据你的评论关于错误。 以上是命令行上的示例。 如果要批处理脚本中执行相同的操作,则需要将variables上的%加倍:

 FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA 

要使用FOR循环之外的值,您需要将该值分配给另一个variables。 variables%%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% 

试试这个:

 for %f in (A\B\C\D) do set var=%~nxf