从字符串路径中获取文件名?

41

如何从此字符串中获取文件名?

"C:\Documents and Settings\Usuario\Escritorio\hello\test.txt"

输出:

"test.txt"

在发帖之前,我确实努力查找了这个问题的解决方法,但所有的搜索结果都有误导性,它们都是关于从当前目录获取文件名(而我必须只使用字符串)的。


进入该目录并输入 dir /b - Marc
1
@Marc,那个字符串是通过循环创建的,我认为访问200-300个目录不明智。我必须只处理字符串,但感谢提供替代方案。 - ajax333221
3个回答

69

方法1

for %%F in ("C:\Documents and Settings\Usuario\Escritorio\hello\test.txt") do echo %%~nxF

输入 HELP FOR 获取更多信息。

方法2

call :sub "C:\Documents and Settings\Usuario\Escritorio\hello\test.txt"
exit /b

:sub
echo %~nx1
exit /b

输入HELP CALL以获取更多信息。


1
请问,能否解释一下 "%~nx1" 的含义? - Yukulélé
@Yukulélé - 它修改了 %1 的扩展,将其视为文件路径并扩展为名称和扩展名,忽略驱动器和路径。从命令提示符中键入 HELP CALLCALL /? 以获取有关所有参数扩展修饰符的更多信息。 - dbenham
4
谢谢,我在这里找到了更多的细节:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true。 - Yukulélé

27
如果您的路径作为参数传递,只需使用:%~nx1(这里的“1”代表第一个参数,我们假设它是第一个参数)。echo %~nx1 可以直接返回 test.txt。

1
我自己非常需要这个东西,而对于这种特殊情况(作为参数),它更加简短和优雅。 - stormofwar
当然,如果作为第二/第三个参数传递,则是%~nx2%~nx3 - Zac

9

假设你需要获取"c:\temp"目录下(包括子目录)的文件名:

FOR /R c:\temp %i in (*.*) do echo %~nxi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接