如何使用Findstr批处理删除.txt文件中的一行



因此,我试图使我的批处理脚本成功完成工作后,将资产标签删除列表,并在此代码块中使用0的错误代码感到兴奋。

FOR /F %%G IN (PingResults2.txt) DO (
    @psexec -s -w C: \%%G -c -f "USMTCAPTURE.cmd"
    IF !errorlevel! equ 0 (
        echo %%G >> usmtdone.txt
        findstr /V %%G ToPingList2.txt > ToPingList2.txt
    )
)

据我所知,我的代码的一部分正常工作,但是当它到达我的循环中的这一行时,它只是在删除整个文件。

findstr /V %%G ToPingList2.txt > ToPingList2.txt

我进行了测试,对我来说,它看起来应该有效。 findstr /V %%G ToPingList2.txt by self呼叫文件中的所有其他文本,当我测试findstr /V %%G ToPingList2.txt >> ToPingList2.txt时,第二次在文件中添加了所有其他行。那么为什么findstr /V %%G ToPingList2.txt > ToPingList2.txt擦拭整个文件?

您正在覆盖目标文件,而Findstr仍将其作为输入处理。由于您将条目存储在usmtdone.txt中,因此很容易在for循环后的一步中删除它们。

FOR /F %%G IN (PingResults2.txt) DO (
  @psexec -s -w C: \%%G -c -f "USMTCAPTURE.cmd"
  IF !errorlevel! equ 0 (
    echo %%G >> usmtdone.txt
  )
)
findstr /V /G:usmtdone.txt ToPingList2.txt >ToPingList2.tmp
Move /Y ToPingList2.tmp ToPingList2.txt

感谢Lotpings的快速响应。我最终做的代码与您的建议略有不同,并且它做了我需要的代码,因此我认为我会发布自己的答案。似乎我缺少的是,使用.tmp文件临时存储值,然后将其移动到原始值。

FOR /F %%G IN (PingResults.txt) DO (
@psexec -s -w C: \%%G -c -f "USMTCAPTURE.cmd"
IF !errorlevel! equ 0 (
echo %%G >> usmtdone.txt
findstr /V %%G ToPingList2.txt > ToPingList2.tmp
Move /Y ToPingList2.tmp ToPingList2.txt
)
) 

感谢您的帮助和建议!该代码现在运行得很漂亮。

最新更新