找回密码
 加入
搜索
查看: 6944|回复: 20

[AU3基础] 如何获取已知程序所在的文件夹名?(已解决)16楼全码

 火.. [复制链接]
发表于 2011-7-18 00:10:53 | 显示全部楼层 |阅读模式
本帖最后由 夜猫猫 于 2011-7-18 21:11 编辑

搜索.找不到相应贴.只好再发个贴

以知道程序完全路径.怎么获取程序所在文件夹名
如:已经获得程序完全路径
C:\Windows\notepad.exe
C:\Windows\System32\cmd.exe

怎么获取windows或者System32这个文件夹名?
发表于 2011-7-18 00:16:58 | 显示全部楼层
#Include <WinAPIEx.au3>
_WinAPI_PathRemoveFileSpec
发表于 2011-7-18 00:51:51 | 显示全部楼层
回复 2# netegg
#include <file.au3>
Local $file ='C:\Windows\notepad.exe'
Local $fileinfo = _File_Get_Ext($file)
MsgBox(0,'',$fileinfo[1] & $fileinfo[2])

Func _File_Get_Ext($file)
        Local $testpath, $szDrive, $szDir, $szFName, $szExt
        $testpath = _PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
        Return $testpath
EndFunc
发表于 2011-7-18 07:30:53 | 显示全部楼层
本帖最后由 netegg 于 2011-7-18 07:37 编辑

回复 3# tubaba

说实话,没弄太明白,楼主要的是什么,除了文件名的文件夹还是什么,你这样不是不行,如果是全路径删除文件名的话,会稍微麻烦点,另外我一直没具体确定_pathsplit对不带扩展名的文件或者带.的及异形的文件夹会如何判断
发表于 2011-7-18 09:15:24 | 显示全部楼层
只查找最后一个路径分隔符位置然后取左侧字符串就可以了吧。
发表于 2011-7-18 10:17:15 | 显示全部楼层
本帖最后由 netegg 于 2011-7-18 10:20 编辑

回复 5# kevinch
怎么取?string*?
while 1
if stringright($string, 1) = '\' then return stringtrimright($string,1)
$string =  stringtrimright($string,1)
wend
这样?
 楼主| 发表于 2011-7-18 11:22:26 | 显示全部楼层
本帖最后由 夜猫猫 于 2011-7-18 11:23 编辑

因为论坛里的菜单大部分都是手动添加。我想自动加。
用于搜索游戏。比如。搜索网络游戏目录下的EXE文件。返回游戏的运行程序与游戏名(即程序所在的文件夹名)
经过一系列判断后自动加入数据库或INI文件中。
发表于 2011-7-18 11:32:54 | 显示全部楼层
搜索?
#Include <File.au3>
_FileListToArray
发表于 2011-7-18 11:58:36 | 显示全部楼层
回复  kevinch
怎么取?string*?
while 1
if stringright($string, 1) = '\' then return stringtrimri ...
netegg 发表于 2011-7-18 10:17

先stringsplit(文件全路径名,"\"),然后取出数组最后一项的内容,计算出长度,再从全路径名中stringleft去掉这个长度的文本即可了吧。
或者将数组重新拼起来,除去最后一项即可。
发表于 2011-7-18 12:42:36 | 显示全部楼层
windows.old这类呢
发表于 2011-7-18 13:10:03 | 显示全部楼层
没懂楼上所说的
 楼主| 发表于 2011-7-18 13:27:55 | 显示全部楼层
本帖最后由 夜猫猫 于 2011-7-18 13:30 编辑

文件名.文件全路径都可以获取.
论坛有个贴
http://www.autoitx.com/forum.php ... =%CE%C4%BC%FE%C3%FB
这个可以做到.
问题是怎么获得\文件夹名\文件名 两个\之间的数值?
stringright是返回字符串右起指定数量的字符.
但这个文件夹名字符数不能确定.不一定多长
发表于 2011-7-18 13:41:18 | 显示全部楼层
本帖最后由 netegg 于 2011-7-18 13:58 编辑
Func _filegetpath($filefullname)
        Local $ret
        If Not (StringInStr(FileGetAttrib($filefullname), 'D')) Or (StringRight($filefullname, 1) = '\') Then
                Dim $path = StringSplit($filefullname, '\')
                For $i = 1 To $path[0] - 1
                        $ret &= $path[$i] & '\'
                Next
                Return StringTrimRight($ret, 1)
        Else
                Return StringTrimRight(StringReplace($filefullname & '\', '\\', '\'), 1)
        EndIf
EndFunc   ;==>_filegetpath
大概可以了
 楼主| 发表于 2011-7-18 20:03:01 | 显示全部楼层
本帖最后由 夜猫猫 于 2011-7-18 20:46 编辑

不行哦.只相当与http://www.autoitx.com/forum.php ... =%CE%C4%BC%FE%C3%FB中的 _getdir($spath)

获取到路径D:\autoit3\Aut2Exe

需要在次删除Aut2Exe之前的数值

#include <file.au3>
Local $file ='D:\autoit3\Aut2Exe\A3X2EXE.exe'
Local $fileinfo = _filegetpath($file)
MsgBox(0,'',$fileinfo)

Func _filegetpath($filefullname)
        Local $ret
        If Not (StringInStr(FileGetAttrib($filefullname), 'D')) Or (StringRight($filefullname, 1) = '\') Then
                Dim $path = StringSplit($filefullname, '\')
                For $i = 1 To $path[0] - 1
                        $ret &= $path[$i] & '\'
                Next
                Return StringTrimRight($ret, 1)
        Else
                Return StringTrimRight(StringReplace($filefullname & '\', '\\', '\'), 1)
        EndIf
EndFunc   ;==>_filegetpath


正则怎么匹配最后一个\与倒数第2个\之间的数值?

Local $file ='D:\autoit3\Aut2Exe\A3X2EXE.exe'
$path = StringSplit($file, '\', 1)
For $i = 1 To $path[0] - 1
MsgBox(0,'',$path[$i])
Next
发表于 2011-7-18 20:20:18 | 显示全部楼层
Local $file ='D:\autoit3\Aut2Exe\A3X2EXE.exe'
$a_Arr=StringSplit($file,"")
$fileinfo = $a_Arr[UBound($a_Arr)-2]
MsgBox(0,'',$fileinfo)
难道要这个?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-2 08:29 , Processed in 0.112058 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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