为什么这个 for 循环不起作用?批量

为什么这个 for 循环不起作用?批量

这个脚本中有一个 for 循环:https://github.com/ITCMD/Explorer--/blob/master/Explorer--.bat 看起来像这样:(:ModificationID477,从行308329中调用: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和的方式,或者循环在迭代时是否真的存在空白行问题,或者是否是尾随空白行的问题,但这些对我来说似乎合乎逻辑。我相信也有几种方法可以解决这个问题。delimsFOR /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 "="'),它似乎也能起到作用。


更多资源

相关内容