楼 主
求教dos高手,set /p不支持管道的问题
发表于 2010-04-09 02:14 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
求教dos高手:
已知:
echo kkkk>yyy.txt
set /p aa=<yyy.txt
echo %aa%
以上会显示结果为kkkk。
但是为什么echo kkkk|set /p aa=不行呢?
到底set能否管道?
第 2 楼
发表于 2010-04-09 06:05 · 中国 广东 佛山 顺德区 电信
初级用户
★★
积分 151 发帖 106 注册 2009-10-09 21:24 16年会员 UID 152856 性别 男 来自 河南省
状态 离线
第 3 楼
发表于 2010-04-09 11:36 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
第 4 楼
发表于 2010-04-10 01:27 · 中国 重庆 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
echo kkkk|set /p aa=
这样写的目的是什么?
第 5 楼
发表于 2010-04-10 12:28 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
我是想给set赋值,因为用set提取变量的字符串很简单。
但是我又不想用for。虽然我知道:
for /f %%i in ('echo kkkk') do set aa =%%i
可以达到用set赋值的目的,但是好多复杂的情况下,无法用预期所提取的内容,所以也就难以用for来提取内容。总之,我想,能否不用for,而是用call或 <&之类?
盼解
第 6 楼
发表于 2010-04-10 13:58 · 中国 重庆 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
第 7 楼
发表于 2010-04-10 16:39 · 中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194 发帖 167 注册 2007-04-30 09:43 19年会员 UID 87022 性别 男
状态 离线
不知道楼主要做什么。
echo kkkk|set /p aa=
直接写成 set aa=kkkk 就好了啊。
为什么要先echo呢??建议你把你要做的批处理贴出来,大家看一看才好说
第 8 楼
发表于 2010-04-11 13:52 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
比如我想获取一个注册表的值吧,如获取壁纸所在位置,虽然可以如下写:
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的简练的截取字符的用途。
第 9 楼
Re 8 楼
发表于 2010-04-11 20:43 · 中国 重庆 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
第 10 楼
发表于 2010-04-12 11:29 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
呵呵,是我表达的错误,但是,我的确很想知道set /p=为什么不能支持管道,而又能支持set /p=<aa.txt。我很想知道为什么?是不是用其他方法能使其支持?
望不吝赐教,感谢先
第 11 楼
发表于 2010-04-12 11:39 · 中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194 发帖 167 注册 2007-04-30 09:43 19年会员 UID 87022 性别 男
状态 离线
我想或许是因为cmd只接受标准的文本输入,而 echo 输出的东西不是标准的格式文本,<aa.txt显然是标准的文本。
第 12 楼
发表于 2010-04-12 11:41 · 中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194 发帖 167 注册 2007-04-30 09:43 19年会员 UID 87022 性别 男
状态 离线
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是一样的运行效果。
第 13 楼
发表于 2010-04-12 11:55 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
Originally posted by exzzz at 2010-4-12 11:41 AM:
我记得不是很清楚了,但是好像注册表user那一块的内容,就是从localmachine影射过来的吧??
貌似只要修改localmachine的就好了吧,而且应该就是个固定的位置,至少XP,2003是一样的运行效果。
是的,壁纸的确是固定位置,但是假如壁纸采用动态的如gif格式的,就不是这个位置了。
还有其他情况,如收藏夹的位置,我的文档的位置,现在的“优化版”的xp都将这些改到d盘去了。所以说,用for的方法来截取,往往会由于情况的不同而出错的几率更大些
第 14 楼
发表于 2010-04-12 20:36 · 中国 山东 济南 电信
新手上路
★
积分 8 发帖 8 注册 2007-11-03 22:07 18年会员 UID 101614 性别 男
状态 离线
的确很想知道set /p=为什么不能支持管道,而又能支持set /p=<aa.txt。我很想知道为什么?是不是用其他方法能使其支持?
望不吝赐教,感谢先
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正