![为什么这个 for 循环不起作用?批量](https://linux22.com/image/1580766/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%20for%20%E5%BE%AA%E7%8E%AF%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F%E6%89%B9%E9%87%8F.png)
这个脚本中有一个 for 循环:https://github.com/ITCMD/Explorer--/blob/master/Explorer--.bat
看起来像这样:(:ModificationID
行477
,从行308
和329
中调用:OtherVersions
)
set _ForString=%~1
set _ForString=!_ForString:\=\\!
wmic datafile where name="!_ForString!" get LastModified /format:list>out.temp
For /f "tokens=1,2* delims==" %%a in (out.temp) do (set %~2=%%b & echo hello)
其中 %~1 等于文件路径。它将 fine 输出到 out.temp 中,如下所示:
(2 blank lines)
LastModified=20181019082634.596899-240
(3 blank lines)
但是 for 循环从未运行。它甚至从未运行 echo 命令。为什么?
答案1
根据我的理解,我能让它工作的方法是使用Type
命令,然后将文件传输到Find
命令并告诉它只显示包含=
符号的行,这样基本上就解析出了感兴趣的文件内容值周围的尾随和前导空白行。
我不确定这是否是按照脚本片段方法设置tokens
和的方式,或者循环在迭代时是否真的存在空白行问题,或者是否是尾随空白行的问题,但这些对我来说似乎合乎逻辑。我相信也有几种方法可以解决这个问题。delims
FOR /F
脚本(解决方法)
setlocal enabledelayedexpansion
set "_ForString=%~1"
set "_ForString=!_ForString:\=\\!"
wmic datafile where name="!_ForString!" get LastModified /format:list>out.temp
For /f "tokens=2 delims==" %%a in ('type out.temp ^| find "="') do (set %~2=%%a)
笔记: 我测试过了('find "=" out.temp ^| find "="')
,它似乎也能起到作用。