回复 11# batman
说实在的写上面的那段代码的时候只看问题,没有看版主的代码和提问啊。
粗心的俺再次犯错了,今天上午仔细回味了下。看看挽救不?
如果不考虑特殊字符,可以这样用。
这次绝对是看了楼主的代码,总结了自己的错误啊。- @Echo Off
- For /F %%A In (Log.txt) Do (
- Echo 原字符: %%A
- Call :_On %%A
- )
- Pause>Nul&Exit
- :_On
- Set "Con=%1"
- :_On_Two
- If /i "%Con:~,1%" Leq "Z" Set "Var=%Var%%Con:~,1%"
- Set "Con=%Con:~1%"
- If Not Defined Con Echo 编译后: %Var%&Set "Var="&Goto :Eof
- Goto _On_Two
复制代码 这个是处理特殊字符,跟楼主的方法一样,只是想表明俺看了,俺理解了。- @Echo Off
- For /F %%A In (Log.txt) Do (
- Echo 原字符: %%A
- Set "Con=%%A"
- SetLocal EnableDelayedExpansion
- Call :_On
- Endlocal
- )
- Pause>Nul&Exit
- :_On
- If /i "!Con:~,1!" Leq "Z" Set "Var=!Var!!Con:~,1!"
- Set "Con=!Con:~1!"
- If Not Defined Con Echo 编译后: !Var!&Set "Var="&Goto :Eof
- Goto _On
复制代码 其实没有深彻的去理解这个原因问题,只是我了解如果在开启《变量延迟》的情况给一个变量赋值的话,某些特殊字符会被屏蔽掉例如:!^
楼主的方法应该是在没有开始《变量延迟》的情况给变量赋值,然后打开《变量延迟》是为了在For里可以使用或者说是读取到这个变量。
下面有个小例子- @Echo Off
- Set "Var=N你H好~!@#$%^&*()a"
- Echo %Var%
- SetLocal EnableDelayedExpansion
- Set "Var=N你H好~!@#$%^&*()a"
- Echo !Var!
- Pause>Nul
复制代码 希望能挽救昨天所犯下的错误啊。 |