| 
 
hbby 
中级用户
 
   
 
  
  
积分 220 
发帖 99 
注册 2005-8-16 
状态 离线
 | 
『楼 主』:
 [已结]如何简写输出指定多行文本的批处理
 
使用 LLM 解释/回答一下
  
我想指定输出一个文本的第1、13、14、15、16、17、18、19、20、21、22行,如下批处理可以实现,但是代码复杂,请问如何简写!谢谢! 
 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "1"=="%%i" echo %%j>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "13"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "14"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "15"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "16"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "17"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "18"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "19"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "20"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "21"=="%%i" echo %%j>>2.txt 
) 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "22"=="%%i" echo %%j>>2.txt 
) 
 
 Last edited by hbby on 2007-9-15 at 09:23 PM ] 
 
    
 
  
 |   
 | 
  2007-9-13 17:30 | 
  
 | 
 | 
 
ccwan 
金牌会员
 
      
 
  
 
积分 2725 
发帖 1160 
注册 2006-9-23 来自 河北廊坊 
状态 离线
 | 
『第 2 楼』:
 
 
使用 LLM 解释/回答一下
  
sed q AUTOEXEC.BAK>2.txt 
sed -n "13,22p" AUTOEXEC.BAK>>2.txt 
 
    
 
  
  |  
                  
  
                    三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。 |   
 | 
  2007-9-13 17:43 | 
  
 | 
 | 
 
hbby 
中级用户
 
   
 
  
  
积分 220 
发帖 99 
注册 2005-8-16 
状态 离线
 | 
 | 
  2007-9-13 17:46 | 
  
 | 
 | 
 
ccwan 
金牌会员
 
      
 
  
 
积分 2725 
发帖 1160 
注册 2006-9-23 来自 河北廊坊 
状态 离线
 | 
『第 4 楼』:
 
 
使用 LLM 解释/回答一下
  
这样呢? 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do ( 
        if "%%i" equ "1" echo %%j>2.txt 
        if "%%i" geq "13" if "%%i" leq "22" echo %%j>>2.txt 
)
  
 
    
 
  
  |  
                  
  
                    三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。 |   
 | 
  2007-9-13 17:55 | 
  
 | 
 | 
 
hbby 
中级用户
 
   
 
  
  
积分 220 
发帖 99 
注册 2005-8-16 
状态 离线
 | 
『第 5 楼』:
 
 
使用 LLM 解释/回答一下
  
对了,老大,我的原文件是 
@ECHO OFF 
GOTO %CONFIG% 
:RECOVER 
PATH C:\DOSTOOLS;C:\DOSTOOLS\COMMAND 
SET TEMP=C:\DOSTOOLS\TEMP 
LH DOSTOOLS\COMMAND\DOSKEY 
LH DOSTOOLS\COMMAND\MOUSE 
LH DOSTOOLS\SMARTDRV.EXE 
C:\DOSTOOLS\GHOST -CLONE,MODE=PLOAD,SRC=D:\GHOSTSYS\SYSTEM.GHO:1,DST=1:1 -SURE -RB 
GOTO END 
 
:BACKUP 
PATH C:\DOSTOOLS;C:\DOSTOOLS\COMMAND 
SET TEMP=C:\DOSTOOLS\TEMP 
LH DOSTOOLS\COMMAND\DOSKEY 
LH DOSTOOLS\COMMAND\MOUSE 
LH DOSTOOLS\SMARTDRV.EXE 
IF NOT EXIST D:\GHOSTSYS\NUL MD D:\GHOSTSYS 
C:\DOSTOOLS\GHOST -Z9 -CLONE,MODE=PDUMP,SRC=1:1,DST=D:\GHOSTSYS\SYSTEM.GHO -SURE -FX 
ATTRIB +A +S +H +R D:\GHOSTSYS 
WIN /Z 
REBOOT 
GOTO END 
 
