标题: [挑战]批处理如何不换行输出以等号或引号开头的行? [打印本页]
作者: zqz0012005 时间: 2010-12-28 23:52 标题: [挑战]批处理如何不换行输出以等号或引号开头的行?
如何不换行输出以等号或引号开头的行?即行末没有回车。
文本中不是所有行都这样,还可能有其他特殊字符。
作者: broly 时间: 2010-12-29 00:26
路过- @echo off
- set str==123123=34
- if "%str:~,1%"=="=" set /p=%str%<nul
- pause
复制代码
作者: zqz0012005 时间: 2010-12-30 00:26 标题: 回复 2楼 的帖子
这种方法直接忽略。把它输出到文本是不一样的。
作者: wc726842270 时间: 2010-12-30 03:02
总是感觉怪怪的。不知符不符合题意- @echo off
- echo ^
- = I am from bathome ^
- "成功从这里开始"
- 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 可以吗?- @echo off
- findstr ^^= %0
- pause&exit
- =
复制代码
当然,用 set /p 也口以的嘿,不过要先获取回车换行符:- @echo off
- set hh=^
-
-
- set /p=@!hh!=<nul>tmp
- findstr /v "^$" tmp
复制代码
作者: qzwqzw 时间: 2011-12-7 21:55
感觉难度不是很大
一个空格加一个回退符号应该可以解决大多数问题
- @echo off
- for /f "tokens=*" %%l in ('more +4 %~sf0') do set /p t= %%l<nul
- pause
- goto :eof
- test0:
- =test1:
- "test2:
- "test3:"
- ^test4:
- !test5!:
复制代码
作者: CrLf 时间: 2011-12-7 23:19
回复 12# qzwqzw
先拜楼上三拜,前辈好久不见。不过话说输出到文本的时候怎么办呢?
作者: qzwqzw 时间: 2011-12-12 20:47
嘿嘿
输出到文本的方法有两种
一是用变量拼接起来再用echo输出
不过如何综合处理各种特殊字符挺考验人的
- @echo off & setlocal EnableDelayedExpansion
- set line=-
- for /f "tokens=*" %%l in ('more +6 %~sf0') do set line=!line!%%l
- >test1.txt echo %line:~1%
- pause & goto :eof
-
-
-
- test0:
- =test1:
- "test2:
- "test3":
- ^test4:
- !test5!:
- %test6%:
- test7
复制代码
二是直接使用ASCODE生成的特殊echo输出
但如果在意控制键盘代码和字符集切换就比较麻烦
- @echo off & chcp 437>nul & graftabl 936>nul
- ECHO ,HP_,6P-B~1En0eqZ[SCj@_YQ2M@-@BINNNNN~BO!A>ECHO-.COM
- echo- ->nul
- (for /f "tokens=*" %%l in ('more +6 %~sf0') do echo- %%l)>test2.txt
- del echo-.com
- goto :eof
- test0:
- =test1:
- "test2:
- "test3":
- ^test4:
- !test5!:
- %test6%:
- test7
复制代码
作者: CrLf 时间: 2014-11-22 23:45
- @echo off&setlocal enabledelayedexpansion
- for /f %%a in ('copy /z %0 nul') do set crlf=%%a^
-
-
- set<nul>tmp /p"=@!crlf! 123"
- findstr /v $ tmp
- echo 测试
- pause
复制代码
作者: email10t 时间: 2015-5-18 19:02
本帖最后由 email10t 于 2015-5-19 13:01 编辑
- @echo off
- setlocal enabledelayedexpansion
- set /p a=请输入字符串 (长度不超过 94):
- set c= ^^!"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~
- call:strlen
-
- 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
- echo !a!`>>~out.txt
- start notepad ~out.txt
- ping /n 1 127.1 >nul
- del ~out.txt
- goto :eof
-
- :strlen
- set $=!a!#
- set N=&for %%a in (64 32 16)do if !$:~%%a!. NEQ . set/aN+=%%a&set $=!$:~%%a!
- set $=!$!fedcba9876543210&set/aN+=0x!$:~16,1!
- goto :eof
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |