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

[挑战]批处理如何不换行输出以等号或引号开头的行?

[复制链接]
发表于 2010-12-28 23:52:37 | 显示全部楼层 |阅读模式
如何不换行输出以等号或引号开头的行?即行末没有回车。
文本中不是所有行都这样,还可能有其他特殊字符。
发表于 2010-12-29 00:26:53 | 显示全部楼层
路过
  1. @echo off
  2. set str==123123=34
  3. if "%str:~,1%"=="=" set /p=%str%<nul
  4. pause
复制代码
 楼主| 发表于 2010-12-30 00:26:02 | 显示全部楼层

回复 2楼 的帖子

这种方法直接忽略。把它输出到文本是不一样的。
发表于 2010-12-30 03:02:35 | 显示全部楼层
总是感觉怪怪的。不知符不符合题意
  1. @echo off
  2. echo ^
  3. = I am from bathome ^
  4. "成功从这里开始"
  5. pause
复制代码
发表于 2010-12-31 02:47:35 | 显示全部楼层
版主的意思应该是:
楼上的把你这个多行文本合并成一行试试?
你这个文本正好符合,既有等号开头也有引号开头,还要其他特殊字符。
发表于 2011-1-2 08:04:21 | 显示全部楼层
1,处理后的结果是要显示的屏幕还是要输出到文本?
2,如果某行行首为=,那么是把这行与上一行合成一行,还是与下一行合成一行?
发表于 2011-1-2 11:44:23 | 显示全部楼层
猜测可能是我在5楼说的那个意思
发表于 2011-6-11 22:19:15 | 显示全部楼层
本帖最后由 523066680 于 2011-6-11 22:30 编辑

我是来钻空子的
注意在ntfs磁盘下运行
echo =>a.txt
fsutil file setzerodata offset=1 length=2 a.txt
fsutil把换行替换成 值为0的符号   
=号开头,木有错,也木有换行符……
发表于 2011-6-11 22:29:05 | 显示全部楼层
引号处理不难,set/p=^"""<nul或者set/p=""^"<nul

等号试了下,感觉像是在对=替换的那种转义,,纳闷中。。
发表于 2011-6-11 22:52:04 | 显示全部楼层
对于等号,空格,间接方法给前面加个换行符set/p=!lf!=<nul 输出,
但这样不是本质方法,绕弯子。。。
发表于 2011-12-7 15:37:11 | 显示全部楼层
直接 findstr 可以吗?
  1. @echo off
  2. findstr ^^= %0
  3. pause&exit
  4. =
复制代码
当然,用 set /p 也口以的嘿,不过要先获取回车换行符:
  1. @echo off
  2. set hh=^


  3. set /p=@!hh!=<nul>tmp
  4. findstr /v "^$" tmp
复制代码
发表于 2011-12-7 21:55:13 | 显示全部楼层
感觉难度不是很大
一个空格加一个回退符号应该可以解决大多数问题

  1. @echo off
  2. for /f "tokens=*" %%l in ('more +4 %~sf0') do set /p t= %%l<nul
  3. pause
  4. goto :eof
  5. test0:
  6. =test1:
  7. "test2:
  8. "test3:"
  9. ^test4:
  10. !test5!:
复制代码
发表于 2011-12-7 23:19:43 | 显示全部楼层
回复 12# qzwqzw


    先拜楼上三拜,前辈好久不见。不过话说输出到文本的时候怎么办呢?
发表于 2011-12-12 20:47:35 | 显示全部楼层
嘿嘿
输出到文本的方法有两种
一是用变量拼接起来再用echo输出
不过如何综合处理各种特殊字符挺考验人的

  1. @echo off & setlocal EnableDelayedExpansion
  2. set line=-
  3. for /f "tokens=*" %%l in ('more +6 %~sf0') do set line=!line!%%l
  4. >test1.txt echo %line:~1%
  5. pause & goto :eof



  6. test0:
  7. =test1:
  8. "test2:
  9. "test3":
  10. ^test4:
  11. !test5!:
  12. %test6%:
  13. test7
复制代码

二是直接使用ASCODE生成的特殊echo输出
但如果在意控制键盘代码和字符集切换就比较麻烦

  1. @echo off & chcp 437>nul & graftabl 936>nul
  2. ECHO ,HP_,6P-B~1En0eqZ[SCj@_YQ2M@-@BINNNNN~BO!A>ECHO-.COM
  3. echo- ->nul
  4. (for /f "tokens=*" %%l in ('more +6 %~sf0') do echo- %%l)>test2.txt
  5. del echo-.com
  6. goto :eof
  7. test0:
  8. =test1:
  9. "test2:
  10. "test3":
  11. ^test4:
  12. !test5!:
  13. %test6%:
  14. test7
复制代码

评分

参与人数 1PB +10 技术 +1 收起 理由
CrLf + 10 + 1 膜拜几乎失传的 ascode

查看全部评分

发表于 2014-11-22 23:45:12 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in ('copy /z %0 nul') do set crlf=%%a^


  3. set<nul>tmp /p"=@!crlf!   123"
  4. findstr /v $ tmp
  5. echo 测试
  6. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 22:19 , Processed in 0.022979 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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