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

Parsing 从批处理脚本中的字符串获取最后一个标记,parsing,batch-file,directory,Parsing,Batch File,Directory,我正在处理一个批处理脚本,我需要一种从完整路径字符串中删除最低级别目录的方法。例如,如果我有: C:/dir1/dir2/dir3 我希望我的批处理脚本返回“dir3”。该字符串C:/dir1/dir2/dir3由用户传入,并设置为变量“FullPath” 我仔细查看了答案,这似乎是一个类似的问题,但那里的解决方案没有使用任何分隔符。我最接近于解决这个问题的是这个代码: for /f "tokens=(some number) delims=\" %%a in ("%FullPath%") do

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

C:/dir1/dir2/dir3

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

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

for /f "tokens=(some number) delims=\" %%a in ("%FullPath%") do echo Token=%%a
…这可以回显我指定的任何标记(我最终会将此标记设置为一个变量,但我需要先获得正确的标记),但我不知道将有多少标记,并且我始终希望字符串中的最后一个标记,如“\”字符后面所示

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

for %%a in ("%fullpath%\.") do set "lastPart=%%~nxa"
也就是说,使用
for
循环获取对完整路径的引用,并从中检索最后一个元素的名称和扩展名,我通过以下方式求解:

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

这使用了与上一个答案相同的逻辑,但它执行了标准的
for
循环,将分隔符从
\
更改为带有
%var:=%
语法的空格。这是一个获得
for/f“delims=\”
效果的技巧,使用
for
而不是
for/f
,后者不像普通的
for

那样循环,如果标记由前斜杠(/)分隔,最后一个标记是:

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

我有一个类似的例子,我只需要链接地址中的文件名。这似乎起到了作用:

@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

您的解决方案有一些缺点。速度很慢,对于像
C:\ProgramFiles(x86)\file.txt
C:\temp\my file with spaces.txt
这样的文件,它会失败。最好使用修饰符
%%~nx
true,但这只针对没有空格的web链接类型地址,这只能解决部分问题,当链接中有其他字符(如逗号或分号)时,仍然会失败。