【问题标题】:find the exact line and copy it - windows batch file找到确切的行并复制它 - Windows 批处理文件
【发布时间】:2014-01-28 10:54:08
【问题描述】:

我的输入文件是

abcd 145
abcd 148
abcd 153
abcd 523
abcd 563

我想编写一个批处理文件以在输入文本文件中查找nth 行和之后的每个k 行(即行n 然后行n+kn+2k 等等on) 并将其复制到另一个 txt 文件中

【问题讨论】:

    标签: windows batch-file copy find


    【解决方案1】:
    @ECHO OFF
    SETLOCAL
    (
     SET "printme=Y"
     FOR /f "delims=" %%a IN (q21027851.txt) DO (
      IF DEFINED printme (ECHO %%a&SET "printme=") ELSE (SET printme=Y)
    
     )
    )>newfile.txt
    
    GOTO :EOF
    

    在文件q21027851.txt中输入输出到newfile.txt

    最初将printme 设置为空会改为打印偶数行。


    鉴于修订后的规范(我将通过编辑将其包含在问题中)

    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION 
    SET firstline=1
    SET skipby=5
    (
     SET /a skipme=firstline-1
     FOR /f "delims=" %%a IN (q21027851.txt) DO (
      IF !skipme!==0 SET /a skipme=%skipby%&ECHO %%a
      SET /a skipme-=1   
     )
    )>newfile.txt
    
    GOTO :EOF
    

    【讨论】:

    • 酷——这就是它的全部意义所在。现在,如果您愿意单击响应左侧的相应 emty 勾号,这会将响应标记为 accepted 并奖励我们两个 reputation 积分。
    【解决方案2】:

    试试这个

    :PRINTFILE
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET X=0
    FOR /F "skip=%2 tokens=*" %%I IN (%1) DO (
            SET /A R=!X!%%%3
            IF "!R!"=="0" ECHO.%%I
            SET /A X+=1
            )
    ENDLOCAL
    EXIT /B 0
    

    使用以下代码调用此代码

    CALL :PRINTFILE INPUT.TXT 4 5 > OUTPUT.TXT
    

    其中 4 是文件开头要跳过的行数,5 是步骤,即它将打印第 4 行、第 4+5 行、第 4+5+5 行等等。

    注意:如果您的文本文件包含 !或 ^ 它需要转义:(

    (由于声誉问题,无法将其添加为评论:-p)

    【讨论】:

      【解决方案3】:

      使用好的文件解析工具,比如awk

      C:\>awk "NR%2!=0{print}" myFile.txt
      abcd 145
      abcd 153
      abcd 563
      

      你可以下载awkherehere

      【讨论】:

      • id 喜欢跳过前 4 行并复制第 1 - 6 - 11 行,依此类推。 (n 到 n+5)
      【解决方案4】:
      :PRINTFILE
      SETLOCAL ENABLEDELAYEDEXPANSION
      SET X=0
      FOR /F "skip=%2 tokens=*" %%I IN (%1) DO (
              SET /A X=1-!X!
              IF "!X!"=="1" ECHO %%I
              )
      ENDLOCAL
      EXIT /B 0
      

      你必须调用代码

      CALL :PRINTFILE INPUT.TXT 1 > OUTPUT.TXT
      

      输出将从第 1 行开始(在上述情况下),并将从 INPUT.TXT 发出第 3、5 ... 等行,并将输出存储到 OUTPUT.TXT

      【讨论】:

      • 嘿,谢谢回复,但我喜欢跳过前 4 行,然后复制 1-6-12-18 ... 。为此,我需要在打印文件中编写“skip =%4 and x=!x!+5”??
      • 对不起我的错误。它需要在跳过前 4 行之后复制第 1 - 6 - 11 等等
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多