Board logo

标题: call调用标签段时的参数传递该如何理解? [打印本页]

作者: pcl83     时间: 2006-10-6 10:25    标题: 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 ]
作者: pcl83     时间: 2006-10-6 11:57
请问各位高手,%*的意思是不是和tokens=*里的*一样也是忽略空格啊?!
作者: 3742668     时间: 2006-10-6 12:26


  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。
%*用在这里只是代表所有参数,还是和通配符的作用类似。
另外建议你修改一下标题。例如:[请教]关于%*的用法。
作者: 220110     时间: 2006-10-6 12:41
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
作者: 31676201     时间: 2006-12-4 13:04
DOS,代表着自由开放与发展,我们努力起來,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
作者: fllwt     时间: 2007-12-15 19:31
很好的 又学会了点东东^_^