先看看下面两对代码:
1:- @echo off & setlocal enabledelayedexpansion
- for /l %%a in (1 1 1) do (
- set "str%%a=%%a"
- set "s=^!str%%a^!"
- )
- echo %s%
- echo !s!
- pause
复制代码 2:- @echo off & setlocal enabledelayedexpansion
- for /l %%a in (1 1 1) do (
- set "str%%a=%%a"
- set s=^!str%%a^!
- )
- echo %s%
- echo !s!
- pause
复制代码 自己运行一下吧!你会发现结果不同,这是为什么呢?
原来 问题出在第四句( set s=^!str%%a^!) 一个是有引号的,一个是没有的,那有什么区别呢?
解释是:
当有引号时,第一次预处理将只替换变量而不处理特殊符号,也就是把所有的符号都作为普通符号,第二次预处理则和原来一样。
不信你可以运行下面的代码:
1:- @echo off & setlocal enabledelayedexpansion
- for /l %%a in (1 1 1) do (
- set "str%%a=%%a"
- set "s=^!str%%a^!^^^^"
- )
- echo !s!
- pause
复制代码 2:- @echo off & setlocal enabledelayedexpansion
- for /l %%a in (1 1 1) do (
- set "str%%a=%%a"
- set s=^!str%%a^!^^^^
- )
- echo !s!
- pause
复制代码 是不是多了个^
这就说明问题了。 |