找回密码
 加入
搜索
查看: 3329|回复: 9

[AU3基础] [已解决]如何把文件夹及文件名称按要求写入文本文件?

  [复制链接]
发表于 2012-2-12 16:46:32 | 显示全部楼层 |阅读模式
本帖最后由 ccy666 于 2012-2-12 18:27 编辑

小弟有一文件夹DATA,里面所含文件夹及文件如下:
D:\DATA
├─AAA
│      ECV.txt
│      HR1.txt
│      SD.txt
│      
└─BBB
        1.txt
        GG345.txt

想写一个脚本,要求最终能得到如下内容的INI文件:
[管理设置]
新增分类=BBB|AAA|
[新增代码]
AAA=ECV/HR1/SD/
BBB=1/GG345/

网上看了一些例子,学着写代码如下:
#include <File.au3>

inidelete("manager.ini", "管理设置", "新增分类")
inidelete("manager.ini", "新增代码")

_FileRecur("Data") 

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*", 2)
        If Not IsArray($folder) Then Return 0
        For $o = 1 To $folder[0]
                        INIWRITE( "manager.ini", "管理设置", "新增分类", $folder[$o] & "|" & INIREAD( "manager.ini", "管理设置", "新增分类", ""))
                        ;$NAME = 此处的代码如何写才能获取文件名称?
            INIWRITE( "manager.ini", "新增代码", $folder[$o], $NAME & "/")
                        Next
        EndFunc   ;==>_FileRecur
请问以上代码中$NAME =后代码该如何写才能获取到文件名称?谢谢了
发表于 2012-2-12 17:28:37 | 显示全部楼层
为何要去掉后缀名呢?只有一种格式 .txt 的文件(⊙_⊙)?
发表于 2012-2-12 17:31:03 | 显示全部楼层
首先, 判断是子目录, 然后获取子目里的文件(夹), 然后去掉后缀名(如果有的话),
将它们先格式化(生成字符串), 最后一次写进INI, 这样效率高(如果文件多的话).
Func _FileRecur($_Path)
$folder = _FileListToArray($_Path, "*", 2)
If Not IsArray($folder) Then Return 0
Local $Dirs = ''
For $o = 1 To $folder[0]
        If FileGetAttrib($folder[$o]) = 'd' Then
                $Dirs &= $folder[$o] & '|'
                $sFiles = _FileListToArray($_Path & '\' & $folder[$o])
                If Not @error Then
                        Local $files = ''
                        For $i = 1 To $sFiles[0]
                                $tempfile = StringRegExpReplace($sFiles[$i], '\.[a-zA-Z]{3}\z', '')
                                $files &= $tempfile & '/'
                        Next
                        IniWrite($ini, "新增代码", $folder[$o], $files)
                EndIf
        EndIf
Next
IniWrite($ini, "管理设置", "新增分类", $Dirs)
EndFunc
 楼主| 发表于 2012-2-12 17:35:58 | 显示全部楼层
为何要去掉后缀名呢?只有一种格式 .txt 的文件(⊙_⊙)?
afan 发表于 2012-2-12 17:28



    谢谢版主关注,其实这是lynfr8版主的那AU3代码管理器的配置文件,里面是后缀AU3文件,我想实现跟官方的那数据通用,所以就想学学改改代码
 楼主| 发表于 2012-2-12 17:43:27 | 显示全部楼层
回复 3# user3000


    谢谢兄长,初步试用一下在INI文件中只写入[管理设置]新增分类=,也许是我操作有误,还得好好消化一下,谢谢
发表于 2012-2-12 17:49:11 | 显示全部楼层
回复  user3000


    谢谢兄长,初步试用一下在INI文件中只写入[管理设置]新增分类=,也许是我操作有误 ...
ccy666 发表于 2012-2-12 17:43



    试下用绝对路径调用该函数?
发表于 2012-2-12 18:02:46 | 显示全部楼层
谢谢版主关注,其实这是lynfr8版主的那AU3代码管理器的配置文件,里面是后缀AU3文件,我想实现跟 ...
ccy666 发表于 2012-2-12 17:35
#include <File.au3>

_FileRecur(@ScriptDir & '\DATA', @ScriptDir & '\manager.ini')

Func _FileRecur($_Path, $sFIni)
        Local $aFolder = _FileListToArray($_Path, '*', 2)
        If Not IsArray($aFolder) Then Return 0
        Local $s1 = '新增分类 = ', $s2 = ''
        For $o = 1 To $aFolder[0]
                $s1 &= $aFolder[$o] & '|'
                Local $aFolder1 = _FileListToArray($_Path & '\' & $aFolder[$o], '*', 1)
                $s2 &= $aFolder[$o] & ' = '
                If Not IsArray($aFolder1) Then
                        $s2 &= @LF
                        ContinueLoop
                EndIf
                For $i = 1 To $aFolder1[0]
                        $s2 &= StringRegExpReplace($aFolder1[$i], '\.[^.]{1,5}$', '') & '/'
                Next
                $s2 &= @LF
        Next
        IniWriteSection($sFIni, '管理设置', $s1)
        IniWriteSection($sFIni, '新增代码', $s2)
EndFunc   ;==>_FileRecur
发表于 2012-2-12 18:06:34 | 显示全部楼层
本帖最后由 afan 于 2012-2-12 18:16 编辑

不知道楼主
新增分类=BBB|AAA|
与下面的
AAA=
BBB=
顺序相反

7#的顺序是相同的。
 楼主| 发表于 2012-2-12 18:20:31 | 显示全部楼层
不知道楼主
新增分类=BBB|AAA|
与下面的
AAA=
BBB=
顺序相反

7#的顺序是相同的。
afan 发表于 2012-2-12 18:06


谢谢A版,顺序可能是我手工添加时弄乱或者lynfr8管理器原本就是的,但这不影响使用,谢谢您费心了!

PS:也谢谢6楼兄长,只是小弟是新手,还是不懂得如何用修改为绝对路径
发表于 2012-2-12 18:21:43 | 显示全部楼层
回复 9# ccy666


    另外提醒下,这种匹配文件之类的 ini 文件,如果文件名中含有“=”符号,则会在操作时产生一定的错误数据。
如文件夹名为“A=====A”,用内置ini*函数将无法正确操作,如此,请论坛搜索“_Ini”
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-19 14:32 , Processed in 0.095803 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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