标题: [文本处理] [已解决]在使用setlocal enabledelayedexpansion时,得到的结果不一样 [打印本页]
作者: skynjupt 时间: 2013-4-5 10:09 标题: [已解决]在使用setlocal enabledelayedexpansion时,得到的结果不一样
感谢2~4楼的帮助,问题得到解决。
在这里总结一下:
例1:- @echo off
- set str_01=!First
- set str_02=!First!Second
- set str_03=First!
- set str_04=First!Second!
- set str_05=!First!Second!
- set str_06=!First!Second!Three
- set str_07=First!Second!Three
- echo %str_01%
- echo %str_02%
- echo %str_03%
- echo %str_04%
- echo %str_05%
- echo %str_06%
- echo %str_07%
- pause
复制代码
[attach]6246[/attach]
例2- @echo off
- setlocal enabledelayedexpansion
- set str_01=!First
- set str_02=!First!Second
- set str_03=First!
- set str_04=First!Second!
- set str_05=!First!Second!
- set str_06=!First!Second!Three
- set str_07=First!Second!Three
- echo %str_01%
- echo %str_02%
- echo %str_03%
- echo %str_04%
- echo %str_05%
- echo %str_06%
- echo %str_07%
- endlocal
- pause
复制代码
[attach]6247[/attach]- @echo off
- setlocal enabledelayedexpansion
- set First=Bathome
- set str_01=!First
- set str_02=!First!Second
- set str_03=First!
- set str_04=First!Second!
- set str_05=!First!Second!
- set str_06=!First!Second!Three
- set str_07=First!Second!Three
- echo %str_01%
- echo %str_02%
- echo %str_03%
- echo %str_04%
- echo %str_05%
- echo %str_06%
- echo %str_07%
- endlocal
- pause
复制代码
[attach]6248[/attach]
总结:在开启变量延迟后,感叹号!会被当成变量引用符号。如果变量没有被定义,则不会显示,反之会替换变量。
http://www.bathome.net/thread-1224-1-1.html
感谢三楼说了一种情况是感叹号和冒号同时存在的情况,加深了bat对符号处理的机制。- @echo off
- setlocal enabledelayedexpansion
- echo !v:01
- echo !v:01!
- set "v=aaa"
- set v:01=bathome
- echo !v:01
- echo !v:01!
- echo !v!:01
- pause
复制代码
[attach]6249[/attach]
详见:
http://tieba.baidu.com/p/1020906001
http://www.bathome.net/thread-3768-1-1.html
---------------------------------------------------------------------------------------------华丽分割线-----------------------------------------------------------------------------
先附上代码:- @echo off
- for %%i in (.\*.xml) do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- echo %%j>1.txt
- )
- )
- pause
复制代码
查看1.txt内容是:
<?xml version="1.0" encoding="gb2312" ?><result><count>5</count><url><encode><![CDATA[http://zhangmen**ing.baidu.com/d ... sa2hpb2dnaGRpZmtvMQ$$]]></encode><decode><![CDATA[38359767.mp3?xcode=8d526eaa03b87b2967a477b1c0900709&mid=0.08622765504047]]></decode><type>8</type><lrcid>0</lrcid><flag>0</flag></url><durl><encode><![CDATA[http://zhangmen**ing2.baidu.com/ ... sa2hpb2dnaGRpZmtvMQ$$]]></encode><decode><![CDATA[38359801.mp3?xcode=8d526eaa03b87b2967a477b1c0900709&mid=0.08622765504047]]></decode><type>8</type><lrcid>0</lrcid><flag>0</flag></durl><url><encode><![CDATA[http://content.12530.com/upload/ ... b2hhY2ZslGZnaGFjbDQ$.mp3]]></encode><decode><![CDATA[000040800138_000019.mp3]]></decode><type>1</type><lrcid>0</lrcid><flag>0</flag></url><durl></durl><url><encode><![CDATA[http://www.climber.cn/audio/pZuUoqGrNw$$.mp3]]></encode><decode><![CDATA[tianlu.mp3]]></decode><type>1</type><lrcid>0</lrcid><flag>0</flag></url><durl></durl><url><encode><![CDATA[http://www.chinamil.com.cn/site1 ... sic/ZGphoaVpdq-plTM$]]></encode><decode><![CDATA[38.mp3?wxc]]></decode><type>8</type><lrcid>0</lrcid><flag>0</flag></url><durl></durl><url><encode><![CDATA[http://www.lcyg.cn/amelia/music/pZuUoqGrNw$$.Wma]]></encode><decode><![CDATA[tianlu.Wma]]></decode><type>3</type><lrcid>0</lrcid><flag>0</flag></url><durl></durl><p2p><hash>0d18e8ac974b98c5a5bbbf1007aad5d0eeb22fd6</hash><url><![CDATA[]]></url><type>mp3</type><size>6785939</size><bitrate>192</bitrate></p2p></result>
目前输出的内容是原文件的内容,但当我加上setlocal enabledelayedexpansion这句时,问题出现了,如下所示的代码- @echo off
- setlocal enabledelayedexpansion
- for %%i in (.\*.xml) do (
- for /f "usebackq delims=" %%j in ("%%i") do (
- echo %%j>1.txt
- )
- )
- endlocal
- pause
复制代码
这个时候1.txt的内容如下:
<?xml version="1.0" encoding="gb2312" ?><result><count>5</count><url><encode><//zhangmen**ing.baidu.com/data2/music/38359767/ZGpmaW5tbW9fn6NndK6ap5WXcGyZa2lulpOUZGiYb2-TZGxqbJdrb2iUZJdlb2doaGJsWqKfm3VhYGNsa2hpb2dnaGRpZmtvMQ$$]]></encode><decode><[CDATA[http://zhangmen**ing2.baidu.com/ ... sa2hpb2dnaGRpZmtvMQ$$]]></encode><decode><[CDATA[http://content.12530.com/upload/ ... b2hhY2ZslGZnaGFjbDQ$.mp3]]></encode><decode><[CDATA[http://www.climber.cn/audio/pZuUoqGrNw$$.mp3]]></encode><decode><[CDATA[http://www.chinamil.com.cn/site1 ... sic/ZGphoaVpdq-plTM$]]></encode><decode><[CDATA[http://www.lcyg.cn/amelia/music/pZuUoqGrNw$$.Wma]]></encode><decode><[CDATA[]]></url><type>mp3</type><size>6785939</size><bitrate>192</bitrate></p2p></result>
这个时候输出的内容不是原文件的内容。
百思不得其解,开启变量延迟后,读取文本的内容为什么会不一样呢?
附件如下,需将.txt删除
[attach]6243[/attach]
作者: Demon 时间: 2013-4-5 11:12
感叹号
作者: hankerer 时间: 2013-4-5 15:53
!aaa:ccc
这种情况,aaa没有定义为变量的话会直接去掉。变为ccc
作者: BAT-VBS 时间: 2013-4-5 15:58
http://www.bathome.net/thread-1224-1-1.html
作者: wkl17 时间: 2014-4-10 04:02
话说bathome和wuyou神马关系??今天才发现..以前是直接bathome的域名访问的..,
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |