[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理如何实现参数的连续传递?

例如:
...
I=1 SET A=100 B=200 C=300 GOTO :run
I=2 SET A=1000 B=2000 C=3000 GOTO :run
I=3 SET A=10000 B=20000 C=30000 GOTO :run


:run
ECHO %A%
ECHO %B%
ECHO %C%

用call传递
心绪平和,眼藏静谧。

TOP

原帖由 pusofalse 于 2008-8-18 22:46 发表
用call传递

版主麻烦帮忙完成上面的要求,谢谢

TOP

  1. @echo off
  2. :begin
  3. set n=%n%0
  4. set/a a=10%n%,b=20%n%,c=30%n%
  5. call :run
  6. if "%n%" neq "000" goto begin
  7. pause>nul&exit/b
  8. :run
  9. echo %%a%%:%a% %%b%%:%b% %%c%%:%c%
复制代码
心绪平和,眼藏静谧。

TOP

原帖由 pusofalse 于 2008-8-18 22:57 发表
@echo off
:begin
set n=%n%0
set/a a=10%n%,b=20%n%,c=30%n%
call :run
if "%n%" neq "000" goto begin
pause>nul&exit/b
:run
echo %%a%%:%a% %%b%%:%b% %%c%%:%c%

版主麻烦直接引用下面代码帮忙修正,谢谢
  1. @echo off
  2. set /p I=请输入:
  3. if %I%=="1" A=100 B=200 C=300 GOTO :run
  4. if %I%=="2" A=1000 B=2000 C=3000 GOTO :run
  5. if %I%=="3" A=10000 B=20000 C=30000 GOTO :run
  6. :run
  7. ECHO %A%
  8. ECHO %B%
  9. ECHO %C%
  10. pause
复制代码

TOP

OMG 自己修改,我没有这样的义务。给你写一个,自己照着来。
if "%I%"=="1" set/a A=100,B=200,C=300&GOTO :run
.......
......
......
......
:run
.....
...
..
心绪平和,眼藏静谧。

TOP

回复 6楼 的帖子

非常感谢版主。结果不是我想要的,上面的数值只是我举的一个例子,我的变量值是字符串,不是数字

TOP

原帖由 pusofalse 于 2008-8-18 23:20 发表
OMG 自己修改,我没有这样的义务。给你写一个,自己照着来。
if "%I%"=="1" set/a A=100,B=200,C=300&GOTO :run
.......
......
......
......
:run
.....
...
..
  1. @echo off
  2. :begin
  3. set /p I=请输入:
  4. if "%I%"=="1" set/a A=x1,B=y1,C=z1 GOTO :run
  5. if "%I%"=="2" set/a A=x2,B=x2,C=z2 GOTO :run
  6. if "%I%"=="3" set/a A=x3,B=y3,C=z3 GOTO :run
  7. :run
  8. ECHO %A%
  9. ECHO %B%
  10. ECHO %C%
  11. pause&goto :begin
复制代码

我需要的是这样。但这样写无法正常运行。。。指导

TOP

@echo off
:begin
cls
set /p I=请输入(x退出):
if "%I%"=="x" exit
if "%I%"=="1" (
    set A=x1
    set B=y1
    set C=z1
    GOTO :run
)   
if "%I%"=="2" (
    set A=x2
    set B=x2
    set C=z2
    GOTO :run
)   
echo 输入错误&pause&goto begin
:run
ECHO %A%
ECHO %B%
ECHO %C%
pause&goto begin
1

评分人数

    • 愚无尽: 这个就是我需要的,谢谢大家的帮忙PB + 2

TOP

  什么叫连续传递?传递的是什么样的参数?这些问题只通过代码演示,很难理解你的确切想法,最好是用 文字+代码 来描述,否则,所有的回复都将是猜测而已。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

这样如何?
@echo off
set /p I=请输入:
set /a a1=1,b1=11,c1=111
set /a a2=2,b2=22,c2=222
set /a a3=3,b3=33,c3=333

if "%I%"=="1" call :run %a1% %b1% %c1% && goto :eof
if "%I%"=="2" call :run %a2% %b2% %c2% && goto :eof
if "%I%"=="3" call :run %a3% %b3% %c3% && goto :eof

:run
ECHO %*
ECHO %1 %2 %3
pause

TOP

  1. @echo off
  2. set /p I=请输入:
  3. set /a a1=1,b1=11,c1=111
  4. set /a a2=2,b2=22,c2=222
  5. set /a a3=3,b3=33,c3=333
  6. set faith=faith
  7. :recur
  8. for /l %%c in (1 1 3) do (
  9.     if "%1" equ "" (
  10.        if %i% equ %%c call :recur %%c&goto :eof
  11.        ) else (
  12.        for %%i in (a b c) do call,set ".%1=%%.%1%%%%%%i%1%% "
  13.        call,call:run %%.%1%%&set ".%1="&goto :eof
  14.     )
  15. )
  16. :run
  17. ECHO %*
  18. ECHO %1 %2 %3
  19. pause
复制代码
心绪平和,眼藏静谧。

TOP

原帖由 浅默 于 2008-8-19 06:53 发表
@echo off
:begin
cls
set /p I=请输入(x退出):
if "%I%"=="x" exit
if "%I%"=="1" (
    set A=x1
    set B=y1
    set C=z1
    GOTO :run
)   
if "%I%"=="2" (
    set A=x2
    set B=x2
    ...

与下面这样的表达有什么区别?
  1. @echo off
  2. :begin
  3. set /p I=请输入:
  4. if "%I%"=="1" set A=x1 B=y1 C=z1 GOTO :run
  5. if "%I%"=="2" set A=x2 B=x2 C=z2 GOTO :run
  6. if "%I%"=="3" set A=x3 B=y3 C=z3 GOTO :run
  7. :run
  8. ECHO %A%
  9. ECHO %B%
  10. ECHO %C%
  11. pause&goto :begin
复制代码

TOP

原帖由 愚无尽 于 2008-8-19 19:36 发表

与下面这样的表达有什么区别?
@echo off
:begin
set /p I=请输入:
if "%I%"=="1" set A=x1 B=y1 C=z1 GOTO :run
if "%I%"=="2" set A=x2 B=x2 C=z2 GOTO :run
if "%I%"=="3" set A=x3 B=y3 C=z3 GOTO :ru ...


明白楼主错在哪里了.
1. set 和 goto 之间应该用"&"符号连接
2. 普通的 set 命令不能给多个变量赋值,需要用"&"连接多个 set 命令
3. 扩展的 set /a 命令会将 "在表达式中的任何非数字字符串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。"(摘自 set 帮助)

因为上面的第三点,楼主用
if "%I%"=="1" set/a A=x1,B=y1,C=z1
相当于
if "%I%"=="1" set/a A=0,B=0,C=0

set 测试
@echo off
echo set 测试:
echo.
echo
普通的set
echo set str=abc
set str=abc
echo str: %str%

::结果是 str: abc
echo.
echo
扩展的set
echo set /a str=abc
set /a str=abc
echo str: %str%

::结果是 str: 0
pause


使用楼主的思路
@echo off
:begin
set /p I=请输入:
if "%I%"=="1" set "A=x1" & set "B=y1" & set "C=z1" & GOTO :run
if "%I%"=="2" set "A=x2" & set "B=x2" & set "C=z2" & GOTO :run
if "%I%"=="3" set "A=x3" & set "B=y3" & set "C=z3" & GOTO :run
:run
ECHO %A%
ECHO %B%
ECHO %C%
pause&goto :begin


使用call
@echo off
:begin
set /p I=请输入:
if "%I%"=="1" set /a a=100,b=200,c=300
if "%I%"=="2" set /a a=1000,b=2000,c=3000
if "%I%"=="3" set /a a=10000,b=20000,c=30000
if not defined a echo 输入错误& goto begin
call :run %a% %b% %c%
goto begin
:run
ECHO %1
ECHO %2
ECHO %3

[ 本帖最后由 dishuo 于 2008-8-19 20:26 编辑 ]
1

评分人数

TOP

  1. if "%I%"=="1" (
  2. set A=x1
  3. set B=y1
  4. set C=z1
  5. GOTO :run
  6. )
复制代码

看来还是这样写精简...

TOP

返回列表