我正在处理批处理脚本,我需要一种从完整路径字符串中删除最低级别目录的方法。例如,如果我有:
C:/ DIR1 / DIR2 / DIR3
我希望我的批处理脚本返回“dir3”。该字符串C:/ dir1 / dir2 / dir3由用户传入并设置为变量“FullPath”。
我查看了答案here,这似乎是一个类似的问题,但那里的解决方案没有使用分隔符。而且,我最接近解决这个问题的是这段代码:
for /f "tokens=(some number) delims=\" %%a in ("%FullPath%") do echo Token=%%a
...这可以回显我指定的任何令牌(我最终会将此令牌设置为变量,但我需要先获得正确的令牌),但我不知道会有多少令牌,并且我总是想要字符串中的最后一个,如下面的“\”字符。
如何编辑这行代码以返回字符串中的最终标记?
答案 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