如何使用findstr Batch删除.txt文件中的单行

时间:2017-03-06 13:55:18

标签: batch-file

所以我试图让我的批处理脚本在成功完成其工作后从列表中删除资产标记,并在此代码块中以错误代码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由它自己调用文件中所有其他行的文本,当我测试findstr /V %%G ToPingList2.txt >> ToPingList2.txt时,它第二次添加了文件中的所有其他行。那么为什么findstr /V %%G ToPingList2.txt > ToPingList2.txt擦拭整个文件呢?

2 个答案:

答案 0 :(得分:0)

您正在覆盖目标文件,而findstr仍将其作为输入进行处理。由于您将条目存储在usmtdone.txt中,因此可以在for循环后的一个步骤中轻松删除它们。

Get-Help New-Service -full

答案 1 :(得分:0)

感谢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
)
) 

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