dos批处理下自动给环境变量赋值的问题 15
set/pa=<a.txt(此语句自动将a.txt文件里的字符串赋值给变量a,此方法可行)echoabcd|set/pa=(用数据通道将字符串abcd传给变量a,此方法不...
set /p a= <a.txt(此语句自动将a.txt文件里的字符串赋值给变量a,此方法可行)
echo abcd|set /p a=(用数据通道将字符串abcd传给变量a,此方法不可行,为什么)
还有其他自动给环境变量赋值的方法吗,请帮帮我,谢谢 展开
echo abcd|set /p a=(用数据通道将字符串abcd传给变量a,此方法不可行,为什么)
还有其他自动给环境变量赋值的方法吗,请帮帮我,谢谢 展开
3个回答
展开全部
我的回答仅供参考,不嫌水平低和罗嗦的话,我空间有篇关于变量的文章也可以去看看。
1 用户定义的变量称之为环境变量不妥, 因为所设置的变量仅是在当前CMD窗口下有效,也并非定义某种环境
2 应该说CMD提供给变量赋值仅一个命令,那就是set
3 set 命令给变量赋值有三种基本形式,不加参数的和加 /p 及/a 其中,set/p 除了能接收键盘输入值外,还提供了你所说的形式,把一个文件的第一行赋给变量, 而set/a 兼计算功能,将结果(数字型)赋给变量,且可一条命令(不用连接命令)给多个变量赋值
4 按道理说用管道命令是可以代替用户输入的,正如你所说的实际上对set/p 不行,我只能这么猜测, 命令无非是设计出来的程序,一般命令如遇运行过程中需要接收键盘输入,设计者都考虑了可以接收管道传入值代替,而这个set/p却并没有考虑它,以前DOS的set命令并没有/p功能,也许当初在"改造"它时疏忽,后来又觉得没必要再去修改。总之实际不行是硬道理, 没必要去追究为什么
5 我想很多人会有这种看法,要是可以把某命令的结果有个命令直接赋给变量就好了,遗憾的是没有,好在有个for命令,经扩展功能后,确实“强大”得很,其中加/f 的可以把命令结果、文件内容或多行的字符串,逐行按需要截取后直接进行处理或再利用set命令赋给某变量备用,提到它并不是说多了一种赋值方法,而是很多时候是在这个命令里(还是利用set)赋值的
1 用户定义的变量称之为环境变量不妥, 因为所设置的变量仅是在当前CMD窗口下有效,也并非定义某种环境
2 应该说CMD提供给变量赋值仅一个命令,那就是set
3 set 命令给变量赋值有三种基本形式,不加参数的和加 /p 及/a 其中,set/p 除了能接收键盘输入值外,还提供了你所说的形式,把一个文件的第一行赋给变量, 而set/a 兼计算功能,将结果(数字型)赋给变量,且可一条命令(不用连接命令)给多个变量赋值
4 按道理说用管道命令是可以代替用户输入的,正如你所说的实际上对set/p 不行,我只能这么猜测, 命令无非是设计出来的程序,一般命令如遇运行过程中需要接收键盘输入,设计者都考虑了可以接收管道传入值代替,而这个set/p却并没有考虑它,以前DOS的set命令并没有/p功能,也许当初在"改造"它时疏忽,后来又觉得没必要再去修改。总之实际不行是硬道理, 没必要去追究为什么
5 我想很多人会有这种看法,要是可以把某命令的结果有个命令直接赋给变量就好了,遗憾的是没有,好在有个for命令,经扩展功能后,确实“强大”得很,其中加/f 的可以把命令结果、文件内容或多行的字符串,逐行按需要截取后直接进行处理或再利用set命令赋给某变量备用,提到它并不是说多了一种赋值方法,而是很多时候是在这个命令里(还是利用set)赋值的
更多追问追答
追问
请举个例子如何用for /f语句再利用set自动给变量赋值(写一个命令让我看看)
谢谢
追答
这种例子太多了,为了说明把命令值赋给变量,给几个命令你在命令行测试:
显示网络信息
ipconfig/all
从中截取 mac地址所在行
ipconfig/all|find "Physical"
用for命令仅显示mac地址
for /f "tokens=2 delims=:" %i in ('ipconfig/all^|find "Physical"')do @echo %i
这里是直接显示,比如要赋给一变量,把上行的echo %i改为set mac=%i
不过,如果有几个mac地址,将最终赋为最后一个mac地址,当然要想有几个就保存几个也是可以的,你需要具备更多的处理能力,
补充提示: for命令里的%i 如写到批处理中得双写%符,有兴趣的话,我空间还可以看for的文章,但是有关变量的处理,以及综合能力也很重要
展开全部
@echo off
setlocal enabledelayedexpansion
set classpath=.;d:\app\WEB-INF\classes
for %%c in ("d:\app\WEB-INF\lib\*.jar") do set classpath=!classpath!;%%c
echo %classpath%
set classpath=%classpath%;d:\app\WEB-INF\classes
echo %classpath%
java com.test.Test >>d:\app\logs\test%date:~,4%%date:~5,2%%date:~8,2%.log
编辑成.BAT文件就可以了
setlocal enabledelayedexpansion
set classpath=.;d:\app\WEB-INF\classes
for %%c in ("d:\app\WEB-INF\lib\*.jar") do set classpath=!classpath!;%%c
echo %classpath%
set classpath=%classpath%;d:\app\WEB-INF\classes
echo %classpath%
java com.test.Test >>d:\app\logs\test%date:~,4%%date:~5,2%%date:~8,2%.log
编辑成.BAT文件就可以了
追问
请问这个是dos批处理文件吗,怎么java都出来了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
echo abcd|set /p a=
这样有点多次一举,下面这句能实现你的想法
set a=abcd
这样有点多次一举,下面这句能实现你的想法
set a=abcd
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询