itljl 发表于 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 ;带扩展名加参数

$strLine = StringTrimLeft($TestPath, 5);5连第一个空格一起删掉
MsgBox(0, "参数是", $strLine) ;这里只能提取第一个参数

上面的是可以正确获取参数。
但是,如果路径带参数的字符串换一下。
如 $path = "F:\game\tools\include\ChangDesk.exe f:\game\tools\img\ /gui"

就不能获取参数了,哪位高手有更好的办法?

afan 发表于 2010-8-10 18:43:46

本帖最后由 afan 于 2010-8-10 20:45 编辑

如果某个参数含空格就将此参数用引号括起来,之后就可以用正则获取。
不过,获取这个有什么用呢?不是有 $CmdLine 可以使用吗

itljl 发表于 2010-8-10 22:13:00

回复 2# afan


获取一个字符串中的程序参数。

afan 发表于 2010-8-10 22:15:52

本帖最后由 afan 于 2010-8-10 22:17 编辑

回复 3# itljl

要获取的话用正则一行代码搞定,不过
    我感兴趣的是这个字符串是如何获取的,能做什么用

afan 发表于 2010-8-10 22:19:08

莫非是从注册表中或者快捷方式中读取?

itljl 发表于 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"


总是不能三种情况都完美提取出参数。

afan 发表于 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'

C.L 发表于 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

netegg 发表于 2010-8-11 04:11:32

本帖最后由 netegg 于 2010-8-11 04:14 编辑

回复 8# C.L

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

C.L 发表于 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

netegg 发表于 2010-8-11 08:27:39

本帖最后由 netegg 于 2010-8-11 08:36 编辑

回复 10# C.L

S{3}是什么意思,文件后缀名?范围太小了吧
attrib.exefilename-s -a -r +h +i
怎么搞?

水木子 发表于 2010-8-11 08:30:59

回复 11# netegg

这里的 \S{3} 应该表示 3个 除空白符以外的任何字符,范围不小了。

netegg 发表于 2010-8-11 08:37:11

本帖最后由 netegg 于 2010-8-11 08:42 编辑

回复 12# 水木子
要是没有扩展名呢,或者有扩展名,比如.html
当然这么搞有点吹毛求屁了,不过既然要做总要想周到吧

xsjtxy 发表于 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

afan 发表于 2010-8-11 13:32:34

但是你这三个路径都是无效的啊。无论是快捷方式。还是批处理还是什么语言,都无法正常运行的。有空格的必须 ...
xsjtxy 发表于 2010-8-11 09:45 http://www.autoitx.com/images/common/back.gif


    LZ好像不在意这点… 如此的话就没什么意义了。_WinAPI_CommandLineToArgv() 也没辙。
页: [1] 2 3
查看完整版本: [已解决]如何能正确获取参数?我想了个办法