[已解决]如何把文件夹及文件名称按要求写入文本文件?
本帖最后由 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
INIWRITE( "manager.ini", "管理设置", "新增分类", $folder[$o] & "|" & INIREAD( "manager.ini", "管理设置", "新增分类", ""))
;$NAME = 此处的代码如何写才能获取文件名称?
INIWRITE( "manager.ini", "新增代码", $folder[$o], $NAME & "/")
Next
EndFunc ;==>_FileRecur请问以上代码中$NAME =后代码该如何写才能获取到文件名称?谢谢了 为何要去掉后缀名呢?只有一种格式 .txt 的文件(⊙_⊙)? 首先, 判断是子目录, 然后获取子目里的文件(夹), 然后去掉后缀名(如果有的话),
将它们先格式化(生成字符串), 最后一次写进INI, 这样效率高(如果文件多的话).
Func _FileRecur($_Path)
$folder = _FileListToArray($_Path, "*", 2)
If Not IsArray($folder) Then Return 0
Local $Dirs = ''
For $o = 1 To $folder
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
$tempfile = StringRegExpReplace($sFiles[$i], '\.{3}\z', '')
$files &= $tempfile & '/'
Next
IniWrite($ini, "新增代码", $folder[$o], $files)
EndIf
EndIf
Next
IniWrite($ini, "管理设置", "新增分类", $Dirs)
EndFunc 为何要去掉后缀名呢?只有一种格式 .txt 的文件(⊙_⊙)?
afan 发表于 2012-2-12 17:28 http://www.autoitx.com/images/common/back.gif
谢谢版主关注,其实这是lynfr8版主的那AU3代码管理器的配置文件,里面是后缀AU3文件,我想实现跟官方的那数据通用,所以就想学学改改代码 回复 3# user3000
谢谢兄长,初步试用一下在INI文件中只写入[管理设置]新增分类=,也许是我操作有误,还得好好消化一下,谢谢 回复user3000
谢谢兄长,初步试用一下在INI文件中只写入[管理设置]新增分类=,也许是我操作有误 ...
ccy666 发表于 2012-2-12 17:43 http://www.autoitx.com/images/common/back.gif
试下用绝对路径调用该函数? 谢谢版主关注,其实这是lynfr8版主的那AU3代码管理器的配置文件,里面是后缀AU3文件,我想实现跟 ...
ccy666 发表于 2012-2-12 17:35 http://www.autoitx.com/images/common/back.gif#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
$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
$s2 &= StringRegExpReplace($aFolder1[$i], '\.[^.]{1,5}$', '') & '/'
Next
$s2 &= @LF
Next
IniWriteSection($sFIni, '管理设置', $s1)
IniWriteSection($sFIni, '新增代码', $s2)
EndFunc ;==>_FileRecur
本帖最后由 afan 于 2012-2-12 18:16 编辑
不知道楼主
新增分类=BBB|AAA|
与下面的
AAA=
BBB=
顺序相反
7#的顺序是相同的。 不知道楼主
新增分类=BBB|AAA|
与下面的
AAA=
BBB=
顺序相反
7#的顺序是相同的。
afan 发表于 2012-2-12 18:06 http://www.autoitx.com/images/common/back.gif
谢谢A版,顺序可能是我手工添加时弄乱或者lynfr8管理器原本就是的,但这不影响使用,谢谢您费心了!
PS:也谢谢6楼兄长,只是小弟是新手,还是不懂得如何用修改为绝对路径{:face (197):} 回复 9# ccy666
另外提醒下,这种匹配文件之类的 ini 文件,如果文件名中含有“=”符号,则会在操作时产生一定的错误数据。
如文件夹名为“A=====A”,用内置ini*函数将无法正确操作,如此,请论坛搜索“_Ini”
页:
[1]