Batch file version=%version:=%-使用此选项有充分的理由吗?

Batch file version=%version:=%-使用此选项有充分的理由吗?,batch-file,Batch File,我正在处理一些代码,这些代码是由一位早已离开公司的人编写的。内容如下: 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 comme

我正在处理一些代码,这些代码是由一位早已离开公司的人编写的。内容如下:

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”在屏幕上显示


我在网上任何地方都找不到有关此“:=%”业务的任何信息。这样做有充分的理由吗

发生了什么事?:

这看起来像是变量编辑/替换或其他术语。这允许您做的是获取一个字符串,替换其中的字符或单词,或者替换现有字符串,或者创建一个新的修改字符串

例如
SET“version=%version:=%”
这将修改字符串
version
并删除字符串中的所有空格

此方法的优点:

由于某些字符串或代码需要修改,您可以非常方便地使用纯批处理选项替换文本文件中的单词,从字符串中删除单词,在单词后添加逗号,甚至删除字符串中最后的x字符

语法替换通常用于在for循环中无法解决的问题或在使用之前需要调整的字符串,例如文件夹路径。在
for
循环中,当处理包含
\
的字符串并尝试使用
delims=\
时,有时需要将其更改为冲突较小的字符,如
-
设置“String=%String:\=;”
。用途是无穷的

对该方法的否定:

这是编辑字符串的一种非常简单的方法,但可能会带来负面影响,即如果不首先使用
^
转义基字符串中的特殊字符,则无法编辑具有特殊字符的字符串。这方面的一个例子如下:

  • 设置“version=Hello&There”
    -这将破坏语法替换代码
    &
    正在调用新命令
  • 设置“version=Hello^&There”
    -这是“忽略”符号的正确方法 用于处理


查看CMD窗口中的
Set/?
了解更多信息。

发生了什么事?:

这看起来像是变量编辑/替换或其他术语。这允许您做的是获取一个字符串,替换其中的字符或单词,或者替换现有字符串,或者创建一个新的修改字符串

例如
SET“version=%version:=%”
这将修改字符串
version
并删除字符串中的所有空格

此方法的优点:

由于某些字符串或代码需要修改,您可以非常方便地使用纯批处理选项替换文本文件中的单词,从字符串中删除单词,在单词后添加逗号,甚至删除字符串中最后的x字符

语法替换通常用于在for循环中无法解决的问题或在使用之前需要调整的字符串,例如文件夹路径。在
for
循环中,当处理包含
\
的字符串并尝试使用
delims=\
时,有时需要将其更改为冲突较小的字符,如
-
设置“String=%String:\=;”
。用途是无穷的

对该方法的否定:

这是编辑字符串的一种非常简单的方法,但可能会带来负面影响,即如果不首先使用
^
转义基字符串中的特殊字符,则无法编辑具有特殊字符的字符串。这方面的一个例子如下:

  • 设置“version=Hello&There”
    -这将破坏语法替换代码
    &
    正在调用新命令
  • 设置“version=Hello^&There”
    -这是“忽略”符号的正确方法 用于处理


查看CMD窗口中的
Set/?
,了解更多信息。

如果这是胡说八道,你为什么会在意?在cmd窗口中通读
Set/?
,或者顺便说一句,示例中的第一个集合不是双引号,并且将在版本字符串中创建尾随空格,双引号的第二个命令将删除它们。请注意(使用该语法),
%version%
末尾将有2或3个空格,这些空格将被删除。注意:更好的语法是
设置“version=4.4”20180110注释(注意引号的位置)。(在原始代码中,
:20170604
以及之后的所有内容都将被忽略(从技术上讲,这是一个标签;使用标签作为注释不是一个好的编码实践)在这个注释中的代码中,引号定义了变量应该包含的内容。结束引号后的所有内容都被忽略,因此不需要
&
-有问题的编码实践,更具可读性:
设置“var=value”&REM comment
))顺便说一句,有点吹毛求疵:您没有使用DOS。多斯早在80年代就去世了。您正在使用Windows命令处理器a.k.a.cmd.exe。它可能看起来有点像旧的DOS,但实际上非常不同。如果它是胡说八道,你为什么会在意呢?在cmd窗口中通读
Set/?
,或者顺便说一句,示例中的第一个集合不是双引号,并且将在版本字符串中创建尾随空格,双引号的第二个命令将删除它们。请注意(使用该语法),
%version%
末尾将有2或3个空格,这些空格将被删除。注意:更好的语法是w