2017-03-06 136 views
1

因此,我试图让我的批处理脚本在成功完成其作业并在此处激活错误代码为0的情况下从列表中删除资产标记代码块。如何使用findstr删除.txt文件中的单行批次

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擦干净整个文件?

+0

可能是因为您正在尝试打开“ToPingList2.txt”,以便在已经打开阅读时进行书写。尝试输出到不同的文件,然后在'findstr'完成后移动/ y newfile ToPingList2.txt> NUL'。 – rojo

回答

0

您正在覆盖您的目标文件,而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 
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 
) 
) 

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

相关问题