Пакетен файл: Почистване на всеки ред от няколко файла, които нямат низ?

Трябва да изчистя няколко txt файла наведнъж, като изчистя всички редове, които нямат знак за низ. Трябва да бъде пакетен файл на Windows.

пример:

set string="abcd"
for each *.txt file do (
  if line doesn't have string delete line
)

Не искам да генерирам нови файлове, просто актуализирам оригиналните, като изтривам редовете, които нямат низа.

Разбира се, можете да създадете временен файл и да презапишете оригиналния, без да променяте името. Няма значение как го правите, просто резултатът е същите файлове, но чисти.

Благодаря ти


person Hajas    schedule 26.10.2016    source източник
comment
Объркал си местоименията. Няма значение как вие променяте оригиналния файл. В крайна сметка това е ваша работа. И ако търсите как да премахнете редове от текстов файл, които съдържат низ, ще намерите много съществуващи примери.   -  person dbenham    schedule 26.10.2016


Отговори (1)


Редактирано коригиране на грешките, сега работи страхотно! наздраве!

@echo off

    set "string_to_find=some string"
    for /f "tokens=*" %%a in ('dir /B *.txt') do (
                set "tempfile=%temp%\%%a"
                if exist "%tempfile%" del "%tempfile%" >NUL
                findstr /C:"%string_to_find%" "%~dp0\%%a" >> "%tempfile%"
                if not errorlevel 1 (
                            del "%%a" >NUL
                            move /Y "%tempfile%" "%~dp0\%%a" >NUL
                            if exist "%tempfile%" del "%tempfile%" >NUL
                            echo File "%~dp0\%%a" processed successfully 
                ) else (
                echo Problem processing file "%~dp0\%%a"
                )
    )
person user2956477    schedule 26.10.2016
comment
прави обратното, изтрива редовете СЪС низа, но искам да ги запазя и да изтрия останалите. Също така дава грешка, казвайки, че файлът не е валидна команда на този ред File "%~dp0\%%a" processed successfully също се нуждае от ред setlocal enableDelayedExpansion преди или просто ще изтрие първия файл и ще даде няколко грешки. много е близо, как да обърна селекцията? Мерси - person Hajas; 26.10.2016
comment
грешката, която поправих, като поставих echo преди реда, прави само информация за печат, нали? забелязва проблем в командите del/move, които казват частта, която трябва да бъде изтрита, а не запазена, изтривайки това, което наистина представлява интерес. Мерси - person Hajas; 26.10.2016
comment
премахнах /V в командата findstr и работи добре! Мерси - person Hajas; 26.10.2016
comment
Прав си, моята грешка с опцията /V и забравете едно „ехо“. Извинение - person user2956477; 26.10.2016
comment
setlocal enableDelayedExpansion не трябва да е необходимо, защото никой от !vars! са използвани. Но не съм тествал тук... - person user2956477; 26.10.2016
comment
ти си прав! нямам нужда от setlocal enableDelayedExpansion благодаря! :Д - person Hajas; 27.10.2016
comment
Имам СТРАННА грешка, понякога дава грешка, казвайки, че файлът/пътят не е намерен... тогава след изпълнение няколко пъти, просто работи. - person Hajas; 27.10.2016
comment
nevermind бяха само разрешения за файлове, които бяха коригирани, ако изпълня друг bat за тестване и след това вашите работят само след това. Даването и премахването на защитата срещу запис поправи всички оригинални файлове. наздраве - person Hajas; 27.10.2016
comment
малък проблем, ако стартирам на CMD работи добре, но ако просто щракна два пъти върху файла, дава грешка, че не са намерени файловете. Опитах се да премахна ` \ ` на частите %~dp0\%%a и освен това работи в CMD все още същото под Windows. Съществува ли решение за това? Благодаря - person Hajas; 06.11.2016
comment
Не знам защо това просто спря да работи, сега просто не мога да намеря временните файлове, личи проблем само с временните файлове... :( - person Hajas; 11.08.2017