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

[文本处理] 批处理怎样将指定字符替换成换行?

[复制链接]
发表于 2011-10-28 00:08:48 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-22 16:10 编辑

目的:将特定字符连接的语句换行并输出
举例:特定字符&

  1. @echo off&echo 123
  2. 变成
  3. @echo off
  4. echo 123
复制代码
说明:特定字符多种(先以&为题解决好了),连接语句数量未知
我的办法:先把&替换成一个特殊字符,然后把整个语句以这个字符delims,取1,*,然后1输出,在把剩余的重新传递给分割,直至*为空。
已搜索论坛,有个利用十六进制的(^+两空行),测试该文件显示可以,输出就错误了。

请大家提供一个更好的思路~
发表于 2011-10-28 03:14:27 | 显示全部楼层
本帖最后由 wc726842270 于 2011-10-28 03:16 编辑

这个一定要用批处理么?其实我个人认为用JS的字符串的split还有数组的join会更简单(当然是在连接符相同的情况下了,其它的只能具体情况,具体分析了)
发表于 2011-10-28 08:08:59 | 显示全部楼层
可以直接替换为换行符
  1. @echo off&setlocal enabledelayedexpansion
  2. set hh=^


  3. for %%a in ("!hh!") do for /f "delims=" %%b in ("!str:&=%%~a!") do echo %%b
复制代码
但是如何判断&是否被转义呢?
 楼主| 发表于 2011-10-28 09:59:04 | 显示全部楼层

标题

回复 3# CrLf


    额,一见&就换行好了……
这个^+两空行的办法,我查过,但是结果有问题,显示可以,但是不能输出至文件,输出的话就相当于“去掉&”…………不过倒是没去查看十六进制
发表于 2011-10-28 11:35:23 | 显示全部楼层
回复 4# bluewing009


    那是把 & 替换为换行符,在 win7 的记事本下特殊字符不可见,如果要断行,可以像 3 楼那样用 for /f 解析,也可以用 more 将 0A 补全为 0D0A,当然也有一次性直接替换 & 为 0D0A 的办法,效率高,可是万一碰到超长行可能会杯具:
  1. @echo off&setlocal enabledelayedexpansion
  2. set hh=^


  3. for %%a in ('copy /a %0 nul') do (
  4.    for %%b in ("!hh!") do (
  5.       echo;!str:&=%%a%%~b!
  6.    )
  7. )
复制代码
发表于 2011-10-28 13:23:59 | 显示全部楼层
在NOtepad++里直接替换呢?
发表于 2011-10-28 23:19:46 | 显示全部楼层
  1. sed "s/&/\n/g" a.txt
复制代码
 楼主| 发表于 2011-10-28 23:40:54 | 显示全部楼层

标题

回复 7# HAT


    我第一反应是字符替换,然后就是sed…………怎么说……万能的sed……有时候也挺烦的,因为她是第三方,有些时候写东西我是能不用这种第三方命令行,就不用,实在不行就Echo一个vbs来,有些时候,只是为了一个目的还好,要是仅是一个步骤就……也不知道说什么,反正就是用,简单,但是要带一个额外的文件,可能有些人的想法就和我的相反……哎~又爱又恨吧
 楼主| 发表于 2011-11-14 11:32:39 | 显示全部楼层
测试7下不成功…………
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 11:36 , Processed in 0.032871 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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