中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 05:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 再求个关于变量间赋值的代码,我的脚本就完工了 查看 2,416 回复 18
楼 主 再求个关于变量间赋值的代码,我的脚本就完工了 发表于 2006-10-24 20:03 ·  中国 浙江 杭州 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线

@echo off
set 1=b
set 2=c
set 3=d
set 4=c
set 5=e
........
set a=%1% %2% %3% %4% %5% ....

call a.bat %a%


a.bat

start /b /min a.exe

需求如上,大致意思是:要赋给a.exe 很多变量,而这些变量的数目又不是固定的.不知道如何实现,请各位大侠帮忙.
2 发表于 2006-10-24 23:49 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
3 发表于 2006-10-25 00:33 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  或者你把赋值语句写成 set var=b c d e f 的格式,然后再用 call a.bat %var% 来调用。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
4 发表于 2006-10-25 07:58 ·  中国 浙江 杭州 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
感谢两位版主的热心!两位版主的好像都不能满足我的需求.首先不好意思,由于太菜对于qwe1234567的解法,我没有看懂,不知道如何利用.而对于namejm的解法.不能符合要求.因为如果设set var=b c d e f.由于b c d e f的值不是固定的.就是说可能这次是b c d e f而下次启动就是b c d e f g 了.如果每次都去改var变量的话.就失去意义了.
我的想法是:将
set 1=b
set 2=c
set 3=d
set 4=c
set 5=e
........写成一个文件(如a.txt),然后用一个for语句读取这个文件(a.txt),然后赋值.
如:for /f "tokens=2 delims== " in (a.txt) do set var=%1% %2% %3% %4% ...
显然这样写失去了脚本的意义.因为如果a.txt变了,那么var后面的赋值也要改了.

还麻烦大家帮帮忙!
5 发表于 2006-10-25 08:05 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  如果楼主想在批处理运行的时候,及时的给变量赋值,就可以用这句了:

@echo off
set /p var= 请输入你要赋给变量的值:

  这样,在调用这些变量就可以直接用%var%调用了。比如:start "" /min a.exe &var&
6 发表于 2006-10-25 08:44 ·  中国 浙江 杭州 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
不是及时赋变量,由于变量复杂度比较高,而且比较多,所以每次都手动输入太麻烦
7 发表于 2006-10-25 09:22 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  那楼主的意思是什么呢?是从一个特定的文件中读取参数还是什么呢?
8 发表于 2006-10-25 10:18 ·  中国 浙江 杭州 西湖区 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
是的,是从一个特定的文件中读取所有参数
9 发表于 2006-10-25 10:37 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  那么就用这个来提取你的参数就可以了:

set /p var=<filename
echo %var%
start /min a.exe %var%

  
   以后用%var%就可以调用你的参数了。
10 发表于 2006-10-25 12:06 ·  中国 浙江 杭州 西湖区 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
我简单测了一下,结果如下:
a.txt

set a=1
set b=2
set c=3
set d=4

a.bat

set /p var=<a.txt
echo %var%
pause


结果:
D:\>set /p var= 0<a.txt

D:\>echo set a=1
set a=1

D:\>pause
请按任意键继续. . .
好像只有第一个值传递成功了
11 发表于 2006-10-25 12:23 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  汗一个先。
  
  a.txt里面的内容就直接写参数的序列就可以了啊,不需要用set命令再对其赋值,比如a.txt里面的内容就是"1 2 3 4"就可以了。每个参数用空格分隔一下。
12 发表于 2006-10-25 12:40 ·  中国 浙江 杭州 西湖区 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
不好意思,学的不精.而且有点死.现在基本上是实现了.还有点小问题就是a.txt只能横着写,不能竖着写
13 发表于 2006-10-25 13:15 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  再汗一个。。。。。。

  为什么要竖着写啊?横着写不是更方便,更美观么?

  难不成要搞一个斜着写的出来??
  
  竖着写就达不到效果了。。。
14 发表于 2006-10-25 20:33 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
试下下面的代码,应该
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in (a.txt) do set a=%%a !a!
start /b /min a.exe %a%
15 发表于 2006-10-26 00:17 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Originally posted by qwe1234567 at 2006-10-25 20:33:
试下下面的代码,应该
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in (a.txt) do set a=%%a !a!
start /b /min a.exe %a%


  版主的这个代码应该改一下吧。
  
  这里的"set a=%%a !a!"应该改成"set a=!a! %%a"才满足楼主的要求。
论坛跳转: