[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何让文本中奇、偶数行合并成一行

本帖最后由 batpro 于 2011-6-22 22:30 编辑

说明:鉴于旧贴有表达不清的嫌疑,现修改题目要求,忘高手搭救!

1.txt中【原始文本】
  1. [AmdK8 Compatible Device / AmdK8][Stopped/Manual Start]
  2. <System32\drivers\amdk8.sys><Advanced Micro Devices>
  3. [aswFsBlk / aswFsBlk][Running/Auto Start]
  4.   <system32\DRIVERS\aswFsBlk.sys><ALWIL Software>
  5. [NDIS Miniport Driver for Atheros L2 Fast Ethernet Controller / AtcL002][Running/Manual Start]
  6.   <system32\DRIVERS\l251x86.sys><Atheros Communications, Inc.>
复制代码
如何得到这样的2.txt:


2.txt的内容为
  1. [AmdK8 Compatible Device / AmdK8][Stopped/Manual Start]<System32\drivers\amdk8.sys><Advanced Micro Devices>
  2. [aswFsBlk / aswFsBlk][Running/Auto Start]<system32\DRIVERS\aswFsBlk.sys><ALWIL Software>
  3. [NDIS Miniport Driver for Atheros L2 Fast Ethernet Controller / AtcL002][Running/Manual Start]<system32\DRIVERS\l251x86.sys><Atheros Communications, Inc.>
复制代码
谢谢
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off
  2. for /f "tokens=*" %%a in (1.txt) do (
  3.    set line=%%a
  4.    setlocal enabledelayedexpansion
  5.    set "out=!out!!line!"
  6.    set /a n=!n,"1/n"||echo !out!&&set out=
  7.    for /f "tokens=1*" %%b in ("!n! !out!") do (
  8.       endlocal
  9.       set "n=%%b"
  10.       set "out=%%c"
  11.    )
  12. )>2.txt 2>nul
复制代码

TOP

  1. gawk "NR%2{printf $0;next}1" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

7改过了,测试达效果,不过如果有!^就不能显示了
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

本帖最后由 caruko 于 2011-6-22 11:57 编辑
  1. @echo off>2.txt&set n=1
  2. FOR /f "delims=" %%1 in (1.txt) do (
  3. 2>nul    set /a n+=1,f=n%%2,1/f&&echo,%%1||set/p=%%1<nul
  4. ) >>2.txt
复制代码
已测试
1

评分人数

TOP

7# mxxcgzxxx


已测试,失败

TOP

本帖最后由 mxxcgzxxx 于 2011-6-22 12:44 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. cd.>2.txt
  3. set n=1
  4. FOR /f "tokens=*" %%1 in (1.txt) do (
  5.                   if !n!==1 (
  6.                    set /p=%%1<nul >>2.txt
  7.                    )  else (
  8.                    echo %%1>>2.txt
  9.                    set n=0
  10.                    )
  11.          set /a n+=1
  12.           )
复制代码
自己写语法错了,改了,可以达到效果不过 !^等特殊符号过不了关
1

评分人数

世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

5# Batcher


谢谢管理员,终于明白了sed的强大,让困扰我好多天的问题得以解决,谢谢
顺便问一句,如果不借助第三方工具,单纯用bat能解决这个问题么?

TOP

  1. sed "$!N;s/\n//" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢大家 辛苦 ,尽管还是不懂

TOP

  1. grep -B 1 "<system32\\DRIVERS\\eamon.sys>" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 tmplinshi 于 2011-6-17 18:17 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (
  4.     "<system32\DRIVERS\eamon.sys><N/A>"
  5.     "<system32\DRIVERS\easdrv.sys><N/A>"
  6.     "<system32\DRIVERS\epfwtdir.sys><N/A>"
  7. ) do set %%~i=#
  8. for /f "tokens=*" %%i in (1.txt) do (
  9.     if defined %%i (
  10.         >>2.txt echo !last_line!             %%i
  11.         >>3.txt echo 驱动名称:!last_line!
  12.         >>3.txt echo 对应路径:%%i
  13.     )
  14.     set last_line=%%i
  15. )
  16. pause
复制代码

TOP

返回列表