334822249 发表于 2010-4-25 09:10:45

看下那出毛病了 怎么运行不出来

$var = DriveGetDrive("CDROM")
dim $exe,$reg,$bat
$s1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1")
$s2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2")
$s3 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3")
$s4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4")
        If Not @error Then
                For $i = 1 To $var
                                DirCopy($var[$i] & '\常用软件', "c:\常用软件", 1)
                               
         if $s1 = 0 then
                                RunWait("C:\WINDOWS\Temp\快速设定分辨率.exe")
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1","REG_SZ","1")
            EndIf

            if $s2 = 0 then
                RunWait("C:\WINDOWS\Temp\一键填写IP192.168.1.110.bat","",@SW_HIDE)
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2","REG_SZ","1")
                        EndIf
                       
                        if $s3 = 0 then
                RunWait("C:\WINDOWS\Temp\智能关闭无用服务.bat","",@SW_HIDE)
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3","REG_SZ","1")
            EndIf
                       
            if $s4 = 0 then
                RunWait("C:\常用软件\SOFTINST.EXE")
                Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4","REG_SZ","1")
            EndIf
                Next
EndIf

auhj887 发表于 2010-4-25 10:26:50

看不懂,帮你顶。。。

lanfengc 发表于 2010-4-25 11:18:38

我给你的代码做下注释。 你自己看看错在哪。$var = DriveGetDrive("CDROM");调用库函数获取光驱的个数和盘符。返回类型为数组$var,其中$var代表光驱个数。
                               ;$var到$var是光驱的盘符。
dim $exe,$reg,$bat;定义这3个变量是干什么的? 本代码中没用到过。
$s1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1");从注册表中读出HKEY_LOCAL_MACHINE\SOFTWARE\Temp下的s1的值。
$s2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2");以下同,省略不写了。
$s3 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3")
$s4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4")
;这里有个疑问,如果该注册表中没有HKEY_LOCAL_MACHINE\SOFTWARE\Temp键,返回值是个空值。这个判断无效。
;建议读注册表之前先判断注册表中有没有HKEY_LOCAL_MACHINE\SOFTWARE\Temp键,没有的话直接执行IF中的那段代码。
;~ 成功: 返回指定值项的数据. @EXTENDED 设置类型为 $REG_... 值的类型,这些类型定义于 "Constants.au3" 包含文件.
;~ 失败: 返回空字符串 "",并把 @error 设为以下值之一:
;~       1 如果不能打开被请求的键
;~       2 如果不能打开被请求的主键
;~       3 如果不能远程连接到注册表
;~      -1 如果不能打开被请求的值
;~      -2 如果值的类型是不支持的
;~ 帮助中的说明如上,很显然,如果不存在该注册表项目,@error的值是2,
;~ 你的NOT @error 并不是1,所以,第一个判断就失效,程序直接退出了
;~ 如果存在该主键而不存在子健,那么@error的值是1,NOT @error的值是0,IF判断也不会继续执行。
;~ 所以,你的程序在执行之初不管运行了与否,都首先判断注册表中有没有Temp键和其下的4个子健。
;~ 如果没有则直接执行下面的相应代码。如果有才进行判断。
;~ 判断方法是:
;~ 1.直接RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1")这4句,然后从@error返回值来判断。
;~ 2.RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", 1)……RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", 4),
;~   还是根据@error返回值来判断。
;~ 可以将下面的FOR循环中的所有代码定义成一个子函数,需要调用的时候直接调用函数名就可以少写许多代码。

If Not @error Then;如果注册表读取成功才执行下面的代码,否则不执行。
        For $i = 1 To $var   ;定义变量$i用来获取光驱盘符。
                DirCopy($var[$i] & '\常用软件', "c:\常用软件", 1)
               
                if $s1 = 0 then;读取出的$s1为0才执行。
                        RunWait("C:\WINDOWS\Temp\快速设定分辨率.exe")
                  Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s1","REG_SZ","1")
                EndIf
                if $s2 = 0 Then;读取出的$s2为0才执行。
                        RunWait("C:\WINDOWS\Temp\一键填写IP192.168.1.110.bat","",@SW_HIDE)
                        Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s2","REG_SZ","1")
                EndIf
                if $s3 = 0 then   ;读取出的$s3为0才执行。
                        RunWait("C:\WINDOWS\Temp\智能关闭无用服务.bat","",@SW_HIDE)
                        Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s3","REG_SZ","1")
                EndIf
                if $s4 = 0 Then;读取出的$s4为0才执行。
                        RunWait("C:\常用软件\SOFTINST.EXE")
                        Regwrite("HKEY_LOCAL_MACHINE\SOFTWARE\Temp", "s4","REG_SZ","1")
                EndIf
        Next
EndIf

lanfengc 发表于 2010-4-25 11:21:38

另外,送上一句话,程序的关键判断语句之前可以加上MsgBox(0,Not @error,@error)这样的语句来回显判断参数,以确保程序的流程是按你的思路在执行。

334822249 发表于 2010-4-25 11:50:35

你帮我加下吧   

我的问题发在上面了


谁能把这段代码加个判断语句1
谁能把这段代码加个判断语句
记录付费主题, 价格:金钱 10 块 $var = DriveGetDrive("CDROM")
      If Not @error Then
                For $i = 1 To $var
                                          DirCopy($var[$i] & '\常用软件', "c:\常用软件", 1)
                        RunWait("C:\WINDOWS\Temp\快速设定分辨率.exe")
                        RunWait("C:\WINDOWS\Temp\一键填写IP192.168.1.110.bat","",@SW_HIDE)
                                          RunWait("C:\WINDOWS\Temp\智能关闭无用服务.bat","",@SW_HIDE)
                        RunWait("C:\常用软件\SOFTINST.EXE")
                Next
EndIf

这段代码 。exe和.bat都运行2遍    怎么加判断语句 在那加判断语句 才不运行2遍
命令要简单明了的
一看就明白的加上注解 谢谢了
收藏 分享



已好的代码如下
dim $exe,$reg,$bat

if $exe <> "" Then
      Run($exe)
ElseIf $reg <> "" Then
      Run(@ComSpec & ' /c regedit /s "'&$reg&'"',"", @SW_HIDE)
ElseIf      $bat <> "" Then
      Run($bat,"",@SW_HIDE)
Else
      Exit
EndIf
页: [1]
查看完整版本: 看下那出毛病了 怎么运行不出来