Board logo

标题: [文本处理] [已解决]批处理如何将文本里的指定标点符号/字符替换成回车换行符 [打印本页]

作者: kunlun621    时间: 2016-9-22 12:40     标题: [已解决]批处理如何将文本里的指定标点符号/字符替换成回车换行符

本帖最后由 pcl_test 于 2016-9-24 16:59 编辑

将文本内容从行转化为列
文本1.txt内容:
床前明月光,疑是地上霜。举头望明月,低头思故乡。
转化成如下格式:
床前明月光
疑是地上霜
举头望明月
低头思故乡

运行成功的代码如下:

@echo off
for /f "tokens=1 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
for /f "tokens=2 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
for /f "tokens=3 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
for /f "tokens=4 delims=,。" %%a in (1.txt) do (echo %%a >>2.txt
)
pause

问题一:怎样简化呢?上面代码要重复好几遍,太繁琐


问题二:上面的代码只能新建文本2.txt显示要转化的内容,能不能在1.txt中直接转化呢?
思路将%%a %%b %%c %%d返回的结果直接引用到下面的%%a中,再用tokens截取
问题代码如下:
@echo off
for /f "tokens=1,2,3,4 delims=。," %%a in (1.txt) do echo %%a %%b %%c %%d
for /f "tokens=1" %%a in do echo %%a >>1.txt
for /f "tokens=2" %%b in do echo %%a >>1.txt
for /f "tokens=3" %%c in do echo %%a >>1.txt
for /f "tokens=4" %%d in do echo %%a >>1.txt
pasue



从能看懂的代码开始的阅读评分,结果后面没分了 感谢各位的解答!

作者: codegay    时间: 2016-9-22 16:18

正则表达式替换,。 成回车换行符即可。
作者: happy886rr    时间: 2016-9-22 17:07

回复 1# kunlun621
  1. @echo off
  2. for /f "delims=" %%L in ('type 1.txt') do (
  3. set "line=%%L"
  4. setlocal enabledelayedexpansion
  5. set "line=!line:,=, !"
  6. set "line=!line:。=。 !"
  7. for %%l in (!line!) do (echo %%l)
  8. echo;&endlocal
  9. )
  10. pause>NUL
复制代码

作者: 523066680    时间: 2016-9-22 17:50

装一个
  1. echo 床前明月光,疑是地上霜。举头望明月,低头思故乡。|perl -e "$_=<>; $_=~s/,|。/\n/g;print;"
复制代码
输出:
床前明月光
疑是地上霜
举头望明月
低头思故乡
作者: DiamondbacK    时间: 2016-9-22 18:19

本帖最后由 DiamondbacK 于 2016-9-22 19:47 编辑
  1. for /f "tokens=1,2,3,4 delims=,。?!" %%A in (1.txt) do (
  2.   echo %%A
  3.   echo %%B
  4.   echo %%C
  5.   echo %%D
  6. )
复制代码
  1. >con sed -r "s/[,。?!]+/\n/g" 1.txt
复制代码
  1. >con gawk -v RS=[,。?!] 1 1.txt
复制代码
  1. >con gawk "{ gsub(/[,。?!]/, \"\n\"); } 1" 1.txt
复制代码
  1. PowerShell -c "(Get-Content 1.txt) -replace '[,。?!]', \"`n\""
复制代码

作者: wskwfkbdn    时间: 2016-9-22 18:31

回复 4# 523066680


    话说版主,尝试一下纯BAT解决一下。
作者: 523066680    时间: 2016-9-22 19:01

回复 6# wskwfkbdn


    我会复制 happy886rr 的代码,粘贴。
作者: wskwfkbdn    时间: 2016-9-22 19:56

回复 7# 523066680


    只能这样啦,set替换一下,然后for处理一次OK
作者: wskwfkbdn    时间: 2016-9-22 21:08

  1. @ECHO OFF & setlocal enabledelayedexpansion
  2. SET "aa=床前明月光,疑是地上霜。举头望明月,低头思故乡。"
  3. SET aa=!aa:,= !
  4. SET aa=!aa:。= !
  5. REM ECHO.!aa!!aa!
  6. FOR %%i IN (!aa!) DO ECHO.%%i
  7. pause
复制代码

作者: WHY    时间: 2016-9-22 21:16

  1. @echo off & setlocal enabledelayedexpansion
  2. set "s=床前明月光,疑是地上霜。举头望明月,低头思故乡。"
  3. set s=!s:。=^
  4. !
  5. echo;!s:,=^
  6. !
  7. pause
复制代码
  1. PowerShell -c "'床前明月光,疑是地上霜。举头望明月,低头思故乡。' -Split '[\p{P}]+'"
复制代码

作者: CrLf    时间: 2016-9-23 17:47

回复 10# WHY


    加上回车符疗效更佳
  1. @echo off & setlocal enabledelayedexpansion
  2. set "s=床前明月光,疑是地上霜。举头望明月,低头思故乡。"
  3. for /f %%D in ('copy /z %0 nul') do (
  4. set s=!s:。=%%D^
  5. !
  6. echo;!s:,=%%D^
  7. !
  8. )
  9. pause
复制代码





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