windows 批处理脚本 .bat for 循环

windows batch script .bat for loop

我很难理解下面的代码在做什么。

for /f "delims=:. tokens=1-4" %%t in ("%TIME: =0%") do (
        set FILENAME=event-%5-%%t%%u%%v%%w
    )

我知道是 for loop

/f => 我想这意味着目录中的每个文件。

delims=:. => 我理解这意味着使用 : 作为分隔符。不确定 . 是什么意思。

tokens=1-4 => 看起来这是在抓取目录中的前四个文件

%%t => 不确定这是什么意思

("%TIME: =0%") => 不知道这是什么意思

因此,对于符合上述条件的每个文件,它会执行以下操作:

set FILENAME=event-%5-%%t%%u%%v%%w => 我认为这意味着重命名每个文件。

我还不明白的是:

event-%5-%%t%%u%%v%%w => 我知道 "event" 是名字的一部分。但是 %5-%%t%%u%%v%%w 是什么意思?

我知道这是一个 for 循环。 正确

/f => 我想这意味着目录中的每个文件。 不完全是。 /f 是 "multi-purpose switch" 的一种 - 详见 for /?

delims=:. => 我理解这意味着使用 : 作为分隔符。不确定是什么。方法。 它将 :. 定义为分隔符 - 字符串将在每个字符处拆分

tokens=1-4 => 看起来这是在抓取目录中的前四个文件 不,它抓取字符串的前四个标记(由定义的 delims 分隔)

for /f 循环将它分成四个标记:%%t 是第一个,然后是字母表:%%u%%v%%w

%%t => 不确定这是什么意思这是(第一个)令牌的变量名称

("%TIME: =0%") => 不知道这是什么意思 它将字符串中的每个 space 替换为零 - 有关详细信息,请参阅 set /?

因此,对于符合上述条件的每个文件,它会执行以下操作:与此处的文件无关

set FILENAME=event-%5-%%t%%u%%v%%w => 我认为这意味着重命名每个文件。 不,它通过连接几个字符串

创建一个名为filename的变量

它的真正作用:

%time% 是一个内部变量,包含当前时间。 (注意,时间格式取决于本地设置 - 代码片段假定格式为 9:11:22.33(在 9 之前有一个前导 space))。
%time: =0% 替换了 space,结果是 09:11:22.33

for /f 循环将这个字符串分成四个标记 (%%t=09, %%u=11, %%v=22%%w=33.

%5 是批处理文件的第五个参数(假设它是 whatever

set FILENAME=event-%5-%%t%%u%%v%%wfilename 变量设置为 event-whatever-09112233

我建议收藏 SS64 并定期访问它。您还可以通过使用 /? 开关(for /?set /? 等)

执行每个命令来获得帮助