Board logo

标题: [挑战]批处理如何不换行输出以等号或引号开头的行? [打印本页]

作者: zqz0012005    时间: 2010-12-28 23:52     标题: [挑战]批处理如何不换行输出以等号或引号开头的行?

如何不换行输出以等号或引号开头的行?即行末没有回车。
文本中不是所有行都这样,还可能有其他特殊字符。
作者: broly    时间: 2010-12-29 00:26

路过
  1. @echo off
  2. set str==123123=34
  3. if "%str:~,1%"=="=" set /p=%str%<nul
  4. pause
复制代码

作者: zqz0012005    时间: 2010-12-30 00:26     标题: 回复 2楼 的帖子

这种方法直接忽略。把它输出到文本是不一样的。
作者: wc726842270    时间: 2010-12-30 03:02

总是感觉怪怪的。不知符不符合题意
  1. @echo off
  2. echo ^
  3. = I am from bathome ^
  4. "成功从这里开始"
  5. pause
复制代码

作者: powerbat    时间: 2010-12-31 02:47

版主的意思应该是:
楼上的把你这个多行文本合并成一行试试?
你这个文本正好符合,既有等号开头也有引号开头,还要其他特殊字符。
作者: hanyeguxing    时间: 2011-1-2 08:04

1,处理后的结果是要显示的屏幕还是要输出到文本?
2,如果某行行首为=,那么是把这行与上一行合成一行,还是与下一行合成一行?
作者: powerbat    时间: 2011-1-2 11:44

猜测可能是我在5楼说的那个意思
作者: 523066680    时间: 2011-6-11 22:19

本帖最后由 523066680 于 2011-6-11 22:30 编辑

我是来钻空子的
注意在ntfs磁盘下运行
echo =>a.txt
fsutil file setzerodata offset=1 length=2 a.txt
fsutil把换行替换成 值为0的符号   
=号开头,木有错,也木有换行符……
作者: plp626    时间: 2011-6-11 22:29

引号处理不难,set/p=^"""<nul或者set/p=""^"<nul

等号试了下,感觉像是在对=替换的那种转义,,纳闷中。。
作者: plp626    时间: 2011-6-11 22:52

对于等号,空格,间接方法给前面加个换行符set/p=!lf!=<nul 输出,
但这样不是本质方法,绕弯子。。。
作者: CrLf    时间: 2011-12-7 15:37

直接 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
复制代码

作者: qzwqzw    时间: 2011-12-7 21:55

感觉难度不是很大
一个空格加一个回退符号应该可以解决大多数问题
  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!:
复制代码

作者: CrLf    时间: 2011-12-7 23:19

回复 12# qzwqzw


    先拜楼上三拜,前辈好久不见。不过话说输出到文本的时候怎么办呢?
作者: qzwqzw    时间: 2011-12-12 20:47

嘿嘿
输出到文本的方法有两种
一是用变量拼接起来再用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
复制代码

作者: CrLf    时间: 2014-11-22 23:45

  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
复制代码

作者: email10t    时间: 2015-5-18 19:02

本帖最后由 email10t 于 2015-5-19 13:01 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p a=请输入字符串 (长度不超过 94):
  4. set c= ^^!"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~
  5. call:strlen
  6. echo 4*7PjE^^^^]j`X(B (B (B^^!(B"(B"(B#(B$(B$(B%%(B%%(B^&(B'(B'(B)(B,(B.(B/(B0(B1(B2(B3(B3(B4(B5(B7(B7(B8(B:jc^^^^(B!c:~%N%,1!tnsg}CaJF`E^<`td-pKTtg-^^!x`L-^^!>~out.txt
  7. echo !a!`>>~out.txt
  8. start notepad ~out.txt
  9. ping /n 1 127.1 >nul
  10. del ~out.txt
  11. goto :eof
  12. :strlen
  13. set $=!a!#
  14. set N=&for %%a in (64 32 16)do if !$:~%%a!. NEQ . set/aN+=%%a&set $=!$:~%%a!
  15. set $=!$!fedcba9876543210&set/aN+=0x!$:~16,1!
  16. goto :eof
复制代码





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