中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » VISTA中FOR语句问题,大家来帮帮忙~
作者:
标题: VISTA中FOR语句问题,大家来帮帮忙~ 上一主题 | 下一主题
zihongdelei
初级用户





积分 32
发帖 13
注册 2007-9-14
状态 离线
『楼 主』:  VISTA中FOR语句问题,大家来帮帮忙~

for /f "tokens=1,2,3,* delims=- " %%i in ('date /t') do set A=%%i&set B=%%j&set C=%%k&set D=%%l这句在XP中好用,在VISTA中不能用,即使以管理员运行也不能。貌似
for in ('')参数形式都不能运行?说'date /t'不是内部命令也不是外部命令。
请高手解释下?
纳闷的还有,VISTA中FOR说明中的例句:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
也不能运行,说'set'不是内部命令也不是外部命令。

[ Last edited by zihongdelei on 2008-2-21 at 06:08 PM ]

2008-2-21 17:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 2 楼』:  

date /t ← 这里没空格?
直接在命令行下面打命令?是的话%%i等替换成%i,单个,两个是用于批处理里面的
另外可以试着加usebackq 然后用`括住命令

2008-2-21 17:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zihongdelei
初级用户





积分 32
发帖 13
注册 2007-9-14
状态 离线
『第 3 楼』:  

哦!date /t原本有空格,不能运行,后来去掉还是不能。我说怎么有时候提示不应有%%i呢!学到啦~还有usebackq是怎么用?问题未解决呢……

2008-2-21 17:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zihongdelei
初级用户





积分 32
发帖 13
注册 2007-9-14
状态 离线
『第 4 楼』:  

usebackq用了后FOR将 date /t 当作字符串分解了。我想让它当命令执行,然后分解执行结果。

2008-2-21 17:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 5 楼』:  

加usebackq后,命令就用`(~键)括起来的
只是让你试一下的,这里可以不用usebackq的,用它是在某些命令中含有单撇号的情况下

2008-2-21 18:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zihongdelei
初级用户





积分 32
发帖 13
注册 2007-9-14
状态 离线
『第 6 楼』:  

FOR /F "usebackq tokens=1,* delims=:" %%i IN (`time /T`) DO set E=%%i&set F=%%j
运行结果一样,不是内部命令也不是外部命令。另外在FOR语句讲解帖子中多次提到的分解时间。就是我问的这个,一样不可以在VISTA中运行……

2008-2-21 18:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 7 楼』:  

for /f %i in ('date /t') do echo %i
显示2008/2/21
for /f %i in ('set') do echo %i
枚兴所有变量

确保你cmd是以管理员身份启动的

2008-2-21 20:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qdloverr
初级用户





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

例一:

@echo off
for /f "usebackq" %%i in (set) do (
echo %%i
)
pause
解说:这里的set依然表示文件set。

例二:

@echo off
for /f "usebackq" %%i in ('set') do (
echo %%i
)
pause
解说:这里的'set'表示字符串set。

例三:

@echo off
for /f "usebackq" %%i in (`set`) do (
echo %%i
)
pause
解说:这里的`set`表示命令set,注意这里用到的符号是后引号(键盘上数字1左面的那个键)。

例四:

@echo off
for /f "usebackq" %%i in ("set") do (
echo %%i
)
pause
解说:这里的"set"依然表示文件set。

总结一下:如果用到了usebackq参数,则(set)和("set")表示文件set,('set')表示字符串set,(`set`)表示命令set。
请注意区分。

有人会问,这个参数究竟有什么作用?
答:当你要解析的文件的路径中带有空格,比如你要解析的文件路径为C:\Documents and Settings\Administrator\桌面\hero.txt。
如果不用usebackq参数,你将得不到正确的结果。

如果你这样写的话
@echo off
for /f %%i in ("C:\Documents and Settings\Administrator\桌面\hero.txt") do (
echo %%i
)
pause
结果只是解析了一个字符串而不是文件。

如果你这样写的话
@echo off
for /f %%i in (C:\Documents and Settings\Administrator\桌面\hero.txt) do (
echo %%i
)
pause
结果会提示找不到C:\Documents。

而如果这样写
@echo off
for /f "usebackq" %%i in ("C:\Documents and Settings\Administrator\桌面\hero.txt") do (
echo %%i
)
pause
你就可以得到正确的结果。

2008-2-22 10:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: