我确实(再次)相信许多问题都在同一个主题上(字符串约束或拆分字符串)。
我不会给你整个代码,而是给你一个模板并解释为什么%~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
. 这是因为它正在使用原始值的较小版本重新创建变量(这很难解释)。如您所见,上面的模板中有一个5
where offset
was。这是因为它跳过了前 5 个字符并将变量设置为下一个amount
或1
字符(我真的希望你能得到这个)。
所以基本上,它将一个变量设置为一个不同(或相同)变量的较短值,该变量由偏移量和包含在其中的字符数量决定。
我真的希望这会有所帮助,因为我可能一个字都听不懂。
有人可以将这个可怜的家伙重定向到一个更好地解释这个的链接(我试过了,好的!)?