标题: [求助]call高级用法:参数的使用方法以及变量延迟扩展
[打印本页]
作者: youkaib
时间: 2008-11-22 10:09
标题: [求助]call高级用法:参数的使用方法以及变量延迟扩展
call配合goto :eof和exit/b这样使用的时候。
call常这样调用。
第一种:
@echo off
setlocal enabledelayedexpansion
set num=iamyxj
set a=12345
set b=0
set /a b+=1
call echo %%num:~!a:~%b%,1!,1%%
echo %num:~1,1%
pause
echo %num:~1,1%
pause
goto :eof
第二种:
@echo off
setlocal EnableDelayedExpansion
set _tmp_F_S=C:\_delay.vbs
set _tmp_F_F=C:\_tmp.tmp
set delay=50
set s1=开机
set s2=快开机
set s3=他妈的开机
set s4=你他妈到底开不开机
set s5=操!!再不开机老子砸了你!!
echo if WScript.Arguments.count = 1 then WScript.Sleep CInt(WScript.Arguments(0)) end if>%_tmp_F_S%
if exist %_tmp_F_F% del %_tmp_F_F%
for /L %%i in (1,1,4) do (call :show %%s%%i%% && call :fail %%s%%i%%)
call :show %s5%
call :suc
if exist %_tmp_F_S% del %_tmp_F_S%
if exist %_tmp_F_F% del %_tmp_F_F%
ping -n 1 127.1>nul
goto :EOF
:show
if "%~1"=="" goto :EOF
set s=%1
set /p ans=%cd%^><nul
set /A len=0
:comp_len
echo %%s:~%len%,1%% | find "ECHO">nul && goto end_comp
set /A "len+=1"
goto comp_len
:end_comp
set /A "len-=1"
for /L %%i in (0,1,%len%) do (cscript //nologo %_tmp_F_S% %delay% && set /p ans=!s:~%%i,1!<nul)
cscript //nologo %_tmp_F_S% 500
echo.
echo %cd%^>%1>>%_tmp_F_F%
echo.>>%_tmp_F_F%
goto :EOF
:fail
echo '%1' 不是内部或外部命令,也不是可运行的程序
echo 或批处理文件。
echo.
echo '%1' 不是内部或外部命令,也不是可运行的程序>>%_tmp_F_F%
echo 或批处理文件。>>%_tmp_F_F%
echo.>>%_tmp_F_F%
goto :EOF
:suc
ping -n 1 127.1>nul
set eqq================================================================================
set gtr=^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>^>
echo Loading Windows 2000 ...>>%_tmp_F_F%
echo.>>%_tmp_F_F%
for /L %%i in (0,1,79) do (set /A new=2*%%i && type %_tmp_F_F% && echo !gtr:~0,%%i!!eqq:~%%i,80! && ping -n 1 127.1>nul && cls)
goto :EOF
第一种:为什么这样调用,不直接使用echo
第二种:%1 包含的是什么内容,是上一个命令的变量吗?
还有call :show %s5% 这一句是怎么赋值的。
————————————————————————————————
转移自 DOS疑难解答 & 问题讨论 (解答室)
明显发错版块,因属论坛新手,故暂不予以处罚,望今后引起注意。
——管理员
————————————————————————————————
───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-11-23]在帖子标题中增加搜索关键字;代码加code标签
说明:原标题"call高级用法。来帮忙"不利于论坛搜索
处罚:扣除2点积分
提示:建议阅读以下帖子
{1415}提问的智慧
{7326}论坛新手必读,所有人的基本行为准则
{22703}请不要做浮躁的人
{32667}[愤怒]那些连标题都写不清楚的人们啊,你们醒醒吧
{32825}本版严厉整顿烂帖
───────────────── 版务记录 ─────────────────
[
Last edited by HAT on 2008-11-23 at 01:07 ]
作者: tireless
时间: 2008-11-22 11:39
call 能够延迟变量扩展。可以在论坛里搜索“
变量延迟”的相关贴子进一步的了解。
Quote: |
第二种:%1 包含的是什么内容,是上一个命令的变量吗?
还有call :show %s5% 这一句是怎么赋值的? |
|
call :show %s5% 和带参数运行批处理是一个意思。如:
test.bat 的内容是:
@echo %1
执行
test.bat 我是第一个参数(百分之一),就会显示“我是第一个参数(百分之一)”这句话。
以下是用 call:@echo off
call :showtext 我是第一个参数(百分之一)
pause
:showtext
echo %1
作者: HAT
时间: 2008-11-22 12:50
变量延迟详解
http://www.cn-dos.net/forum/viewthread.php?tid=28273
什么情况下该使用变量延迟
http://www.cn-dos.net/forum/viewthread.php?tid=20733
一个变量嵌套变量的问题
http://www.cn-dos.net/forum/viewthread.php?tid=41143