:TOOLS 
SET EXPAND=YES 
SET DIRCMD=/O:N 
SET LGLDRV=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15 
SET LGLDRV=%LGLDRV% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C 
CALL DOSTOOLS\SETRAMD.BAT %LGLDRV% 
PATH %RAMD%:\DOSTOOLS;%RAMD%:\DOSTOOLS\COMMAND;%CDROM%:\ 
MKDIR %RAMD%:\DOSTOOLS 
MKDIR %RAMD%:\DOSTOOLS\COMMAND 
DOSTOOLS\COMMAND\ATTRIB -A -S -H -R \COMMAND.COM 
COPY COMMAND.COM %RAMD%:\>NUL 
DOSTOOLS\COMMAND\ATTRIB +A +S +H +R \COMMAND.COM 
COPY DOSTOOLS\*.* %RAMD%:\DOSTOOLS>NUL 
COPY DOSTOOLS\COMMAND\*.* %RAMD%:\DOSTOOLS\COMMAND>NUL 
MKDIR %RAMD%:\DOSTOOLS\TEMP 
SET TEMP=%RAMD%:\DOSTOOLS\TEMP 
SET TMP=%RAMD%:\DOSTOOLS\TEMP 
LH DOSTOOLS\COMMAND\DOSKEY 
LH DOSTOOLS\COMMAND\MOUSE 
LH DOSTOOLS\COMMAND\MSCDEX /D:ECSCD003 /E 
LH DOSTOOLS\SMARTDRV.EXE 
SET COMSPEC=%RAMD%:\COMMAND.COM 
SET CDROM= 
SET LGLDRV= 
 
:END 
 
用您的批处理结果为 
@ECHO OFF 
GOTO %CONFIG% 
PATH C:\DOSTOOLS;C:\DOSTOOLS\COMMAND 
SET TEMP=C:\DOSTOOLS\TEMP 
LH DOSTOOLS\COMMAND\DOSKEY 
LH DOSTOOLS\COMMAND\MOUSE 
LH DOSTOOLS\SMARTDRV.EXE 
IF NOT EXIST D:\GHOSTSYS\NUL MD D:\GHOSTSYS 
C:\DOSTOOLS\GHOST -Z9 -CLONE,MODE=PDUMP,SRC=1:1,DST=D:\GHOSTSYS\SYSTEM.GHO -SURE -FX 
ATTRIB +A +S +H +R D:\GHOSTSYS 
WIN /Z 
REBOOT 
 
多出了一行GOTO %CONFIG% 
能再看看吗?谢谢 
 
 Last edited by hbby on 2007-9-13 at 07:14 PM ] 
 
    
 
  
 |   
 | 
  2007-9-13 18:04 | 
  
 | 
 | 
 
ThinKing 
中级用户
 
   
 
  
  
积分 471 
发帖 207 
注册 2007-5-3 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
命令行执行: 
for /f "delims=: tokens=1*" %a in ('findstr /n .* a.txt^|findstr "^1: ^13 ^14 ^15 ^16 ^17 ^18 ^19 ^20 ^21 ^22" ') do @echo\%b>>2.txt
  
 
    
 
  
 |   
 | 
  2007-9-13 20:13 | 
  
 | 
 | 
 
wxl7759 
新手上路
 
 
 
  
  
积分 4 
发帖 2 
注册 2007-1-27 
状态 离线
 | 
 | 
  2007-9-13 21:44 | 
  
 | 
 | 
 
acai 
新手上路
 
 
 
  
  
积分 6 
发帖 3 
注册 2007-9-13 
状态 离线
 | 
 | 
  2007-9-13 22:24 | 
  
 | 
 | 
 
ccwan 
金牌会员
 
      
 
  
 
积分 2725 
发帖 1160 
注册 2006-9-23 来自 河北廊坊 
状态 离线
 | 
『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
set/p kk=<AUTOEXEC.BAK&call echo %%kk%%>2.txt 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do if %%i geq 13 if %%i leq 22 echo %%j>>2.txt
  
 
    
 
  
  |  
                  
  
                    三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。 |   
 | 
  2007-9-14 09:59 | 
  
 | 
 | 
 
