中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求教dos高手,set /p不支持管道的问题
作者:
标题: 求教dos高手,set /p不支持管道的问题 上一主题 | 下一主题
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『楼 主』:  求教dos高手,set /p不支持管道的问题

求教dos高手:

已知:
echo kkkk>yyy.txt
set /p aa=<yyy.txt
echo %aa%
以上会显示结果为kkkk。
但是为什么echo kkkk|set /p aa=不行呢?
到底set能否管道?

2010-4-9 02:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zaixinxiangnian
初级用户





积分 151
发帖 106
注册 2009-10-9
来自 河南省
状态 离线
『第 2 楼』:  

我试了下运行结果一样,,,麻烦高手进来给讲解下

2010-4-9 06:05
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (657614933)  编辑帖子  回复  引用回复
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『第 3 楼』:  

感谢先啊,请高手回答

2010-4-9 11:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

echo kkkk|set /p aa=
这样写的目的是什么?



2010-4-10 01:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『第 5 楼』:  

我是想给set赋值,因为用set提取变量的字符串很简单。
但是我又不想用for。虽然我知道:
for /f  %%i in ('echo kkkk') do set aa =%%i
可以达到用set赋值的目的,但是好多复杂的情况下,无法用预期所提取的内容,所以也就难以用for来提取内容。总之,我想,能否不用for,而是用call或 <&之类?
盼解

2010-4-10 12:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  

这不是赋值吗?
set str=HAT




2010-4-10 13:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 7 楼』:  

不知道楼主要做什么。

echo kkkk|set /p aa=
直接写成 set aa=kkkk 就好了啊。
为什么要先echo呢??建议你把你要做的批处理贴出来,大家看一看才好说



  
2010-4-10 16:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『第 8 楼』:  

比如我想获取一个注册表的值吧,如获取壁纸所在位置,虽然可以如下写:
for /f "tokens=2*" %%i in ('reg query "HKCU\Control Panel\Desktop" /v Wallpaper^|find /i "reg_sz"') do echo "%%~dpj"
pause
在这里好多朋友喜欢用for截取冒号:,来读取值,但是由于各种电脑的情况是不一样的,有些人的电脑采用的是%userprofile%等变量在注册表里写值的,所以用for截取冒号:就截取不到了。而用set由于可以指定字符串截取字符,所以更适合许多地方来准确的读取注册表的值。
说到底,就是喜欢set的简练的截取字符的用途。

2010-4-11 13:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  Re 8 楼

你说了这么一大堆,跟set /p有啥关系?



2010-4-11 20:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『第 10 楼』:  

呵呵,是我表达的错误,但是,我的确很想知道set /p=为什么不能支持管道,而又能支持set /p=<aa.txt。我很想知道为什么?是不是用其他方法能使其支持?
望不吝赐教,感谢先

2010-4-12 11:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 11 楼』:  

我想或许是因为cmd只接受标准的文本输入,而 echo 输出的东西不是标准的格式文本,<aa.txt显然是标准的文本。



  
2010-4-12 11:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by zhuoranv at 2010-4-11 01:52 PM:
比如我想获取一个注册表的值吧,如获取壁纸所在位置,虽然可以如下写:
for /f "tokens=2*" %%i in ('reg query "HKCU\Control Panel\Desktop" /v Wallpa ...

我记得不是很清楚了,但是好像注册表user那一块的内容,就是从localmachine影射过来的吧??

貌似只要修改localmachine的就好了吧,而且应该就是个固定的位置,至少XP,2003是一样的运行效果。



  
2010-4-12 11:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by exzzz at 2010-4-12 11:41 AM:


我记得不是很清楚了,但是好像注册表user那一块的内容,就是从localmachine影射过来的吧??

貌似只要修改localmachine的就好了吧,而且应该就是个固定的位置,至少XP,2003是一样的运行效果。

是的,壁纸的确是固定位置,但是假如壁纸采用动态的如gif格式的,就不是这个位置了。
还有其他情况,如收藏夹的位置,我的文档的位置,现在的“优化版”的xp都将这些改到d盘去了。所以说,用for的方法来截取,往往会由于情况的不同而出错的几率更大些

2010-4-12 11:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhuoranv
新手上路





积分 8
发帖 8
注册 2007-11-3
状态 离线
『第 14 楼』:  

的确很想知道set /p=为什么不能支持管道,而又能支持set /p=<aa.txt。我很想知道为什么?是不是用其他方法能使其支持?
望不吝赐教,感谢先

2010-4-12 20:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: