中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » call调用标签段时的参数传递该如何理解?
作者:
标题: call调用标签段时的参数传递该如何理解? 上一主题 | 下一主题
pcl83
初级用户





积分 32
发帖 13
注册 2006-10-3
状态 离线
『楼 主』:  call调用标签段时的参数传递该如何理解?

以下是版主3742668写的有关排序的批处理,小的新手,有些看不明白,望指点。
-------------------------------------------------------
@echo off
setlocal enabledelayedexpansion
    set numbers=%random% %random% %random% %random% %random% %random% %random% %random%
    echo 排序前数组为: %numbers%
    call :sort %numbers%
    echo 排序后数组为: %ret%
pause
goto :eof

:sort
    set num=%1
    set str=%*
    for %%i in (%*) do if !num! gtr %%i set num=%%i
    set ret=%ret% %num%
    if not "!str:%num%=!" == "" call :sort !str:%num%=!
goto :eof
--------------------------------------------------
1、set num=%1这一句为什么只是把%1的头一个数字传给num;
  比如%numbers%为:12  23  24 23 25 23 20 10
  但是set num=%1却变成12呢?
2、%*是什么意思


──────────────── 版务记录 ────────────────
执行:namejm
原标题:求助!
现标题:call调用标签段时的参数传递该如何理解?
说明:因原标题过于模糊,不便于论坛的搜索和管理,在本提示发表三日之后,
  楼主尚未更改标题,现由本人强制修改标题,并扣除楼主4点积分。
──────────────── 版务记录 ────────────────


[ Last edited by namejm on 2006-10-19 at 00:57 ]

   此帖被 -4 点积分     点击查看详情   
评分人:【 namejm 分数: -4  时间:2006-10-19 00:52


2006-10-6 10:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pcl83
初级用户





积分 32
发帖 13
注册 2006-10-3
状态 离线
『第 2 楼』:  

请问各位高手,%*的意思是不是和tokens=*里的*一样也是忽略空格啊?!

2006-10-6 11:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 3 楼』:  



  Quote:
:sort
    set num=%1
    set str=%*
echo %* & pause
    for %%i in (%*) do if !num! gtr %%i set num=%%i
    set ret=%ret% %num%
    if not "!str:%num%=!" == "" call :sort !str:%num%=!
goto :eof

简单地自己试一下就知道了,哪儿看不明白就在哪儿用pause。
%*用在这里只是代表所有参数,还是和通配符的作用类似。
另外建议你修改一下标题。例如:[请教]关于%*的用法。

2006-10-6 12:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
220110
荣誉版主




积分 718
发帖 313
注册 2005-9-26
状态 离线
『第 4 楼』:  

A:

1.     call :sort %numbers%
就是  call :sort 12  23  24 23 25 23 20 10
对应  call %0 %1 %2 %3 %4 %5 %6 %7 %8
所以  set num=%1却变成12.

2.
%* 是所有参数(不包括 %0)可引用的通配符,这些参数(整体)传递到批处理文件中。
%* 编辑符是唯一可代表在批处理文件中传递的所有参数的编辑符。
%* = %1 %2 %3 %4 %5 %6 %7 %8 %9

2006-10-6 12:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
31676201
新手上路





积分 19
发帖 9
注册 2006-11-29
状态 离线
『第 5 楼』:  

DOS,代表着自由开放与发展,我们努力起來,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

2006-12-4 13:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fllwt
新手上路





积分 4
发帖 2
注册 2007-11-6
状态 离线
『第 6 楼』:  

很好的 又学会了点东东^_^

2007-12-15 19:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: