qq4045728 发表于 2009-7-16 10:40:00

如何让配置文件支持这些命令

我的配置文件:

1=$windri$\a.exe

为什么AU3 runwait 运行不了,而换成c:\windows\a.exe却能正常运行了,请问是不是要定义$windir$等命令,那如何定义?

liongodmien 发表于 2009-7-16 11:04:37

$windri$\a.exe 在被读取时,会被看成是一个字符串,你如果没有$windri$这个目录,目录下也没有a.exe那就自然出错了

qq4045728 发表于 2009-7-16 12:02:27

2# liongodmien


那如何定义$windir$ 不被当成目录而是一个命令? 也就是$windir$=x:\windows

sanmoking 发表于 2009-7-24 19:42:10

本帖最后由 sanmoking 于 2009-7-24 20:40 编辑

晕倒,我明明发了一个帖子,编辑了一下,就变成了俩。。。楼主看楼下吧。一样的内容。

sanmoking 发表于 2009-7-24 19:43:39

本帖最后由 sanmoking 于 2009-7-24 20:29 编辑

你可以在你的程序里面把一些特定字符串转换成当前系统变量。当然这个只是个建议,还有个参考:
传送门:那个所谓的最牛逼的QQdll抓图工具的源码
这个里面关于程序启动参数的设定部分由可借鉴之处,楼主只需要研究里面识别特定字符后自动转换的部分。
下面给楼主一个参考方向:
可以使用

1=!@WindowsDir!\a.exe

然后在你的程序中专门花心思写一个自定义函数来解析两个!!之间的部分:
当读取到得字符串中有两个!存在并且字符串的第一个字符就是!的话(使用$ooo=StringSplit($zifuchuan,"!"),用$ooo=3和$ooo=""来嵌套验证),启动这个解析函数,在这个函数里面进行一些常见的系统目录宏的识别,
1.分割字符串为!之间的部分$a和之后的部分$b(这个能做到吧)
2.识别$a部分,例如if $a = "@WindowsDir" then
$i=@WindowsDir
elseif $a = "@ProgramFilesDir" then
$i=@ProgramFilesDir
……
else
msgbox(1,"出错了"."路径设置错误。") ;当然你也可以用别的语句代替
$i = 1
endif3.合并分析后的路径,简单了,$lujing = $i & $b,当然
if $i = 1 then
$lujing = @DesktopDir
else
$lujing = $i & $b
;这个位置可以增加一句分析$lujing是否存在的代码,不存在的话,要么创建要么$lujing = @DesktopDir
endif
当然@DesktopDir你可以设置成自己需要的啦。



上述有点乱,不知道能否帮助楼主。

sanmoking 发表于 2009-7-24 19:50:46

本帖最后由 sanmoking 于 2009-7-24 20:43 编辑

当然楼主要执意使用系统$windri$这样的自带变量,那楼上的原理通用,不过在windows系统中文件夹的名字是可以包含“$”这个符号的(所以是有可能出错的),但是不能包含“!”,所以建议楼书采纳楼上的方法。

……
……
……
……
然后在你的程序中专门花心思写一个自定义函数来解析两个$之间的部分:
当读取到得字符串中有$存在的话,启动这个解析函数,在这个函数里面进行一些常见的系统目录宏的识别,
1.分割字符串为$之间的部分$a和之后的部分$b(这个能做到吧)
2.识别$a部分,例如if $a = "WinDir" then
$i=@WindowsDir
elseif $a = "TEMP" then
$i=@tempdir
……
else
msgbox(1,"出错了"."路径设置错误。") ;当然你也可以用别的语句代替
$i = 1
endif3.合并分析后的路径,简单了,$lujing = $i & $b,当然
if $i = 1 then
$lujing = @DesktopDir
else
$lujing = $i & $b
;这个位置可以增加一句分析$lujing是否存在的代码,不存在的话,要么创建要么$lujing = @DesktopDir
endif
……
……
……
……

sanmoking 发表于 2009-7-24 20:48:46

本帖最后由 sanmoking 于 2009-7-24 20:50 编辑

另外补充一下,所有有关这种读取路径的程序,如果要创建文件或文件夹,都必须增加一句检验路径中是否有windows系统不允许出现的字符:
$lujing=StringRegExpReplace($lujing, '[\\\/\?\*\|\"\<\>]', "_")
高手不要笑我。我一直这样搞的。

lynfr8 发表于 2009-7-24 22:03:50

7# sanmoking

只要能解决问题,方法是可以灵活应用的
赞楼上一句
:face (29):
页: [1]
查看完整版本: 如何让配置文件支持这些命令