【发布时间】:2014-01-28 10:54:08
【问题描述】:
我的输入文件是
abcd 145
abcd 148
abcd 153
abcd 523
abcd 563
我想编写一个批处理文件以在输入文本文件中查找nth 行和之后的每个k 行(即行n 然后行n+k、n+2k 等等on) 并将其复制到另一个 txt 文件中
【问题讨论】:
标签: windows batch-file copy find
我的输入文件是
abcd 145
abcd 148
abcd 153
abcd 523
abcd 563
我想编写一个批处理文件以在输入文本文件中查找nth 行和之后的每个k 行(即行n 然后行n+k、n+2k 等等on) 并将其复制到另一个 txt 文件中
【问题讨论】:
标签: windows batch-file copy find
@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
【讨论】:
accepted 并奖励我们两个 reputation 积分。
试试这个
: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)
【讨论】:
: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
【讨论】: