从批处理脚本中的字符串中获取最后一个

时间:2014-10-21 18:11:52

标签: parsing batch-file directory

我正在处理批处理脚本,我需要一种从完整路径字符串中删除最低级别目录的方法。例如,如果我有:

C:/ DIR1 / DIR2 / DIR3

我希望我的批处理脚本返回“dir3”。该字符串C:/ dir1 / dir2 / dir3由用户传入并设置为变量“FullPath”。

我查看了答案here,这似乎是一个类似的问题,但那里的解决方案没有使用分隔符。而且,我最接近解决这个问题的是这段代码:

for /f "tokens=(some number) delims=\" %%a in ("%FullPath%") do echo Token=%%a

...这可以回显我指定的任何令牌(我最终会将此令牌设置为变量,但我需要先获得正确的令牌),但我不知道会有多少令牌,并且我总是想要字符串中的最后一个,如下面的“\”字符。

如何编辑这行代码以返回字符串中的最终标记?

4 个答案:

答案 0 :(得分:4)

for %%a in ("%fullpath%\.") do set "lastPart=%%~nxa"

也就是说,使用for循环来获取对完整路径的引用,并从中检索最后一个元素的名称和扩展名

答案 1 :(得分:0)

我这样解决了:

for %%x in (%fullpath:\= %) do set last=%%x

这使用与最后一个答案相同的逻辑,但是标准for循环使用\语法将分隔符从%var:=%更改为空格。获取for /f "delims=\"的效果是一种技巧,使用for代替for /f而不是像for那样循环。

答案 2 :(得分:0)

如果令牌以正斜杠(“ /”)分隔/定界,则最后一个令牌为:

set b=C:/dir1/dir2/dir3
for %i in (%b:/=\%) do echo %~ni

答案 3 :(得分:0)

我有一个类似的案例,我只想要链接地址中的文件名。这似乎完成了工作:

@echo off
set PYZIP=https://www.python.org/ftp/python/3.8.6/python-3.8.6-embed-win32.zip

for %%x in (%PYZIP:/= %) do set PYZIP_FILE=%%x
echo %PYZIP_FILE%

返回:python-3.8.6-embed-win32.zip