我在许多子文件夹下的文件列表中搜索字符串。如果找到了字符串,那么我将执行更多的陈述(这在我的问题上并不重要)。
所以我做的是使用FIND指令,使用/ c选项。然后存储FIND修剪最右边最后一个字符的结果(这是字符串在文件中出现的次数)。请参阅下面的示例代码...
for /F "delims=" %%A in ('find /c "PROGRAM-ID." "C:\FORTEST\CBL001.cbl"') do SET findstr=%%A
SET findstr=%findstr:~-1%
echo %findstr%
上面的代码给了我
1
这是正确的,因为单词" PROGRAM-ID"仅在CBL001.cbl中发生过一次..
现在,如果我在for循环上实现此代码以检查文件夹中的所有文件......
for /r "C:\FORTEST\" %%G in (*.*) do (
for /F "delims=" %%A in ('find /c "PROGRAM-ID." %%G') do SET findstr1=%%A
SET findstr1=%findstr1:~-1%
echo %findstr1%
)
回声正在回归
ECHO is off.
我不明白将for循环插入另一个for循环会如何搞乱代码......
感谢阅读。
=======
编辑:问题解决了。感谢@npocmaka所以最初,在关于将FIND结果存储到变量的所有这个惨败之前,我使用ERRORLEVEL来确定FIND指令是否找到了字符串(听起来更简单),但ERRORLEVEL没有返回正确的值,即使找不到该字符串。因此,我目前的解决方案是存储FIND的结果并使用该数据进行比较。
但似乎DelayedExpansion是导致ERRORLEVEL无法产生正确值的原始罪魁祸首。
请参阅下面的最终代码。
for /r "C:\FORTEST" %%G in (*.*) do (
find "PROGRAM-ID." %%G
if !ERRORLEVEL! EQU 0 (
echo ITS A COBOL
::do something
) else (
echo NOPE NOT A COBOL
)
)
还要感谢其他回复,我不打算使用它们,但我很感激努力!
答案 0 :(得分:0)
find
不会写入破折号和文件名。并且不需要额外的变量(findstr1
):
for %%G in (*.*) do (
for /F "delims=" %%A in ('type %%G^|find /c "PROGRAM-ID."') do echo %%A %%G
)
答案 1 :(得分:0)
正确答案是使用EnableDelayedExpansion
感谢@npocmaka