这批命令的含义是什么?

时间:2012-04-03 08:16:39

标签: batch-file

setlocal enabledelayedexpansion
for /f "delims=" %%a in (%TempFile2%) do (
    set a=%%a
    set a=!a: =!   
    echo !a! >>%DataFile%
)

我理解代码会查找tempfile2数据中的每个“空格”并设置它。这条线是什么意思?

设置=!a:=!

由于

2 个答案:

答案 0 :(得分:6)

这是一个基本的模式匹配和替换。

以下是set /?的帮助:

Environment variable substitution has been enhanced as follows:

    %PATH:str1=str2%

would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2".  "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output.  "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.

您示例中的其他变化是使用了'延迟扩展'语法,该语法使用!字符作为环境变量扩展字符而不是%

所以命令set a=!a: =!正在从变量a的内容中删除所有空格字符。

由于cmd.exe通常扩展(然后使用%分隔符)parens所包含的块中的整个命令集,因此需要延迟扩展(或至少使这样的事情更容易)在执行它的任何部分之前。

答案 1 :(得分:4)

它是一个替换语句,它用 nothing 替换所有空格。

语法是(可以在SET /?)找到 !variableName:findText=replaceText! 或相同的百分比扩张
%variableName:findText=replaceText%