hbby 
中级用户
 
   
 
  
  
积分 220 
发帖 99 
注册 2005-8-16 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
老大就是厉害!已经解决!谢谢! 
但是还存在问题 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do if %%i geq 13 if %%i leq 32 echo %%j>>2.txt 
如果到从13行到32行,在其中有个:tool,“:”这个特殊符号不能被导出!能再看看吗?谢谢 
 
 Last edited by hbby on 2007-9-14 at 10:50 AM ] 
 
    
 
  
 |   
 | 
  2007-9-14 10:36 | 
  
 | 
 | 
 
ccwan 
金牌会员
 
      
 
  
 
积分 2725 
发帖 1160 
注册 2006-9-23 来自 河北廊坊 
状态 离线
 | 
『第 11 楼』:
 
 
使用 LLM 解释/回答一下
  
to hbby 
ThinKing的代码很简洁,正则表达式也是你应该掌握的技巧。我只是用另一种思路来完成罢了。 
 
    
 
  
  |  
                  
  
                    三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。 |   
 | 
  2007-9-14 10:44 | 
  
 | 
 | 
 
ccwan 
金牌会员
 
      
 
  
 
积分 2725 
发帖 1160 
注册 2006-9-23 来自 河北廊坊 
状态 离线
 | 
『第 12 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by hbby at 2007-9-14 10:36: 
老大就是厉害!已经解决!谢谢! 
但是还存在问题 
for /f "tokens=1* delims=:" %%i in ('findstr/n . AUTOEXEC.BAK') do if %%i geq 13 if %%i leq 32 echo %%j>>2.txt 
 ...  
以findstr /n 列出行数,就是以冒号为分隔符的,要想处理,一定要多写代码,所以建议还是用sed吧。很简单的,有空你可以学习一下。  
 
    
 
  
  |  
                  
  
                    三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。 |   
 | 
  2007-9-14 11:09 | 
  
 | 
 | 
 
hbby 
中级用户
 
   
 
  
  
积分 220 
发帖 99 
注册 2005-8-16 
状态 离线
 | 
『第 13 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by ccwan at 2007-9-14 11:09: 
 
以findstr /n 列出行数,就是以冒号为分隔符的,要想处理,一定要多写代码,所以建议还是用sed吧。很简单的,有空你可以学习一下。  
除了用SED就真的没有其他办法吗?各位高手再帮忙想想办法吧!谢谢大家!  
 
    
 
  
 |   
 | 
  2007-9-15 15:42 | 
  
 | 
 | 
 
terse 
银牌会员
 
     
 
  
  
积分 2404 
发帖 946 
注册 2005-9-8 
状态 离线
 | 
『第 14 楼』:
 
 
使用 LLM 解释/回答一下
  
for /f "delims=" %%i in ('findstr /n .* test.txt') do ( 
        set /a mn=%%i 2>nul 
        set "m=%%i" 
        setlocal enabledelayedexpansion 
        set m=!m:*:=! 
        if !mn! LSS 2 echo.!m!>test2.txt 
        if !mn! GEQ 13 if !mn! LEQ 22 echo.!m!>>test2.txt 
endlocal 
 
 Last edited by terse on 2007-9-17 at 10:41 AM ] 
 
    
 
  
 |   
 | 
  2007-9-15 20:04 | 
  
 | 
 | 
 
hbby 
中级用户
 
   
 
  
  
积分 220 
发帖 99 
注册 2005-8-16 
状态 离线
 | 
『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by terse at 2007-9-15 20:04: 
r /f "delims=" %%i in ('findstr /n .* test.txt') do ( 
        set /a mn=%%i 2>nul 
        set "m=%%i" 
        setlocal enabledelayedexpansion 
        set m=!m:*:=! 
      ...  
楼上的兄弟,没看明白,能写完整吗?谢谢!  
 
    
 
  
 |   
 | 
  2007-9-15 21:13 | 
  
 |