首先:我在Windows 7計算機上;)。批處理腳本,用於從文本文件中過濾行
我得到了幾十個文件的文件夾。每個文件包含大約240.000行。但只有一半的行是需要的。
我想要做的是:讓腳本運行這些文件,過濾掉包含字符串「abcd」的每一行,並將其保存在新目錄中或保存在同一個文件中。
首先:我在Windows 7計算機上;)。批處理腳本,用於從文本文件中過濾行
我得到了幾十個文件的文件夾。每個文件包含大約240.000行。但只有一半的行是需要的。
我想要做的是:讓腳本運行這些文件,過濾掉包含字符串「abcd」的每一行,並將其保存在新目錄中或保存在同一個文件中。
@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
我會嘗試使用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
}
@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,如果他找到的東西
如果文件是大的,我這樣是這樣的:
$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)"
}
你想一個批處理文件或PowerShell的解決方案? – foxidrive
好吧,我不介意說實話:)只要它有效:) – user2428207
你想把收集到的所有文件的所有'abcd'行放到一個文件中,還是放到單獨的文件中? –