Board logo

标题: VISTA中FOR语句问题,大家来帮帮忙~ [打印本页]

作者: zihongdelei     时间: 2008-2-21 17:21    标题: 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 ]

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

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

作者: zihongdelei     时间: 2008-2-21 17:56
usebackq用了后FOR将 date /t 当作字符串分解了。我想让它当命令执行,然后分解执行结果。

作者: pooronce     时间: 2008-2-21 18:37
加usebackq后,命令就用`(~键)括起来的 只是让你试一下的,这里可以不用usebackq的,用它是在某些命令中含有单撇号的情况下

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

作者: everest79     时间: 2008-2-21 20:25
for /f %i in ('date /t') do echo %i 显示2008/2/21 for /f %i in ('set') do echo %i 枚兴所有变量 确保你cmd是以管理员身份启动的

作者: qdloverr     时间: 2008-2-22 10:37
例一: @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 你就可以得到正确的结果。