2015-09-17 94 views
-1

如何删除名为“0文件复制的” TXT上线和下面的线(日期和时间)删除TXT线与批处理程序

基本上它消除了对日志文件垃圾桶。

有编辑:

findstr /v /i /c:"0 File(s)" Backuper_log.txt > Backuper_log2.txt 
type Backuper_log2.txt > Backuper_log.txt 
del Backuper_log2.txt 
exit 
+1

到目前为止您尝试过什么?我们不是免费的代码生成社区。首先显示一些努力! – MichaelS

+0

好的,对不起......这不是邪恶的意图。 –

+1

其他用户应该如何知道您期望的代码?请提供输入和输出文件的样本;并删除标签[标签:MS - DOS],因为它不适用(我敢肯定你在Windows上工作); – aschipfl

回答

1

可以使用找到/ V参数,例如命令

find /V "0 Files Copied" log.txt > log2.txt 

但是,这只会删除“0复制文件”的行;这个命令不会让你删除后面的行。

您也可以使用FINDSTR,它允许搜索regualr表达式。

findstr /V /R /C:"^0 Files Copied$" log.txt > log2.txt 

您还可以使用findstr独立使用适当的正则表达式删除具有日期的行。

a way可以用findstr在多行中搜索,但这种方法对于/ V选项不适用,因为只有匹配的第一行被过滤。所以你不能使用findstr去除匹配的行和下面的行。

如果您确实需要特别说明,我认为您最好的选择是使用一些alternative of grep for Windows

您还可以将Powershell与以下简单脚本一起使用。只需将它复制并粘贴到powershell命令行中,然后按两次Enter即可开始执行。确保输入文件位于当前文件夹中。

$Lines = Get-Content "input.log" 
for ($num = 0; $num -lt $lines.Count; $num++) { 
    if ($Lines[$num] -match "0 Files Copied") { 
     $num++; #skip next line 
     continue 
    } 
    if ($num -match 0) { 
     $Lines[$num] > "output.log" } 
    else { 
     $Lines[$num] >> "output.log" } 
} 
+0

所以不可能检测到某一行的下一行。但是如果它检测到某个日期等于上线?类似于:2015-09-17 9:42:05,10(line below :): 2015-09-17 9:42:06,35 –

+1

我认为用findstr并不可能,但我已经更新了我的答案以展示如何在Powershell(随win7及更高版本提供)中做你想做的事情。 –

+0

真的非常感谢您的帮助! –