[已解决]如何能正确获取参数?我想了个办法
本帖最后由 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 20:45 编辑
如果某个参数含空格就将此参数用引号括起来,之后就可以用正则获取。
不过,获取这个有什么用呢?不是有 $CmdLine 可以使用吗 回复 2# afan
获取一个字符串中的程序参数。 本帖最后由 afan 于 2010-8-10 22:17 编辑
回复 3# itljl
要获取的话用正则一行代码搞定,不过
我感兴趣的是这个字符串是如何获取的,能做什么用 莫非是从注册表中或者快捷方式中读取? 回复 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"
总是不能三种情况都完美提取出参数。 $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' 我来个正则:
$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:14 编辑
回复 8# C.L
如果多个参数呢,比如服务类的启动都是多个参数的,顺便给个参考
#Include <WinAPIEx.au3>
_WinAPI_CommandLineToArgv( $sCmd ) 回复 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:36 编辑
回复 10# C.L
S{3}是什么意思,文件后缀名?范围太小了吧
attrib.exefilename-s -a -r +h +i
怎么搞? 回复 11# netegg
这里的 \S{3} 应该表示 3个 除空白符以外的任何字符,范围不小了。 本帖最后由 netegg 于 2010-8-11 08:42 编辑
回复 12# 水木子
要是没有扩展名呢,或者有扩展名,比如.html
当然这么搞有点吹毛求屁了,不过既然要做总要想周到吧 但是你这三个路径都是无效的啊。无论是快捷方式。还是批处理还是什么语言,都无法正常运行的。有空格的必须按照规则加引号。
$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
但是你这三个路径都是无效的啊。无论是快捷方式。还是批处理还是什么语言,都无法正常运行的。有空格的必须 ...
xsjtxy 发表于 2010-8-11 09:45 http://www.autoitx.com/images/common/back.gif
LZ好像不在意这点… 如此的话就没什么意义了。_WinAPI_CommandLineToArgv() 也没辙。