夜猫猫 发表于 2011-7-18 00:10:53

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

本帖最后由 夜猫猫 于 2011-7-18 21:11 编辑

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

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

怎么获取windows或者System32这个文件夹名?

netegg 发表于 2011-7-18 00:16:58

#Include <WinAPIEx.au3>
_WinAPI_PathRemoveFileSpec

tubaba 发表于 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 & $fileinfo)

Func _File_Get_Ext($file)
        Local $testpath, $szDrive, $szDir, $szFName, $szExt
        $testpath = _PathSplit($file, $szDrive, $szDir, $szFName, $szExt)
        Return $testpath
EndFunc

netegg 发表于 2011-7-18 07:30:53

本帖最后由 netegg 于 2011-7-18 07:37 编辑

回复 3# tubaba

说实话,没弄太明白,楼主要的是什么,除了文件名的文件夹还是什么,你这样不是不行,如果是全路径删除文件名的话,会稍微麻烦点,另外我一直没具体确定_pathsplit对不带扩展名的文件或者带.的及异形的文件夹会如何判断

kevinch 发表于 2011-7-18 09:15:24

只查找最后一个路径分隔符位置然后取左侧字符串就可以了吧。

netegg 发表于 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文件中。

netegg 发表于 2011-7-18 11:32:54

搜索?
#Include <File.au3>
_FileListToArray

kevinch 发表于 2011-7-18 11:58:36

回复kevinch
怎么取?string*?
while 1
if stringright($string, 1) = '\' then return stringtrimri ...
netegg 发表于 2011-7-18 10:17 http://www.autoitx.com/images/common/back.gif
先stringsplit(文件全路径名,"\"),然后取出数组最后一项的内容,计算出长度,再从全路径名中stringleft去掉这个长度的文本即可了吧。
或者将数组重新拼起来,除去最后一项即可。

netegg 发表于 2011-7-18 12:42:36

windows.old这类呢

kevinch 发表于 2011-7-18 13:10:03

没懂楼上所说的

夜猫猫 发表于 2011-7-18 13:27:55

本帖最后由 夜猫猫 于 2011-7-18 13:30 编辑

文件名.文件全路径都可以获取.
论坛有个贴
http://www.autoitx.com/forum.php?mod=viewthread&tid=8157&highlight=%CE%C4%BC%FE%C3%FB
这个可以做到.
问题是怎么获得\文件夹名\文件名 两个\之间的数值?
stringright是返回字符串右起指定数量的字符.
但这个文件夹名字符数不能确定.不一定多长

netegg 发表于 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 - 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?mod=viewthread&tid=8157&highlight=%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 - 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 - 1
MsgBox(0,'',$path[$i])
Next

kevinch 发表于 2011-7-18 20:20:18

Local $file ='D:\autoit3\Aut2Exe\A3X2EXE.exe'
$a_Arr=StringSplit($file,"\")
$fileinfo = $a_Arr
MsgBox(0,'',$fileinfo)难道要这个?
页: [1] 2
查看完整版本: 如何获取已知程序所在的文件夹名?(已解决)16楼全码