2013-11-22 134 views
0

首先:我在Windows 7計算機上;)。批處理腳本,用於從文本文件中過濾行

我得到了幾十個文件的文件夾。每個文件包含大約240.000行。但只有一半的行是需要的。

我想要做的是:讓腳本運行這些文件,過濾掉包含字符串「abcd」的每一行,並將其保存在新目錄中或保存在同一個文件中。

+0

你想一個批處理文件或PowerShell的解決方案? – foxidrive

+0

好吧,我不介意說實話:)只要它有效:) – user2428207

+0

你想把收集到的所有文件的所有'abcd'行放到一個文件中,還是放到單獨的文件中? –

回答

0
@echo off 
    setlocal enableextensions 

    set "_where=c:\some\where\*.txt" 
    set "_filter=abcd" 

rem find files which needs filter 
for /f "tokens=*" %%f in ('findstr /m "%_filter%" "%_where%"') do (

    rem generate a temporary file with the valid content 
    findstr /v /c:"%_filter%" "%%~ff" > "%%~ff.tmp" 

    rem rename original file to .old 
    ren "%%~ff" *.old > nul 

    rem rename temporary file as original file 
    ren "%%~ff.tmp" "%%~nxf" > nul 

) 
rem if needed, delete *.old files 
1

我會嘗試使用PowerShell如下:

$currentPath = "the path these files currently in" 
$newPath  = "the path you want to put the new files" 

$files = Get-ChildItem $currentPath 

foreach ($item in $files) { 
    Get-Content $item | Where-Object {$_ -notmatch 'abcd'} |Set-Content $newPath\$item 
} 
0

您可以使用sed for Windows

sed -i.bak "/abcd/!d" *.txt 

查找.txt文件中的所有含abcd行,做一個備份文件.bak和存儲原始文件中檢測到的行。

0
@echo on 
For %%a in (*.txt) do (CALL:FILTER "%%a") 
echo/Done.&pause>nul&exit/b 
:FILTER 
type "%~1"|find "abcd" 1>nul 2>nul 
if %errorlevel% EQU 0 find /n "abcd" "%~1">"Found abcd in %~1.txt" 

命令查找返回錯誤級別= 0,如果他找到的東西

0

如果文件是大的,我這樣是這樣的:

$Folder = 'C:\MyOldFiles' 
$NewFolder = 'C:\MyNewFiles' 
New-Item -ItemType Directory -Path $NewFolder -Force 

foreach ($file in Get-ChildItem $Folder) 
{ 
    Get-Content $file -ReadCount 1500 | 
    foreach { $_ -notmatch 'abcd' } | 
    Add-Content "$NewFolder\$($file.name)" 
} 
相關問題