标题: [原创] 批处理中转义符号和引号之间的恶魔法则 [打印本页]
作者: woxingwoshu007 时间: 2009-4-22 20:50 标题: 批处理中转义符号和引号之间的恶魔法则
今天算了忙上了18个小时了......在研究批进度条时发现引号和转义之间的暧昧关系..终于在历时4个小时的整理中把这个教程弄完......这里要谢谢batman提供的帮助:
第一次发,不知道怎么格式才好.就发我自己学习时最常用的代码加语句测试方式.
教程如下:
- @echo off
- title 引号与转义符号的恶魔规则()
- color 5a
- echo.
- echo.
- echo by.............【极度沉沦】................(辅导batman)
- echo.
- echo.
- echo 在搜索百度.goole及相关批论坛均无发现....
- echo.
- echo.今晚在咨询师傅时:师傅说真是活到老学到老.他们以前都没有注意这方面
- echo.
- echo 在""中的特殊字符不需要加转义符号否则失去意义
- echo.
- echo 加了的效果
- set "a=echo 12345&echo ^>nul"
- %a%
- pause
- echo 没有加的效果
- set "a=echo 12345&echo >nul"
- %a%
- pause
- echo.如果加的^个数是偶数2k就相当与转换成k个普通的符号^没有转义的意思,如果加的^个数是奇数2k+1就相当与前2k转换成k个普通的^而最后个为转义字符
- echo.
- echo.
- echo 以下是偶数的效果
- set "a=echo 12345&echo ^^^^123"
- %a%
- pause
- echo 以下是奇数的效果
- set "a=echo 12345&echo ^^^123"
- %a%
- pause
- echo.
- echo.
- echo 接下来是''与""中^的区别
- echo.
- echo.
- echo 如果特殊符号在''单引号中则全部的特殊符号都得加上转义符号
- echo.
- echo.
- echo ''单引号中加入转义符号的效果
- for /f "delims=" %%a in ('ipconfig /all^|findstr /i "ip"') do echo %%a
- pause>nul
- echo.
- rem echo ''单引号中不加入转义符号的效果
- rem for /f "delims=" %%a in ('ipconfig /all|findstr /i "ip"') do echo %%a
- rem pause>nul(执行出错)
- echo 普通时候不需要考虑转义情况(指没有""双引号,单引号'')
- ipconfig /all|findstr /i "ip"
- pause>nul
- echo.
- echo 单引号的应用举例1
- for /f %%a in ('^(echo 1234^&echo 435648^&echo 43123^)^|findstr "123"^|findstr "43"') do echo %%a
- pause>nul
- echo.
- echo 单引号的应用举例2
- echo.
- for /f %%a in ('^(echo 1234^&echo 5648^&echo 4312^)^|findstr "12"^|findstr "34"') do echo %%a
- pause>nul
- echo.看看以下进度条...区别就在其中了
- echo 引号类循环..................进度
- set "a=set /p=■<nul&ping/n 1 127.1 >nul"
- echo.
- echo 程序正在初始化. . .
- echo.
- for /l %%i in (0 1 39) do %a%
- pause>nul
- @echo off
- title 初始化进行中
- color 1f
- echo 在双引号内的特殊符号不需要加转义符号(相当于默认就加上了)
- set "a=set /p=■<nul&ping/n 1 127.1 >nul&"
- echo.
- echo 程序正在初始化. . .
- echo.
- %a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%
- pause>nul
- @echo off
- title 初始化进行中
- color 1f
- echo 为了echo显示内容在引用set的变量是我们必须使用转义符号把符号转换成普通含义
- set a=set /p=■^<nul^&ping/n 1 127.1 ^>nul^&
- echo.
- echo 程序正在初始化. . .
- echo.
- %a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%
- pause>nul
- @echo off
- title 初始化进行中
- color 1f
- echo 先输出空格...再逐一替换...........
- set a=set /p=■^<nul^&ping/n 1 127.1 ^>nul^&
- echo.
- echo 程序正在初始化. . .
- echo.
- set/p= <nul&%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%%a%
- echo 100%%
- pause>nul
复制代码
我写这个教程是为了让更多初学者少走弯路....欢迎高手们指正问题.............................
菜鸟发贴,欢迎大家发现问题,好及时改正.
[ 本帖最后由 woxingwoshu007 于 2009-4-22 21:35 编辑 ]
作者: Batcher 时间: 2009-4-22 21:21
红色代码看着太刺眼,能否改成黑色?
万一哪位“高手”想给你指出一些问题怎么办?绕到哪里去?
作者: zqz0012005 时间: 2009-4-22 21:31
楼主有意思哦。。。
“echo 在搜索百度.goole及相关批论坛均无发现....”
在别的论坛发帖求助得到答案,别的论坛也有相关文章,居然说“均无发现”?
而且那个求助帖状态还是[未解决](不只一个帖子是这样)。
我并不是为那个论坛叫屈(哪个论坛对我来说都一样),只是觉得楼主这种行为有点不妥。
作者: woxingwoshu007 时间: 2009-4-22 21:34 标题: 回复 3楼 的帖子
晕..其中有一个帖子求助的就是我自己(我为了这个问题一开始多方求助..汗颜).....谢谢提议以后会改正
[ 本帖最后由 woxingwoshu007 于 2009-4-22 21:36 编辑 ]
作者: woxingwoshu007 时间: 2009-4-22 21:38 标题: 回复 2楼 的帖子
太喜欢你了..巡查..每次我发贴都会收到你的指教..我虚心接受...我开心我快乐在这里成长学习ing..................顶batcher
作者: batman 时间: 2009-4-22 21:41
我来帮楼主说两句(并不是因为楼主尊称我为师傅,汉。。。):
第一、我认为楼主这种肯于钻研的精神是极为可嘉的,现在很多新手学东西就是缺少这股子钻劲;
第二、楼主整理出来的这篇贴子还是具有实际意义的,里面的内容我觉得才是我们应该讨论的;
第三、至于楼主所触犯的论坛规则,还请楼主及时改正;
第四、对于新人我们应给予更多的是鼓励和引导,而不是义正严辞的批评。
作者: woxingwoshu007 时间: 2009-4-22 21:47 标题: 回复 6楼 的帖子
嗯..我只是希望自己能够学好知识..当然也能帮助到别人....欢迎一切指正我虚心接受
作者: 634175535 时间: 2010-4-22 10:24
说真的我真没有看懂呐!
作者: 随风 时间: 2010-4-22 10:43
在搜索百度.goole及相关批论坛均无发现....
这句话好像确实有点不太妥,建议改改,事实上相关话题其他论坛曾经有过更深入讨论
我记得好像是“非常批处理”论坛的某个教程,具体链接一时找不到了。
作者: willowc 时间: 2010-4-23 19:37
收藏了……我以前在研究过转义字符,觉得比较吃力
作者: sxw 时间: 2011-6-28 19:46
运行出错了,[code]C:\Documents and Settings\Administrator\桌面>...鍐嶉
作者: 931805085 时间: 2012-1-19 17:52
这些东西我原来都没注意到,谢啦
作者: cjiabing 时间: 2012-1-19 23:39
本帖最后由 cjiabing 于 2012-1-19 23:46 编辑
回复 12# sxw
万恶的搜狗输入法!
说实在的,这些东西很常见,没什么特殊的。
在For中,一些引号在usebackq的规则下功能被改变,原来双引号在for中用来解析字符串,使用Usebackq后专门用来解析带空格的路径,而单引号则被用来解析字符串,而通常单引号在FOR中是用来执行命令的。
- @echo off
- for /f "tokens=1 delims=[]" %%a in ('cmd /c "wmic process where name="cmd.exe" get CommandLine" ^| find /i "%~f0" ^| find /i /n "%~f0"') do set /a num=%%a-1
- echo 本程序一共打开了 %num% 个。
- pause
复制代码
或
- @echo off
- set "v=&|"
- for /f "tokens=*" %a in ("%v%") do echo;%a
复制代码
双引号会强力终止各种符号的作用,而直接显示它们。当然,这里面可能用了两对双引号,其他一些字符,以及一些特殊情况的组合会导致双引号失效,这里就不举例了。
给你看看一个最变态的:
-
- @echo off
- for /f "tokens=2,10 delims=: " %%a in ('"Tasklist /v /fi "IMAGENAME eq cmd.exe" /FO TABLE /NH"') do (
- if /i %%b==BatMPlayerSearch Taskkill /f /t /pid %%a
- )
- ::外面加了两层,最外层的是单引号,里层的是双引号,里层使用双引号的目的就是为了消除"IMAGENAME eq cmd.exe"这对双引号导致的错误!
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |