关于一个驱动器路径的问题
本帖最后由 xiaojinglf 于 2010-5-6 07:06 编辑为了备份光驱上的软件安装包。我写了一个脚本。
但是执行中出现一个小问题。希望大家帮助。
脚本如下:
-------------------------------------start---------------------------------------
Dim $varCD = DriveGetDrive("CDROM")
If Not @error Then
For $i = 1 To $varCD
If StringInStr(DriveGetLabel($varCD[$i]), "沐雨xp") <> 0 Then ;如果搜寻到光驱卷标中包含“沐雨xp”
TrayTip ( "提示", "正在复制文件,请稍候……,请勿进行其他操作!", 30, 2)
DirCopy($varCD[$i] & "\files", "d:\soft\files" , 1 )
DirCopy($varCD[$i] & "\SORT", "d:\soft\SORT" , 1 )
FileCopy ($varCD[$i] & "\沐雨庭园软件选择安装器.EXE", "d:\soft\" , 9 )
FileCopy ($varCD[$i] & "\沐雨庭园软件选择安装器.INI", "d:\soft\" , 9 )
FileSetAttrib("d:\soft\sort","+H")
FileSetAttrib("d:\soft\沐雨庭园软件选择安装器.INI","+H")
TrayTip ( "提示", "软件已经成功保存在D盘soft文件夹中。", 30, 2)
Sleep (2000)
EndIf
Next
If Not FileExists($varCD[$i] & "\沐雨庭园软件选择安装器.EXE") Then
MsgBox (4096,"光驱中未发现“沐雨庭园”系列安装盘","如需保存软件到D盘备用,请插入“沐雨庭园”安装光盘后重试”(虚拟光驱加载Iso或者真实光驱均可)!")
EndIf
EndIf
------------------------------------------end-----------------------------------
前面复制文件一段都正常,证明cdrom盘符变量$varCD[$i]这个完全可以正常工作。文件也成功复制完成。
但是。如果我不插入光盘,此时会执行到 If Not FileExists($varCD[$i] & "\沐雨庭园软件选择安装器.EXE") Then这一句。
括号里面的变量$varCD[$i]好像无法生效。试运行也显示括号内有错误。不知道什么问题。望高手指导。谢谢。
另外,autoit有没有一个类似bat中的goto的跳转语法?我看了帮助都找不到类似的命令。
---------------------------------------------------
非常感谢下面各位的解答和帮助。 If Not FileExists($varCD[$i] & "\沐雨庭园软件选择安装器.EXE") Then
这句已经在循环之外,不出错才怪 If Not FileExists($varCD[$i] & "\沐雨庭园软件选择安装器.EXE") Then
这句已经在循环之外,不出错才怪
3mile 发表于 2010-5-2 21:58 http://www.autoitx.com/images/common/back.gif
当上述条件不满足时,也就是为找到光盘时。自然就会跳出循环到这里了。在这里判断文件是否存在。
我先前是在这里判断进程,都是可以的。而且我换成判断绝对路径的文件就可以正常,说明逻辑是正确的。但换成判断包含变量的文件就不行了。我估计问题在$varCD[$i]这里。 Dim $varCD = DriveGetDrive("CDROM")
If Not @error Then
For $i = 1 To $varCD
If StringInStr(DriveGetLabel($varCD[$i]), "沐雨xp") <> 0 Then ;如果搜寻到光驱卷标中包含“沐雨xp”
TrayTip ( "提示", "正在复制文件,请稍候……,请勿进行其他操作!", 30, 2)
DirCopy($varCD[$i] & "\files", "d:\soft\files" , 1 )
DirCopy($varCD[$i] & "\SORT", "d:\soft\SORT" , 1 )
FileCopy ($varCD[$i] & "\沐雨庭园软件选择安装器.EXE", "d:\soft\" , 9 )
FileCopy ($varCD[$i] & "\沐雨庭园软件选择安装器.INI", "d:\soft\" , 9 )
FileSetAttrib("d:\soft\sort","+H")
FileSetAttrib("d:\soft\沐雨庭园软件选择安装器.INI","+H")
TrayTip ( "提示", "软件已经成功保存在D盘soft文件夹中。", 30, 2)
Sleep (2000)
EndIf
Next
MsgBox(0,0,"$i="&$i);这里加个中断,自己看
;If Not FileExists($varCD[$i] & "\沐雨庭园软件选择安装器.EXE") Then
;MsgBox (4096,"光驱中未发现“沐雨庭园”系列安装盘","如需保存软件到D盘备用,请插入“沐雨庭园”安装光盘后重试”(虚拟光驱加载Iso或者真实光驱均可)!")
;EndIf
EndIf 本帖最后由 shqf 于 2010-5-3 21:47 编辑
FOR语句中的NEXT总会先加上1再和终值判断,当$i>终值时,跳出FOR循环语句,此时$i会比终值大1.所以你的代码会出错。If Not FileExists($varCD[$i] & "\沐雨庭园软件选择安装器.EXE") Then 语句当中$varCD[$i]应改为$varCD[$i-1] FOR语句中的NEXT总会先加上1再和终值判断,当$i>终值时,跳出FOR循环语句,此时$i会比终值大1.所以你的代码 ...
shqf 发表于 2010-5-3 21:45 http://www.autoitx.com/images/common/back.gif
非常感谢解答,学习了。我去试一下。 本帖最后由 xiaojinglf 于 2010-5-4 18:49 编辑
FOR语句中的NEXT总会先加上1再和终值判断,当$i>终值时,跳出FOR循环语句,此时$i会比终值大1.所以你的代码 ...
shqf 发表于 2010-5-3 21:45 http://www.autoitx.com/images/common/back.gif
改成$i-1后虽然可以正常查询文件。但是。并不能判断文件在正确的光盘中。加入实际光盘在第一个光驱中,而$i-1定义的是最后的一个光盘。因此即使文件复制成功。跳出next后。也强制显示警告。 本帖最后由 netegg 于 2010-5-3 23:02 编辑
没试过,不知道行不行
直接换成For $i In $varCD呢
下面对应的$varCD[$i]改成用$i 本帖最后由 xiaojinglf 于 2010-5-4 06:51 编辑
没试过,不知道行不行
直接换成For $i In $varCD呢
下面对应的$varCD[$i]改成用$i
netegg 发表于 2010-5-3 23:00 http://www.autoitx.com/images/common/back.gif
如果改成For $i In $varCD。$i变量就以盘符形式出现,next之前都是正确运行的。但后面跳出next后。就不好办了。
因为跳出next后。$i是最后变量值,所以无论前面是否成功。都会在最后一段找不到文件,除非文件真的在最后一个光驱。
另外,autoit有没有一个类似bat中的goto的跳转语法?我看了帮助都找不到类似的命令。我想如果复制成功就直接跳出,免得进行后面的判断。
Dim $varCD = DriveGetDrive("CDROM")
If Not @error Then
For $i In $varCD
If StringInStr(DriveGetLabel($i), "沐雨庭园") <> 0 Then ;如果搜寻到光驱卷标中包含“沐雨庭园”[这个必须是光驱中光盘的卷标!]
TrayTip ( "提示", "正在复制文件,请稍候……,请勿进行其他操作!", 30, 2)
DirCopy($i & "\files", "d:\soft\files" , 1 )
DirCopy($i & "\SORT", "d:\soft\SORT" , 1 )
FileCopy ($i & "\沐雨庭园软件选择安装器.EXE", "d:\soft\" , 9 )
FileCopy ($i & "\沐雨庭园软件选择安装器.INI", "d:\soft\" , 9 )
FileSetAttrib("d:\soft\sort","+H")
FileSetAttrib("d:\soft\沐雨庭园软件选择安装器.INI","+H")
TrayTip ( "提示", "软件已经成功保存在D盘soft文件夹中。", 30, 2)
Sleep (2000)
EndIf
Next
;MsgBox(0,0,"$i="&$i);临时
If Not FileExists($i & "\沐雨庭园软件选择安装器.EXE") Then ;此处的$i不对。
MsgBox (4096,"光驱中未发现“沐雨庭园”系列安装盘","如需保存软件到D盘备用,请插入“沐雨庭园”安装光盘后重试”(虚拟光驱加载Iso或者真实光驱均可)!")
EndIf
EndIf
3mile 发表于 2010-5-3 14:41 http://www.autoitx.com/images/common/back.gif
恩。我试过了。看到了当时的值了。谢谢解答 本帖最后由 netegg 于 2010-5-4 14:35 编辑
回复 9# xiaojinglf
这不是很简单吗,跳出循环之前,赋值给一个变量就行了
Dim $varCD = DriveGetDrive("CDROM")
If Not @error Then
For $i In $varCD
If StringInStr(DriveGetLabel($i), "沐雨庭园") <> 0 Then ;如果搜寻到光驱卷标中包含“沐雨庭园”[这个必须是光驱中光盘的卷标!]
TrayTip ( "提示", "正在复制文件,请稍候……,请勿进行其他操作!", 30, 2)
DirCopy($i & "\files", "d:\soft\files" , 1 )
DirCopy($i & "\SORT", "d:\soft\SORT" , 1 )
FileCopy ($i & "\沐雨庭园软件选择安装器.EXE", "d:\soft\" , 9 )
FileCopy ($i & "\沐雨庭园软件选择安装器.INI", "d:\soft\" , 9 )
FileSetAttrib("d:\soft\sort","+H")
FileSetAttrib("d:\soft\沐雨庭园软件选择安装器.INI","+H")
TrayTip ( "提示", "软件已经成功保存在D盘soft文件夹中。", 30, 2)
$disk = $i
Sleep (2000)
EndIf
Next
;MsgBox(0,0,"$disk="&$disk);临时
If Not FileExists($disk & "\沐雨庭园软件选择安装器.EXE") Then ;此处的$i不对。
MsgBox (4096,"光驱中未发现“沐雨庭园”系列安装盘","如需保存软件到D盘备用,请插入“沐雨庭园”安装光盘后重试”(虚拟光驱加载Iso或者真实光驱均可)!")
EndIf
EndIf 本帖最后由 xiaojinglf 于 2010-5-4 18:23 编辑
回复xiaojinglf
这不是很简单吗,跳出循环之前,赋值给一个变量就行了
Dim $varCD = DriveGetDriv ...
netegg 发表于 2010-5-4 14:29 http://www.autoitx.com/images/common/back.gif
不行。我试过先赋值。如果光盘存在,就么有问题。一旦不存在此光盘。就无任何结果。报变量错误。
如果将此处变量改为 $varD = $i等就可以。但是如果没有光盘。将赋值为最后一个光驱盘符。仍然导致文件不能判断。 本帖最后由 xiaojinglf 于 2010-5-4 18:53 编辑
回复 5# shqf
改成$i-1后虽然可以正常查询文件。但是。并不能判断文件在正确的光盘中。加入实际光盘在第一个光驱中,而$i-1定义的是最后的一个光盘。因此即使文件复制成功。跳出next后。也强制显示警告。
因此需要在发现正确光盘并进行了复制后立即跳出循环最好。 本帖最后由 shqf 于 2010-5-4 20:32 编辑
这是另外一个问题。其实早就存在了。之前我只是就你先前的疑问进行了说明。是的,现在的问题如想简单点解决的话,只要在循环体内拷贝语句后面加个EXIT就行。如不想就此结束程序的,加个标志就行。如程序一开始设个变量$flag=false,正确拷贝了,就设$flag=ture,并加上exitloop。循环体外,用if 来判断$flag为真还是为否。 这是另外一个问题。其实早就存在了。之前我只是就你先前的疑问进行了说明。是的,现在的问题如想简单点解决 ...
shqf 发表于 2010-5-4 20:22 http://www.autoitx.com/images/common/back.gif
太感谢你的解答了。我自己改了一下。非常好了。Dim $varCD = DriveGetDrive("CDROM")
$flag=false
If Not @error Then
For $i = 1 To $varCD
If StringInStr(DriveGetLabel($varCD[$i]), "沐雨庭园") <> 0 Then ;如果搜寻到光驱卷标中包含“沐雨庭园”[这个必须是光驱中光盘的卷标!]
TrayTip ( "提示", "正在复制文件,请稍候……,请勿进行其他操作!", 30, 2)
DirCopy($varCD[$i] & "\files", "d:\soft\files" , 1 )
DirCopy($varCD[$i] & "\SORT", "d:\soft\SORT" , 1 )
FileCopy ($varCD[$i] & "\沐雨庭园软件选择安装器.EXE", "d:\soft\" , 9 )
FileCopy ($varCD[$i] & "\沐雨庭园软件选择安装器.INI", "d:\soft\" , 9 )
FileSetAttrib("d:\soft\sort","+H")
FileSetAttrib("d:\soft\沐雨庭园软件选择安装器.INI","+H")
TrayTip ( "提示", "软件已经成功保存在D盘soft文件夹中。", 30, 2)
Sleep (2000)
$flag=True
exitloop
EndIf
Next
If $flag=false Then
MsgBox (4096,"光驱中未发现“沐雨庭园”系列安装盘","如需保存软件到D盘备用,请插入“沐雨庭园”安装光盘后重试”(虚拟光驱加载Iso或者真实光驱均可)!")
EndIf
EndIf
页:
[1]
2