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

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

[复制链接]
发表于 2016-9-22 12:40:34 | 显示全部楼层 |阅读模式
本帖最后由 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



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

评分

参与人数 1PB -2 收起 理由
pcl_test -2 发帖前先使用论坛搜索

查看全部评分

发表于 2016-9-22 16:18:33 | 显示全部楼层
正则表达式替换,。 成回车换行符即可。
发表于 2016-9-22 17:07:17 | 显示全部楼层
回复 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
复制代码

评分

参与人数 1技术 +1 收起 理由
kunlun621 + 1 学习了

查看全部评分

发表于 2016-9-22 17:50:20 | 显示全部楼层
装一个
  1. echo 床前明月光,疑是地上霜。举头望明月,低头思故乡。|perl -e "$_=<>; $_=~s/,|。/\n/g;print;"
复制代码
输出:
床前明月光
疑是地上霜
举头望明月
低头思故乡

评分

参与人数 1技术 +1 收起 理由
WHY + 1 +1

查看全部评分

发表于 2016-9-22 18:19:04 | 显示全部楼层
本帖最后由 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""
复制代码

评分

参与人数 1技术 +1 收起 理由
WHY + 1 +1

查看全部评分

发表于 2016-9-22 18:31:22 | 显示全部楼层
回复 4# 523066680


    话说版主,尝试一下纯BAT解决一下。
发表于 2016-9-22 19:01:56 | 显示全部楼层
回复 6# wskwfkbdn


    我会复制 happy886rr 的代码,粘贴。
发表于 2016-9-22 19:56:12 | 显示全部楼层
回复 7# 523066680


    只能这样啦,set替换一下,然后for处理一次OK
发表于 2016-9-22 21:08:19 | 显示全部楼层
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
kunlun621 + 1 思路为替换

查看全部评分

发表于 2016-9-22 21:16:34 | 显示全部楼层
  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}]+'"
复制代码

评分

参与人数 3PB +6 技术 +2 收起 理由
kunlun621 + 1 保留换行学习了
codegay + 1 1
523066680 + 6 原来是这样保留换行

查看全部评分

发表于 2016-9-23 17:47:16 | 显示全部楼层
回复 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
复制代码

评分

参与人数 1技术 +1 收起 理由
WHY + 1 +1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 02:27 , Processed in 0.035724 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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