找回密码
 加入
搜索
查看: 12809|回复: 31

[AU3基础] [已解决]如何能正确获取参数?我想了个办法

 火.. [复制链接]
发表于 2010-8-10 18:38:49 | 显示全部楼层 |阅读模式
本帖最后由 itljl 于 2010-8-18 12:27 编辑
#include <file.au3>
#include <array.au3>
Local $szDrive, $szDir, $szFName, $szExt

$path = "c:\program Files\commend\test .123.au3 这里是参数 这里是参数2"

$TestPath = _PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
;~ _ArrayDisplay($TestPath,"Demo _PathSplit()")
;~ $TestPath[4] ;带扩展名加参数

$strLine = StringTrimLeft($TestPath[4], 5);5连第一个空格一起删掉
MsgBox(0, "参数是", $strLine) ;这里只能提取第一个参数
上面的是可以正确获取参数。
但是,如果路径带参数的字符串换一下。
如 $path = "F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui"

就不能获取参数了,哪位高手有更好的办法?
发表于 2010-8-10 18:43:46 | 显示全部楼层
本帖最后由 afan 于 2010-8-10 20:45 编辑

如果某个参数含空格就将此参数用引号括起来,之后就可以用正则获取。
不过,获取这个有什么用呢?不是有 $CmdLine 可以使用吗
 楼主| 发表于 2010-8-10 22:13:00 | 显示全部楼层
回复 2# afan


获取一个字符串中的程序参数。
发表于 2010-8-10 22:15:52 | 显示全部楼层
本帖最后由 afan 于 2010-8-10 22:17 编辑

回复 3# itljl

要获取的话用正则一行代码搞定,不过
    我感兴趣的是这个字符串是如何获取的,能做什么用
发表于 2010-8-10 22:19:08 | 显示全部楼层
莫非是从注册表中或者快捷方式中读取?
 楼主| 发表于 2010-8-11 00:18:49 | 显示全部楼层
回复 4# afan


是从快捷方式中读取出来的啊。

我想知道的就是如何把参数给分离出来。因为我试了几种方法 ,总不能兼容多种可能。

最简单的。
$path = "c:\program Files\commend\test .123.au3 这里是参数 这里是参数2"
另外还有
$path2 = "F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui"
$path3 = "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://baidu.com/test"


总是不能三种情况都完美提取出参数。
发表于 2010-8-11 00:25:01 | 显示全部楼层
$path3 = "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://baidu.com/test"
这个C:\Program Files\Internet Explorer\IEXPLORE.EXE 应该有引号才对
$path3 = '"C:\Program Files\Internet Explorer\IEXPLORE.EXE" http://baidu.com/test'
发表于 2010-8-11 04:04:30 | 显示全部楼层
我来个正则:
$path = "c:\program Files\commend\test .123.au3 这里是参数 这里是参数2"
$path2 = "F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui"
$path3 = "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://baidu.com/test"

MsgBox (0,"",$path & @CRLF& "的参数是:" & _getParam ($path) &@CRLF & _
                        $path2 & @CRLF & "的参数是:" &_getParam ($path2) &@CRLF & _
                        $path3 & @CRLF & "的参数是:" & _getParam ($path3))

Func _getParam ($str)
        $var = StringRegExpReplace ($str,'\S:\\.*\\.+\.\S{3}\h(.*)','$1')
        Return $var
EndFunc

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-11 04:11:32 | 显示全部楼层
本帖最后由 netegg 于 2010-8-11 04:14 编辑

回复 8# C.L

如果多个参数呢,比如服务类的启动都是多个参数的,顺便给个参考
#Include <WinAPIEx.au3>
_WinAPI_CommandLineToArgv( $sCmd )

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-11 04:50:36 | 显示全部楼层
回复 9# netegg

能获取完整的参数,多个参数需要分开的话,多加一行,将每个参数用“|”隔开就可以了吧,或者干脆变成数组返回
$path = "c:\program Files\commend\test .123.au3 这里是参数 这里是参数2"
$path2 = "F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui"
$path3 = "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://baidu.com/test"

MsgBox (0,"",$path & @CRLF& "的参数是:" & _getParam ($path) &@CRLF & _
                        $path2 & @CRLF & "的参数是:" &_getParam ($path2) &@CRLF & _
                        $path3 & @CRLF & "的参数是:" & _getParam ($path3))

Func _getParam ($str)
        $var = StringRegExpReplace ($str,'\S:\\.+\\.+\.\S{3}\h(.+)','$1')
        $var = StringReplace ($var," ","|")
        Return $var
EndFunc
发表于 2010-8-11 08:27:39 | 显示全部楼层
本帖最后由 netegg 于 2010-8-11 08:36 编辑

回复 10# C.L

S{3}是什么意思,文件后缀名?范围太小了吧
attrib.exe  filename  -s -a -r +h +i
怎么搞?
发表于 2010-8-11 08:30:59 | 显示全部楼层
回复 11# netegg

这里的 \S{3} 应该表示 3个 除空白符以外的任何字符,范围不小了。
发表于 2010-8-11 08:37:11 | 显示全部楼层
本帖最后由 netegg 于 2010-8-11 08:42 编辑

回复 12# 水木子
要是没有扩展名呢,或者有扩展名,比如.html
当然这么搞有点吹毛求屁了,不过既然要做总要想周到吧
发表于 2010-8-11 09:45:34 | 显示全部楼层
但是你这三个路径都是无效的啊。无论是快捷方式。还是批处理还是什么语言,都无法正常运行的。有空格的必须按照规则加引号。
$path = "c:\program Files\commend\test .123.au3 这里是参数 这里是参数2"
$path2 = "F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui"
$path3 = "C:\Program Files\Internet Explorer\IEXPLORE.EXE http://baidu.com/test"
$path = "c:\program Files\commend\test .123.au3" 这里是参数 这里是参数2
$path2 = F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui
$path3 = "C:\Program Files\Internet Explorer\IEXPLORE.EXE" http://baidu.com/test

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-11 13:32:34 | 显示全部楼层
但是你这三个路径都是无效的啊。无论是快捷方式。还是批处理还是什么语言,都无法正常运行的。有空格的必须 ...
xsjtxy 发表于 2010-8-11 09:45



    LZ好像不在意这点… 如此的话就没什么意义了。_WinAPI_CommandLineToArgv() 也没辙。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 10:46 , Processed in 0.134299 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表