我相信(再一次)许多问题都涉及相同的主题(字符串约束或拆分字符串)。
不是把整个代码给你,而是给你一个模板,并解释为什么 %~dpVAR!
不起作用。
首先,为什么 %~dpVAR!
不起作用。
在讨论修改器之前,让我们先讨论参数。你可能知道批处理文件可以相互解析参数。这些参数可以通过在数字0-9前面使用单个百分号(%)来调用。据我所知(有人可能已经找到了一种解析更多参数的方法),只能解析9个参数。你可能认为这是错误的(有10个参数对吧?)。参数1-9被解析到批处理文件(或其中一个函数),%0是批处理文件的文件路径(或函数名称)。如果你看一下,%~dp0
与 %0 有一些相似之处(不是真的)。下面将讨论这一点。
其次,术语
%~dp0
中包含修饰符。修饰符是修改变量的东西(仅适用于参数和在
for
循环中声明的那些变量,你知道那些带有双百分号的变量,如%%i),以及参数。修饰符
d
将参数扩展为驱动器号,而
p
仅将参数扩展为路径。您可能认为这些会相互矛盾,但可以组合参数以创建极其奇怪的格式。
因此,您尝试将0替换为您的变量名称失败,因为它未针对此类事物指定。
现在,进入模板。
您可以像这样限制变量(并将它们放入其他变量):
set variable=!variable:~offset,amount!
如果这看起来令人困惑,请不要担心,我即将解释其中的组件。
首先,请注意没有
/a
开关。这是因为这不是数学函数(不太清楚为什么我添加了这个)。因此,在我解释之前,这里是一个示例,说明它将对变量名为
numbers
且值为
0123456789
的变量执行的操作。
set numbers=!numbers:~5,1!
通过使用这行代码,
numbers
现在将等于
5
。这是因为它正在重新创建一个变量,使用原始值的较小版本(这很难解释)。正如您在上面的模板中看到的,
offset
的位置有一个
5
。这是因为它跳过了前5个字符,并将变量设置为下一个
amount
,即1个字符(我真的希望你能理解这个)。
所以基本上,它将一个变量设置为另一个(或相同)变量的较短值,由偏移量和要包含其中的字符数确定。
我真的希望这可以帮助您,因为我可能不会理解这些话。
有人能把这个可怜的家伙重定向到一个更好的解释链接吗?(我试过了,好吧!)