2015-09-12 91 views
0

我想用一個批處理文件,以找到一個文本文件中的單詞,然後我想刪除該行包含單詞,也可以刪除一些其他線路下面的例子:如何在文本文件中查找單詞並刪除包含該單詞和接下來兩行的行?

_italic_ or **bold** 
put returns between paragraphs 
indent code by 4 spaces 
indent code by 4 spaces 
_italic_ or **bold**2 

所以結果應該是:

_italic_ or **bold** 
_italic_ or **bold**2 
+0

請提供你爲你的問題所作的努力簡短。提供您嘗試過的代碼塊或類似的東西。請參閱:http://stackoverflow.com/help/how-to-ask –

+0

我只是可以用另一個替換一個詞,所以這在這裏沒有用嗎? –

回答

1
@echo off 
setlocal EnableDelayedExpansion 

rem Get the number of lines before the one that contain "returns" 
for /F "delims=:" %%a in ('findstr /N "returns" input.txt') do set /A "lines=%%a-1" 

rem Open a code block to read from input.txt and write to output.txt 
< input.txt (

    rem Read and write the first "lines" lines 
    for /L %%i in (1,1,%lines%) do (
     set "line=" 
     set /P "line=" 
     echo(!line! 
    ) 

    rem Omit the number of desired lines (3 in this example) 
    for /L %%i in (1,1,3) do set /P "line=" 

    rem Copy the rest of lines 
    findstr "^" 

) > output.txt 

rem Replace the original file by the new one 
move /Y output.txt input.txt 
+0

正如用戶@Mofi在(現在已刪除)註釋中指示的那樣,此解決方案僅刪除搜索字符串的最後一次出現。必須修改代碼才能刪除第一個或所有的事件。 – Aacini

0

下面是該任務只用於那些線由命令FOR跳過不包含空行的輸入的文本文件的工作間歇代碼。

它刪除所有塊與3行,其中第一行包含returns

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
set "SkipLineCount=0" 
set "OutputFile=OutputTextFile.txt" 
del "%OutputFile%" 2>nul 
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
     set "Line=%%I" 
     set "Line=!Line:returns=!" 
     if "!Line!" NEQ "%%I" (set "SkipLineCount=1") else echo(%%I>>"%OutputFile%" 
    ) else (
     set /A SkipLineCount+=1 
     if !SkipLineCount! EQU 3 set "SkipLineCount=0" 
    ) 
) 
move /Y "%OutputFile%" "InputTextFile.txt" 
endlocal 

此批處理文件處理每個非空行。命令FOR自動跳過所有不包含任何字符的行。

注1:eol=^與命令線FOR是必要的,讀取和輸出也只是線包含逗號或分號否則會由命令也忽略FOR

如果當前不應跳過行,則將當前行分配給變量Line。接下來,如果該行至少包含一個returns,那麼所有出現的字returns都將從該行中刪除不區分大小寫。

如果字符串替換爲從文件讀取的未修改行後,變量Line的字符串不相等,則行被忽略,因爲這意味着該行至少包含一個returns

否則從輸入文件中讀取的行被追加到輸出文件。

注2:echo%%I之間(這裏使用僅含有1個或多個空格或製表符作爲以其他方式與一個空間,而不是(命令回聲會寫爲這樣的情況下其當前狀態輸出還輸入線OFF轉換爲輸出文件,而不是從輸入文件讀取的空格/製表符。

在至少有一個returns的行後面的下兩行也被複制到輸出文件時被忽略。

作爲最後一個命令,將移除了3行的已創建輸出文件移到輸入文本文件上。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • del /?
  • echo /?
  • for /?
  • if /?
  • move /?
  • set /?
  • setlocal /?

請閱讀微軟有關Using Command Redirection Operators的文章。

2

你可以試試這個批號:

@echo off 
set skipline=2 
set search=returns 
set File=Input.txt 
setlocal EnableDelayedExpansion 
for %%a in ("%File%") do (
    set linecount=1 
    set skip=0 
    For /f "usebackq tokens=* delims=" %%b IN (`type "%%a" ^| find /V /N ""`) do (
     set a=%%b 
     set a=!a:*]=! 
     if "!a!" NEQ "" (
      set search=!a:%search%=! 
      if "!search!" NEQ "!a!" set /a skip=%skipline%+!linecount! 
     ) 
     if !linecount! GTR !skip! echo(!a! 
     set /a linecount+=1 

    )>>tmp 
    move /Y "tmp" "%%a">Nul 
) 
EndLocal 
exit 

這是工作與包含空行和多行的文件。

更改設置skipline = 2找到您搜索的單詞後需要跳過多少行。

而對於多個文件只是改變設置File = Input.txt

在當前目錄擴展 文件.TXT

例子:

set File=*.txt 
相關問題