找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 35880|回复: 11

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

[复制链接]
发表于 2011-6-17 17:51:08 | 显示全部楼层 |阅读模式
本帖最后由 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.>
复制代码
谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-6-17 18:06:29 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2011-6-17 19:05:38 | 显示全部楼层
  1. grep -B 1 "<system32\\DRIVERS\\eamon.sys>" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
 楼主| 发表于 2011-6-17 19:56:05 | 显示全部楼层
谢谢大家 辛苦 ,尽管还是不懂
发表于 2011-6-21 21:10:38 | 显示全部楼层
  1. sed "$!N;s/\n//" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
 楼主| 发表于 2011-6-21 22:35:02 | 显示全部楼层
5# Batcher


谢谢管理员,终于明白了sed的强大,让困扰我好多天的问题得以解决,谢谢
顺便问一句,如果不借助第三方工具,单纯用bat能解决这个问题么?
发表于 2011-6-22 07:18:54 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-6-22 09:09:11 | 显示全部楼层
7# mxxcgzxxx


已测试,失败
发表于 2011-6-22 11:34:12 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-6-22 12:45:51 | 显示全部楼层
7改过了,测试达效果,不过如果有!^就不能显示了
发表于 2011-6-22 12:59:00 | 显示全部楼层
  1. gawk "NR%2{printf $0;next}1" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
发表于 2011-6-22 13:42:10 | 显示全部楼层
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 11:27 , Processed in 0.020966 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表