批处理之家's Archiver

dingniu2 发表于 2020-3-19 21:13

如何从文本中提取第一行数字用于sed中的参数

如题,一个文件夹有文件a.out、a.out.txt、b.out、b.out.txt、c.out、c.out.txt......,其中*.out内容包括很多字符,*.out.txt只有一个数值。我的目的是删除*.out中的一行,要求删除这一行的行号是其对应的*.out.txt里的数值。请问大家这个命令该如何写?

wujunkai 发表于 2020-3-20 08:49

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227312&ptid=55122]1#[/url] [i]dingniu2[/i] [/b][code]@echo off
@setlocal enabledelayedexpansion

:main
    for /R %%i in (*.out) do call:deal %%i
pause
goto:eof

:deal
    set /P want=<%~1.txt
    set /A want=want-1
    call:fopen %~1 temp
    del %~1
    set /A len=fopen_len-1
    for /L %%i in (0,1,%len%) do if %%i NEQ %want% echo=!temp[%%i]!>>%~1
goto:eof

:fopen
    rem %~1 为读取文件名,%~2为储存的变量名
    rem 若无%~2,使用%~n1作为储存的变量名
    set fopen_file=%~1
    if "%~2"=="" (
        set fopen_vale=%~n1
    ) else (
        set fopen_vale=%~2
    )
    set fopen_len=0
    for /F "tokens=1* delims=:" %%i in ('findstr /n .* %fopen_file%') do (
        set %fopen_vale%[!fopen_len!]=%%j
        set /A fopen_len+=1
    )
goto:eof[/code]默认行号从1开始。
    建议先备份,出现意外概不负责。

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.