例如,我想用\
作为我的分隔符来解析这样的单行:
c:\some directory\another directory\filename.ext
所以我设置了一个变量:
set mydir=c:\some directory\another directory\filename.ext
每次运行我的脚本时,这个目录都会改变,所以我可能不知道我的字符串中会有多少个令牌,但最终我想要收集整个sting,减去最后一个令牌。问题是,当我甚至尝试使用所有令牌测试解析时,我永远无法让它返回我期望的结果。
当我使用
时For /F "delims=\ tokens=1-2" %a in ("%mydir%") do echo %a %b
我得到了
c: some directory
但是当我使用
时For /F "delims=\ tokens=*" %a in ("%mydir%") do echo %a %b
我得到了
c:\some directory\another directory\filename.ext b%
为什么会这样?当我使用tokens=*
时,似乎忽略了我的分隔符。
我希望它能显示
c: some directory
答案 0 :(得分:2)
For %%a in ("%mydir%") do echo %%~dpa
应该按照您声称的要求显示“整个刺痛,减去最后一个令牌”(但我在批处理文件中将%
所需的metavariables
加倍,而不是直接从提示)
tokens=*
对你没有“正常工作”的原因(即做你期望它做的事情)是令牌*
表示remainder of the string, past the last tokend number specified
。您尚未指定任何标记,因此字符串的“余数”是整个字符串。
如果您需要c some directory
,那么您选择的是第一个和第二个令牌,因此您使用tokens=1,2,*
将第一个令牌分配给%%a
,第二个令牌分配给%%b
}和字符串的其余部分到%%c
。请注意,2
和*
之间的逗号是可选的(并且还允许1-2*
)。
在这种情况下,c:
将分配给%%a
,some directory
分配给%%b
,其余部分分配给%%c