我正在处理一些代码,这些代码是由一个早已离开公司的人编写的。它的内容如下:
REM XX.XXX YYYYMMDD Author Description
REM version=4.3 &:20170418 comment comment comment
REM version=4.4 &:20170519 comment comment comment
SET version=4.5c &:20170604 comment comment comment
SET "version=%version: =%"在对此进行了困惑之后,我们终于发现了两件事:第一,这个& thing可以告诉DOS一个新命令在同一行中,然后:date就被抛出了,因为DOS不知道该如何处理它。
但是,我们到了"version=%version:=%“这组胡说八道。
到目前为止,我所能得出的结论是,它将删除空间,因此如果我这样做,那么:
SET version=4.5 c
SET "version=%version: =%"
ECHO %version%我会让"4.5c“回放到屏幕上。
我在网上任何地方都找不到关于这个“%”业务的任何信息。有充分的理由这么做吗?
发布于 2019-01-09 20:29:59
,怎么回事?:
这看起来像变量编辑/替换,或者用其他术语表示语法替换。这允许您做的是取一个字符串,并替换它中的字符或单词,或者替换现有的字符串,或者创建一个新的修改字符串。
以SET "version=%version: =%"为例,这将修改字符串version,并从字符串中删除所有空格。
对此方法的肯定:
由于需要修改某些字符串或代码,您可以非常方便地使用纯批处理选项来替换文本文件中的单词,从字符串中删除单词,在单词后面添加逗号,甚至删除字符串中的最后一个x字符。
语法替换通常用于在for循环中无法解决的问题,或者在使用之前需要调整的字符串,例如文件夹路径。在for循环中,当处理包含\的字符串并尝试使用delims=\时,有时需要将其更改为冲突较小的; - SET "String=%String:\=;"字符。用途是无穷无尽的。
这种方法的否定:
这是编辑字符串的一种非常简单的方法,但也可能带来负面影响,即如果不首先使用^来转义基字符串中的特殊字符,就不能编辑带有特殊字符的字符串。这方面的一个例子如下:
SET "version=Hello & There" -这将破坏语法替换代码,因为&正在调用一个新命令。SET "version=Hello ^& There" --这是“忽略”用于处理的&符号的正确方法。有关更多信息,请查看CMD窗口中的Set /?。
https://stackoverflow.com/questions/54117443
复制相似问题