标题: [文本处理] 批处理如何将文档中的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 编辑
不处理特殊字符- @echo off&setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- for /f "tokens=*" %%a in ('dir /b /a-d d:\file\*.txt') do (
- (for /f "usebackq delims=" %%i in ("%%a") do (
- set "str=%%i"
- set str=!str:%tab%null=^
-
- !
- for /f "tokens=*" %%j in ("!str!") do echo %%j
- ))>$
- move $ "%%a"
- )
- pause
复制代码
先FINDSTR处理下- @echo off&setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- set "ph=d:\file"
- for /f "tokens=*" %%a in ('findstr /imc:"%tab%null" %ph%\*.txt') do (
- (for /f "usebackq delims=" %%i in ("%%a") do (
- set "str=%%i"
- set str=!str:%tab%null=^
-
- !
- for /f "tokens=*" %%j in ("!str!") do echo %%j
- ))>$
- move $ "%%a"
- )
- pause
复制代码
作者: Batcher 时间: 2013-9-17 15:41
如果2楼的代码没能解决问题,请把你的原始文件压缩一下传上来,以便大家测试。
作者: zjfy22 时间: 2013-9-18 11:26
感谢2楼回复,不过问题没解决,已上传原始档案 和结果档案。希望 高手帮忙 感谢~~
作者: weichenxiehou 时间: 2013-9-18 11:52
回复 4# zjfy22
很适合sed解决的问题,就不必妄求批处理了。- 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 - @echo off&setlocal enabledelayedexpansion
- for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
- set "ph=d:\file"
- for /f "tokens=*" %%a in ('findstr /imc:"%tab%null" %ph%\*.txt') do (
- (for /f "usebackq delims=" %%i in ("%%a") do (
- set "str=%%i"
- set "str=!str:%tab%=,!"
- set str=!str:,null=^
-
- !
- for /f "tokens=* delims=," %%j in ("!str!") do echo %%j
- ))>$
- move $ "%%a"
- )
- 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 |