关于批处理call set ~~
@echooffcolorfcsetb=69setspace=:bset/ab-=2callsete=%%space:~0,%b%%%echo%e%nping/n2127...
@echo off
color fc
set b=69
set space=
:b
set/a b-=2
call set e=%%space:~0,%b%%%
echo %e%n
ping /n 2 127.1>nul&cls
goto b
pause
@echo off
color fc
set b=69
set space=
:b
set/a b-=2
set e=%space:~0,%b%%
echo %e%n
ping /n 2 127.1>nul&cls
goto b
pause
看这两段代码,为什么第二种不可以呢,还有第一种为什么要用到CALL,是什么意思?还有为什么要用的两组%(%%space:~0,%b%%%).不要用延迟
注:space= 后边是"空格"并不是空值.希望高手解答 谢谢 谢谢~~~ 展开
color fc
set b=69
set space=
:b
set/a b-=2
call set e=%%space:~0,%b%%%
echo %e%n
ping /n 2 127.1>nul&cls
goto b
pause
@echo off
color fc
set b=69
set space=
:b
set/a b-=2
set e=%space:~0,%b%%
echo %e%n
ping /n 2 127.1>nul&cls
goto b
pause
看这两段代码,为什么第二种不可以呢,还有第一种为什么要用到CALL,是什么意思?还有为什么要用的两组%(%%space:~0,%b%%%).不要用延迟
注:space= 后边是"空格"并不是空值.希望高手解答 谢谢 谢谢~~~ 展开
2个回答
展开全部
call 在这里起到延迟变量的作用,当要对一个变量进行两次"陪坦脱壳"处理时,就要启动延迟变量
你的代码,假设set space=abcd (若是空值,不好解释)
第一次脱壳为 set e=%space:~0,2%
第二次脱壳为 set e=ab
同理,用咐野延迟变量同样可以.如下代码.
可以看到,结果都一样,一个是用call,一个是用芦简桐延迟变量.
@echo off
set c=2
set a=123
call set b=%%a:~0,%c%%%
echo %b%
pause
setlocal enabledelayedexpansion
set b=!a:~0,%c%!
echo !b!
pause
你的代码,假设set space=abcd (若是空值,不好解释)
第一次脱壳为 set e=%space:~0,2%
第二次脱壳为 set e=ab
同理,用咐野延迟变量同样可以.如下代码.
可以看到,结果都一样,一个是用call,一个是用芦简桐延迟变量.
@echo off
set c=2
set a=123
call set b=%%a:~0,%c%%%
echo %b%
pause
setlocal enabledelayedexpansion
set b=!a:~0,%c%!
echo !b!
pause
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询