中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 00:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]怎样把一个命令返回结果中的指定内容赋值给变量 查看 966 回复 10
楼 主 [已结]怎样把一个命令返回结果中的指定内容赋值给变量 发表于 2008-12-20 11:22 ·  中国 浙江 台州 电信
新手上路
积分 19
发帖 10
注册 2008-12-19 09:52
17年会员
UID 134320
性别 男
状态 离线
如何才能把一个程序得到的结果传给CMD的一个变量?

比如DIR一个目录得到这样一个结果:

D:\>dir /b
驱动器 D 中的卷是 新加卷
D:\ 的目录

My Document
TDDOWNLOAD

现在要把包含“W”的这一行所有内容做为变量initw的内容(即输入echo %initw%得到“tddownload”)。
如何实现呢?



—————————————————————————————————
转移自 DOS疑难解答 & 问题讨论 (解答室)
明显发错版块,因属论坛新手,故暂不予以处罚,望今后一起注意。
——管理员
—————————————————————————————————



───────────────── 版务记录 ─────────────────
执行:HAT
操作:在帖子标题中增加搜索关键字
说明:原标题"像这样的方案要如何用BAT实现?"不利于论坛搜索
处罚:论坛新人免于积分处罚
提示:建议阅读以下帖子
{1415}提问的智慧
{7326}论坛新手必读,所有人的基本行为准则
{22703}请不要做浮躁的人
{32667}那些连标题都写不清楚的人们啊,你们醒醒吧
{32825}本版严厉整顿烂帖
───────────────── 版务记录 ─────────────────


[ Last edited by penicillin on 2008-12-22 at 10:28 ]
2 发表于 2008-12-20 12:43 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
for /f "delims=" %%a in ('dir /b^|findstr "W"') do (
set initw=%%a
)
echo %initw%
pause
3 发表于 2008-12-20 13:51 ·  中国 浙江 台州 电信
新手上路
积分 19
发帖 10
注册 2008-12-19 09:52
17年会员
UID 134320
性别 男
状态 离线
天噢!
呵呵~~~谢谢!!


程序运行得出的结果是用括号括起来的。

d:\MACScan.exe
PCI0: (00-12-3F-0F-2D-B4)。

现在我用的是:
@echo off
for /f %%a in (‘MACScan.exe^|findstr "PCI"') do (set mac=%%a)
set real=%mac:~5,-1%
echo %real%
pause>nul


结果为:
(00-12-3F-0F-2D-B4)

FOR能不能直接判断并抽取这行字括号以及里面的一部分呢,就是怕有时会有PCI10这样的情况,那上面那些行就截错地方了。?

[[i] Last edited by penicillin on 2008-12-20 at 14:40 [/i]]
4 Re 3楼 发表于 2008-12-20 16:28 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
for /f "delims=" %%a in ('MACScan.exe^|findstr "PCI"') do (
set mac=%%a
)
set real=%mac:*:=%
set real=%real:~1,-1%
echo %real%
pause
5 发表于 2008-12-20 17:22 ·  中国 浙江 台州 电信
新手上路
积分 19
发帖 10
注册 2008-12-19 09:52
17年会员
UID 134320
性别 男
状态 离线
感觉有点用旁边的字符来定位了……能不能直接用“括号”本身来定位呢?这样会不会是“不可实现”呢?
6 Re 5楼 发表于 2008-12-20 17:34 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
@echo off
for /f "delims=" %%a in ('MACScan.exe^|findstr "PCI"') do (
set mac=%%a
)
set real=%mac:*(=%
set real=(%real:~0,-1%
echo %real%
pause
7 发表于 2008-12-20 20:09 ·  中国 浙江 台州 电信
新手上路
积分 19
发帖 10
注册 2008-12-19 09:52
17年会员
UID 134320
性别 男
状态 离线
倒不是了。。。我是想那个右括号……用()本身做为界定符……
像Linux正则表达式中的:(.)方式。这样,无论要选的那部份出现在哪,它都可以被公式正确找到~~~~

[ Last edited by penicillin on 2008-12-20 at 20:16 ]
8 Re 7楼 发表于 2008-12-20 20:16 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
是这个意思么?
@echo off
for /f "delims=" %%a in ('MACScan.exe^|findstr "PCI"') do (
set mac=%%a
)
for /f "delims=)" %%a in ("%mac%") do (
set real=%%a
)
set real=%real:~-18%)
echo %real%
pause
9 发表于 2008-12-20 20:20 ·  中国 浙江 台州 电信
新手上路
积分 19
发帖 10
注册 2008-12-19 09:52
17年会员
UID 134320
性别 男
状态 离线
差不多吧~,就是用MS的DIR来表达的话。。。这个公式大约以下的方式~~
dir *(*)*

找到以下的文件/目录

12313123(sdfasdfsafd)sdfsfsdf
sdfsd(dfasfasdf)sadfas
asfa(sfsffffffffffddddddddddd)sdfsdfsssssssss


然后把括号及括号中的结果提出来。结果为:
(sdfasdfsafd)
(dfasfasdf)
(sfsffffffffffddddddddddd)

注:写三行仅是为了说明它的表现形式。

[ Last edited by penicillin on 2008-12-20 at 20:45 ]
10 Re 9楼 发表于 2008-12-20 22:21 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
这样?
@echo off
for /f "tokens=2 delims=()" %%a in ('MACScan.exe^|findstr "PCI"') do (
set mac=%%a
)
set real=(%mac%)
echo %real%
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
moniuming +3 2008-12-22 12:19
11 发表于 2008-12-22 10:27 ·  中国 浙江 台州 电信
新手上路
积分 19
发帖 10
注册 2008-12-19 09:52
17年会员
UID 134320
性别 男
状态 离线
嗯!------------谢谢HAT!
@echo off
for /f "tokens=2 delims=()" %%a in ('MACScan.exe^|findstr "PCI"') do set mac=(%%a)
echo %mac%
pause

[ Last edited by penicillin on 2008-12-22 at 10:28 ]
论坛跳转: