标题: 批处理如何实现参数的连续传递? [打印本页]
作者: 愚无尽 时间: 2008-8-18 22:44 标题: 批处理如何实现参数的连续传递?
例如:
...
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%
作者: pusofalse 时间: 2008-8-18 22:46
用call传递
作者: 愚无尽 时间: 2008-8-18 22:48
原帖由 pusofalse 于 2008-8-18 22:46 发表
用call传递
版主麻烦帮忙完成上面的要求,谢谢
作者: 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%
复制代码
作者: 愚无尽 时间: 2008-8-18 23:15
原帖由 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%
版主麻烦直接引用下面代码帮忙修正,谢谢
-
- @echo off
- set /p I=请输入:
- if %I%=="1" A=100 B=200 C=300 GOTO :run
- if %I%=="2" A=1000 B=2000 C=3000 GOTO :run
- if %I%=="3" A=10000 B=20000 C=30000 GOTO :run
- :run
- ECHO %A%
- ECHO %B%
- ECHO %C%
- pause
-
复制代码
作者: pusofalse 时间: 2008-8-18 23:20
OMG 自己修改,我没有这样的义务。给你写一个,自己照着来。
if "%I%"=="1" set/a A=100,B=200,C=300&GOTO :run
.......
......
......
......
:run
.....
...
..
作者: 愚无尽 时间: 2008-8-18 23:43 标题: 回复 6楼 的帖子
非常感谢版主。结果不是我想要的,上面的数值只是我举的一个例子,我的变量值是字符串,不是数字
作者: 愚无尽 时间: 2008-8-18 23:49
原帖由 pusofalse 于 2008-8-18 23:20 发表
OMG 自己修改,我没有这样的义务。给你写一个,自己照着来。
if "%I%"=="1" set/a A=100,B=200,C=300&GOTO :run
.......
......
......
......
:run
.....
...
..
- @echo off
- :begin
- set /p I=请输入:
- if "%I%"=="1" set/a A=x1,B=y1,C=z1 GOTO :run
- if "%I%"=="2" set/a A=x2,B=x2,C=z2 GOTO :run
- if "%I%"=="3" set/a A=x3,B=y3,C=z3 GOTO :run
- :run
- ECHO %A%
- ECHO %B%
- ECHO %C%
- pause&goto :begin
-
复制代码
我需要的是这样。但这样写无法正常运行。。。指导
作者: 浅默 时间: 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
set C=z2
GOTO :run
)
echo 输入错误&pause&goto begin
:run
ECHO %A%
ECHO %B%
ECHO %C%
pause&goto begin
作者: namejm 时间: 2008-8-19 09:15
什么叫连续传递?传递的是什么样的参数?这些问题只通过代码演示,很难理解你的确切想法,最好是用 文字+代码 来描述,否则,所有的回复都将是猜测而已。
作者: dishuo 时间: 2008-8-19 18:24
这样如何?
@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
作者: pusofalse 时间: 2008-8-19 19:02
- @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
- set faith=faith
- :recur
- for /l %%c in (1 1 3) do (
- if "%1" equ "" (
- if %i% equ %%c call :recur %%c&goto :eof
- ) else (
- for %%i in (a b c) do call,set ".%1=%%.%1%%%%%%i%1%% "
- call,call:run %%.%1%%&set ".%1="&goto :eof
- )
- )
-
- :run
- ECHO %*
- ECHO %1 %2 %3
- pause
复制代码
作者: 愚无尽 时间: 2008-8-19 19:36
原帖由 浅默 于 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
...
与下面这样的表达有什么区别?
- @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 :run
- :run
- ECHO %A%
- ECHO %B%
- ECHO %C%
- pause&goto :begin
-
复制代码
作者: dishuo 时间: 2008-8-19 20:24
原帖由 愚无尽 于 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 编辑 ]
作者: 愚无尽 时间: 2008-8-19 21:14
- if "%I%"=="1" (
- set A=x1
- set B=y1
- set C=z1
- GOTO :run
- )
复制代码
看来还是这样写精简...
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |