Board logo

标题: [文本处理] 批处理如何将文档中的null + 之后的制表符 替换为换行符? [打印本页]

作者: zjfy22    时间: 2013-9-17 14:42     标题: 批处理如何将文档中的null + 之后的制表符 替换为换行符?

请教几个问题,原格式如下:
1053        001        09-04-2013 13:20:11        460.0000        0        NULL        HOT        1053        001
1053        002        09-04-2013 14:39:53        863.0000        0        NULL        HOT        1053        002


1、 如何将指定文件夹(D:\File\)下的所有的txt替换,不知道txt的 名称,将文本中NULL和后面的制表符替换成换行符(格式如下)

1053        001        09-04-2013 13:20:11        460.0000        0
HOT        1053        001
1053        002        09-04-2013 14:39:53        863.0000        0       
HOT        1053        002
2. 不生成新的txt 直接在原txt中修改 保存。
新人 请高手指点!
作者: terse    时间: 2013-9-17 15:06

本帖最后由 terse 于 2013-9-18 13:32 编辑

不处理特殊字符
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  3. for /f "tokens=*" %%a in ('dir /b /a-d d:\file\*.txt') do (
  4. (for /f "usebackq  delims=" %%i in ("%%a") do (
  5.     set "str=%%i"
  6.     set str=!str:%tab%null=^
  7. !
  8. for /f "tokens=*" %%j in ("!str!") do echo %%j
  9. ))>$
  10. move $ "%%a"
  11. )
  12. pause
复制代码
先FINDSTR处理下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  3. set "ph=d:\file"
  4. for /f "tokens=*" %%a in ('findstr /imc:"%tab%null" %ph%\*.txt') do (
  5. (for /f "usebackq  delims=" %%i in ("%%a") do (
  6.     set "str=%%i"
  7.     set str=!str:%tab%null=^
  8. !
  9. for /f "tokens=*" %%j in ("!str!") do echo %%j
  10. ))>$
  11. move $  "%%a"
  12. )
  13. pause
复制代码

作者: Batcher    时间: 2013-9-17 15:41

如果2楼的代码没能解决问题,请把你的原始文件压缩一下传上来,以便大家测试。
作者: zjfy22    时间: 2013-9-18 11:26

感谢2楼回复,不过问题没解决,已上传原始档案 和结果档案。希望 高手帮忙 感谢~~
作者: weichenxiehou    时间: 2013-9-18 11:52

回复 4# zjfy22
很适合sed解决的问题,就不必妄求批处理了。
  1. sed -i "s/NULL\t/NULL\n/g" d:\files\*.txt
复制代码

作者: terse    时间: 2013-9-18 13:19

回复 4# zjfy22
行尾的制表符处理掉了
代码修正在2楼
作者: zjfy22    时间: 2013-9-18 14:13

回复 2# terse


感谢!另外请教一下,如何将每列间的制表符替换成 ,分隔?
作者: terse    时间: 2013-9-18 14:17

本帖最后由 terse 于 2013-9-18 14:38 编辑

回复 7# zjfy22
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  3. set "ph=d:\file"
  4. for /f "tokens=*" %%a in ('findstr /imc:"%tab%null" %ph%\*.txt') do (
  5. (for /f "usebackq  delims=" %%i in ("%%a") do (
  6.     set "str=%%i"
  7. set "str=!str:%tab%=,!"
  8.     set str=!str:,null=^
  9. !
  10. for /f "tokens=* delims=," %%j in ("!str!") do echo %%j
  11. ))>$
  12. move $  "%%a"
  13. )
  14. pause
复制代码

作者: zjfy22    时间: 2013-9-18 14:55

回复 8# terse
谢谢,原始档案不变,现想要实现结果2  要如果修改,
我将上面的代码加入后,在换行前面会有一个逗号,
作者: terse    时间: 2013-9-18 15:33

回复 9# zjfy22

我这里怎么没有 8楼的代码
作者: zjfy22    时间: 2013-9-18 15:46

回复 8# terse
  感谢!




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