[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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



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

评分人数

    • pcl_test: 发帖前先使用论坛搜索PB -2

正则表达式替换,。 成回车换行符即可。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 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

评分人数

TOP

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

评分人数

TOP

本帖最后由 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

评分人数

TOP

回复 4# 523066680


    话说版主,尝试一下纯BAT解决一下。
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

回复 6# wskwfkbdn


    我会复制 happy886rr 的代码,粘贴。

TOP

回复 7# 523066680


    只能这样啦,set替换一下,然后for处理一次OK
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

  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

评分人数

判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

  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}]+'"
复制代码
3

评分人数

TOP

回复 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

评分人数

TOP

返回列表