Board logo

标题: 求教dos高手,set /p不支持管道的问题 [打印本页]

作者: zhuoranv     时间: 2010-4-9 02:14    标题: 求教dos高手,set /p不支持管道的问题

求教dos高手:

已知:
echo kkkk>yyy.txt
set /p aa=<yyy.txt
echo %aa%
以上会显示结果为kkkk。
但是为什么echo kkkk|set /p aa=不行呢?
到底set能否管道?
作者: zaixinxiangnian     时间: 2010-4-9 06:05
我试了下运行结果一样,,,麻烦高手进来给讲解下
作者: zhuoranv     时间: 2010-4-9 11:36
感谢先啊,请高手回答
作者: HAT     时间: 2010-4-10 01:27
echo kkkk|set /p aa=
这样写的目的是什么?
作者: zhuoranv     时间: 2010-4-10 12:28
我是想给set赋值,因为用set提取变量的字符串很简单。
但是我又不想用for。虽然我知道:
for /f  %%i in ('echo kkkk') do set aa =%%i
可以达到用set赋值的目的,但是好多复杂的情况下,无法用预期所提取的内容,所以也就难以用for来提取内容。总之,我想,能否不用for,而是用call或 <&之类?
盼解
作者: HAT     时间: 2010-4-10 13:58
这不是赋值吗?
set str=HAT

作者: exzzz     时间: 2010-4-10 16:39
不知道楼主要做什么。

echo kkkk|set /p aa=
直接写成 set aa=kkkk 就好了啊。
为什么要先echo呢??建议你把你要做的批处理贴出来,大家看一看才好说
作者: zhuoranv     时间: 2010-4-11 13:52
比如我想获取一个注册表的值吧,如获取壁纸所在位置,虽然可以如下写:
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的简练的截取字符的用途。
作者: HAT     时间: 2010-4-11 20:43    标题: Re 8 楼

你说了这么一大堆,跟set /p有啥关系?
作者: zhuoranv     时间: 2010-4-12 11:29
呵呵,是我表达的错误,但是,我的确很想知道set /p=为什么不能支持管道,而又能支持set /p=<aa.txt。我很想知道为什么?是不是用其他方法能使其支持?
望不吝赐教,感谢先
作者: exzzz     时间: 2010-4-12 11:39
我想或许是因为cmd只接受标准的文本输入,而 echo 输出的东西不是标准的格式文本,<aa.txt显然是标准的文本。
作者: exzzz     时间: 2010-4-12 11:41


  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是一样的运行效果。
作者: zhuoranv     时间: 2010-4-12 11:55


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


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

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

是的,壁纸的确是固定位置,但是假如壁纸采用动态的如gif格式的,就不是这个位置了。
还有其他情况,如收藏夹的位置,我的文档的位置,现在的“优化版”的xp都将这些改到d盘去了。所以说,用for的方法来截取,往往会由于情况的不同而出错的几率更大些
作者: zhuoranv     时间: 2010-4-12 20:36
的确很想知道set /p=为什么不能支持管道,而又能支持set /p=<aa.txt。我很想知道为什么?是不是用其他方法能使其支持?
望不吝赐教,感谢先