回复 13# crist
好吧,再试着解释下:- @echo off&setlocal enabledelayedexpansion
- set N=ab_c_1.zip
- for %%j in ("ab" "c" "1.zip") do set "name=!N:_%%~j=!"
- echo,!name!&pause
复制代码 for共循环三次:
1.将%%j赋值为"ab",%%~j值为ab,!N:_%%~j=!即!N:_ab=!(将N值中的_ab替换为空)
因为ab_c_1.zip不包含_ab,所以name值为ab_c_1.zip
2.将%%j赋值为"c",%%~j值为c,!N:_%%~j=!即!N:_c=!(将N值中的字串_c替换为空)
所以name值为ab_1.zip
3.将%%j赋值为"1.zip",%%~j值为1.zip,!N:_%%~j=!即!N:_1.zip=!(将N值中的_1.zip替换为空)
所以name值为ab_c
虽然3次循环都set name=..,但name最终取的是for最后一次(第3次)的set name=..的值
这跟set a=1&set a=2&set a=3&echo !a!最后显示的a值为3道理一样
开启变量延迟后,变量引用符%用!替代。也就是说,加上setlocal enabledelayedexpansion语句后,
将%name%改写成!name!
"为何!name!前面要加."?加不加.都可以,只是偶习惯加上了,避免!name!值为空时if语句报错 |