无忧启动论坛

标题: 这个for语句为什么仅输出一行? [打印本页]

作者: FLOPPY    时间: 2011-9-23 10:31
标题: 这个for语句为什么仅输出一行?
  1. @echo off
  2. for /F "delims=" %%a in ('xcopy "D:\*.txt" /lrh') do if exist %%a if not defined "%%~dpa" set ""%%~dpa"=="&echo. %%~dpa
  3. pause
复制代码
假如d:\下有3个文本文件,我的理解是执行后的结果应该显示为
3行d:\,可现在只显示一行d:\。实在弄不明白?这个复合语句
set ""%%~dpa"=="&echo. %%~dpa为什么中间有两个==?set 后的那两个""表示的什么?哪位老师
能否给详细讲解一下?谢谢

[ 本帖最后由 FLOPPY 于 2011-9-24 10:00 编辑 ]
作者: jh1688    时间: 2011-9-23 12:08
楼主可否先运行一下该批再发帖,这是一个不可运行的批……

看图所示;一个是ECHO OFF,另一个是ECHO ON




作者: 2011_sim    时间: 2011-9-23 15:58
@jh1688
图片1是此批与测试目录同一目录的结果,是由xcopy引起的.

@FLOPPY  
if exist %%a if not defined "%%~dpa" set ""%%~dpa"=="&echo. %%~dpa
这句是一条多条件判断的复合语句:两个if(是并列关系或可以理解为逻辑and)如果两个if的结果都为真则为真接着执行
set ""%%~dpa"=="&echo. %%~dpa,(这句好理解:为真设定变量并打印出来);两个if的结果如果其中一个为假则为
假不执行set ""%%~dpa"=="&echo. %%~dpa.直接执行pause.

这个批中因为for 的循环特性并且第一次循环的时候%%a确实已被赋值,if exist %%a肯定为真,接着看环境变量
中是否存在名为%%~dpa(%%a的扩展)的变量名,如果没有则为真执行set ""%%~dpa"=="&echo. %%~dpa.
第二次循序的时候假设%%a确实也已被赋值,if exist %%a也肯定为真.if not defined "%%~dpa"就变为假了,因为前面已经
设定过变量了,所以不再set ""%%~dpa"=="&echo. %%~dpa直接跳到pause这句,所以不管循环多少次只输出一行%%~dpa.
此批文件感觉逻辑上有问题,已设定目标目录还判断/设定变量这些干什么~~
作者: x9tian    时间: 2011-9-23 16:05
你这是取的代码其中的一段吧,SET 后面之所以跟两个引号,是因为%%~dpa 有可能是含有空格的路径, set 语句不能给
像, set C:\Documents and Settings\Administrator\Application Data=****  这样的路径赋值。 它会认为程序代码错误。

SET 后面之所以有两个等号,是因为第二个等号就是给前面的变量赋的值。
第二个等号后面的引号和SET前面的第一个等号是 引号对
SET  后第二个引号是与等号前面的那个引号 构成 引号对。
作者: jh1688    时间: 2011-9-23 17:06
回复楼上两位:

图片1和2是一样的,只是ECHO OFF & ON 而已……

我看到这帖子没有及时回复,就是觉得他有点问题,在电脑上运行后,证实了这一点……

XCOPY 不能拷贝自身,谁都知道,可能楼主不知道,故有此一问……

[ 本帖最后由 jh1688 于 2011-9-23 17:09 编辑 ]
作者: x9tian    时间: 2011-9-24 04:14
原帖由 jh1688 于 2011-9-23 17:06 发表
回复楼上两位:

图片1和2是一样的,只是ECHO OFF & ON 而已……

我看到这帖子没有及时回复,就是觉得他有点问题,在电脑上运行后,证实了这一点……

XCOPY 不能拷贝自身,谁都知道,可能楼主不知道,故 ...

   不解释,,说了这是代码中的一段,你能运行吗?
你把后面那句改成COPY  %%i %systemdrive% 试试
作者: jh1688    时间: 2011-9-24 07:53
楼上的,没有谁让你解释,那么激动干什么??

楼主把帖子发一段,谁知道他干什么,我说错什么了???

更何况我在二楼已说过,这是一个不可运行的批……

[ 本帖最后由 jh1688 于 2011-9-24 07:54 编辑 ]
作者: FLOPPY    时间: 2011-9-24 10:00
别伤和气哈。。。感谢楼上3位详细的解答,弄明白了。
作者: x9tian    时间: 2011-9-29 09:14
原帖由 jh1688 于 2011-9-24 07:53 发表
楼上的,没有谁让你解释,那么激动干什么??

楼主把帖子发一段,谁知道他干什么,我说错什么了???

更何况我在二楼已说过,这是一个不可运行的批……

猪头木脑......




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3