Board logo

标题: [文本处理] [已解决]BAT批处理如何把文本每两行合并成一行? [打印本页]

作者: pengyou86    时间: 2014-4-22 13:22     标题: [已解决]BAT批处理如何把文本每两行合并成一行?

想让批处理实现txt文本处理,举例在附件中 麻烦高手帮忙写给批处理 谢谢
XP系统
一.txt文本内容 经过批处理处理后  变成二.txt文本内容格式 把处理结果导出到 二.txt文本中

118236039954793 446169323
118236039954795 469349980
118236039954797 733730203
118236039954799 416669585
118236039954801 870682049
118236039954803 265021929
118236039954805 645417838
118236039954787 865587970
118236039954819 224340819
118236039954821 552145002
以上是一.txt文本内容
以下经过批处理处理后
二.txt文本内容
118236039954793 446169323        118236039954795 469349980
118236039954797 733730203        118236039954799 416669585
118236039954801 870682049        118236039954803 265021929
118236039954805 645417838        118236039954787 865587970
118236039954819 224340819        118236039954821 552145002
作者: gflrlm    时间: 2014-4-22 17:36

把多行文本拼接成用连接的一行 ,楼主可以参考如下代码。
方法1  :
@echo off
:: 把多行文本拼接成用;连接的一行
:: <nul 不能省略,省略掉就无法运行下去
for /f "tokens=*" %%i in (源文件.txt) do set /p "var=%%i;" <nul >>目标文件.txt
exit

方法2  :
set tmpstr=
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do set tmpstr=!tmpstr! %%i
echo %tmpstr%
pause
exit

方法3  :
还有一种不启用变量延迟的方法,能兼容除英文双引号外的所有特殊字符:
@echo off
:: code by jm 2006-12-14
for /f "delims=" %%i in (1.txt) do call set "var=%%var%%%%i"
echo "%var%"
pause
作者: DAIC    时间: 2014-4-22 17:48

  1. gawk "{printf (NR%2)?$0 :$0\"\n\"}" a.txt > b.txt
复制代码

作者: DAIC    时间: 2014-4-22 17:48

  1. sed "$!N;s/\n/ /" a.txt > b.txt
复制代码

作者: terse    时间: 2014-4-22 17:52

回复 1# pengyou86
  1. @echo off
  2. for /f "delims=U" %%i in ('cmd /u /c echo 唉') do set "tab=%%i"
  3. setlocal enabledelayedexpansion
  4. (for /f "delims=" %%i in (处理前.txt) do (
  5.     if defined str (
  6.        echo,!str!%tab%%%i&set "str="
  7.     ) else set "str=%%i"
  8. )
  9.     if defined str echo !str!
  10. )>处理后.txt
  11. pause
复制代码

作者: CrLf    时间: 2014-4-22 17:56

  1. @echo off
  2. %1 cmd /v /c %0 :
  3. (for /f "delims=" %%a in (一.txt) do (
  4.    set /a "1/(n=^!n)"||echo !str!    %%a
  5.    set "str=%%a"
  6. ))>二.txt 2>nul
  7. pause
复制代码

作者: pengyou86    时间: 2014-4-22 21:32

谢谢各位老大,但我测试你们的批处理没有一个能使用的。提示图片中这种情况。
我电脑是XP系统
作者: DAIC    时间: 2014-4-22 21:34

回复 7# pengyou86


    用记事本打开bat,文件,另存为,看看编码是不是ANSI
作者: pengyou86    时间: 2014-4-22 21:36

回复 8# DAIC


    是ANSI 格式的
作者: DAIC    时间: 2014-4-22 21:46

回复 9# pengyou86


    txt文件也是ANSI编码吗?
作者: pengyou86    时间: 2014-4-22 21:57

回复 10# DAIC

是的txt文本也是ANSI
作者: pengyou86    时间: 2014-4-22 22:03

回复 10# DAIC
作者: DAIC    时间: 2014-4-22 22:10

7楼那个截图是测试的哪个代码?
作者: pengyou86    时间: 2014-4-22 22:12

回复 13# DAIC


    @echo off
for /f "delims=U" %%i in ('cmd /u /c echo 唉') do set "tab=%%i"
setlocal enabledelayedexpansion
(for /f "delims=" %%i in (a.txt) do (
    if defined str (
       echo,!str!%tab%%%i&set "str="
    ) else set "str=%%i"
)
    if defined str echo !str!
)>处理后.txt
pause
作者: CrLf    时间: 2014-4-22 23:15

回复 7# pengyou86


    本机测试无误,你存的 bat 是 ansi 吗?看错误提示截图,感觉应该是存成 utf-8 了
作者: xxpinqz    时间: 2014-4-22 23:45

回复 7# pengyou86
运行显示乱码了,明显你保存的批处理文件不是ansi格式的。
或者你复制的代码本身不是ansi格式的。
代码没几行,自个儿新建一个ansi文本一个一个字符自己输入,别复制粘贴。
作者: pengyou86    时间: 2014-4-23 19:45

回复  pengyou86
terse 发表于 2014-4-22 17:52

测试成功 谢谢
作者: pengyou86    时间: 2014-4-23 19:46

感谢大家的帮忙,谢谢各位!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2