Tosyk
Новичок
- Сообщения
- 206
- Репутация
- 0
Помогите улучшить скрипт.
1. Есть небольшой файл со списком файлов. И есть сами файлы в папке, их много.
2. Берём файл со списком и кидаем на скрипт:
а. сначала скрипт смотрит в папку с файлами и создаёт специальный файл-базу со списком этих файлов, он длинный получается
б. затем скрипт смотрит в переданный ему небольшой файл и если имена совпадают с базой то копирует файлы в папку из этим небольшим файлом
проблема в том, что у меня не получается настроить регулярное выражение. я вроде вывожу даже список файлов из небольшого файла в консоль, но они не копируются
помогите пожалуйста
небольшой файл, который я кидаю на скрипт:
сам скрипт:
подскажите как модифицировать скрипт. мне кажется проблема в этой функции:
дело в том, что это скрипт однажды уже был сделан, но тогда в небольшом файле со списком у файлов не было расширений и скрипт по сути искал файл с любым расширением, а теперь расширения появились и скрипт вроде как не хочет их находить.. не могу понять почему не работает.
1. Есть небольшой файл со списком файлов. И есть сами файлы в папке, их много.
2. Берём файл со списком и кидаем на скрипт:
а. сначала скрипт смотрит в папку с файлами и создаёт специальный файл-базу со списком этих файлов, он длинный получается
б. затем скрипт смотрит в переданный ему небольшой файл и если имена совпадают с базой то копирует файлы в папку из этим небольшим файлом
проблема в том, что у меня не получается настроить регулярное выражение. я вроде вывожу даже список файлов из небольшого файла в консоль, но они не копируются
помогите пожалуйста
небольшой файл, который я кидаю на скрипт:
Код:
Mesh 0 (0 alternatives)
==========================================
adachi_hair.msac.a.0.sps
adachi_hair.msac.d.0.sps
adachi_hair_0.sps
adachi_hair.msac.h.0.sps
adachi_hair.msac.g.0.sps
#ff191919.0.sps
adachi_hair.msac.f.0.sps
Mesh 1 (0 alternatives)
==========================================
hero_thighshield_chainmail.msac.d.0.sps
hero_thighshield_chainmail.msac.m.0.sps
&hero_thighshield_chainmail_msac_n&g&s.01fad73f1c5909ff0dfe67b4a016bb2a.sps
Mesh 2 (3 alternatives)
==========================================
adachi_costume_details_mlt.msac.d.0.sps
adachi_costume_details_mlt.msac.n.0.sps
adachi_costume_details_mlt.msac.g.0.sps
adachi_costume_details_mlt.msac.m.0.sps
grayhalf.bmp.0.sps
------------------------------------------
Alt 1
adachi_costume_details_mlt.msac.d.0.sps
adachi_costume_details_mlt.msac.n.0.sps
adachi_costume_details_mlt.msac.g.0.sps
adachi_costume_details_mlt.msac.m.0.sps
grayhalf.bmp.0.sps
------------------------------------------
сам скрипт:
Код:
#include <File.au3>
Global $sIniFile = FileGetShortName(@ScriptDir) & '\' & 'settings.ini'
Global $sFolder = IniRead ($sIniFile, 'Setting', 'Folder', @ScriptDir)
Global $iReplace = Int(IniRead ($sIniFile, 'Setting', 'Replace', 0))
Global $iSubDir = Int(IniRead ($sIniFile, 'Setting', 'SubDir', 0))
Global $iBuild = Int(IniRead ($sIniFile, 'Setting', 'Build', 0))
Global $iUpdate = Int(IniRead ($sIniFile, 'Setting', 'Update', 0))
Global $sListFileSearch = @ScriptDir& '\ListSearch.lst'
Global $aListFileSearch = LoadListSearch_()
Global $sListFileSave = @ScriptDir& '\ListSave.lst'
Global $aListFileSave = LoadListSave_()
If $CmdLine[0] Then
While $CmdLine[0]
FileRead_($CmdLine[$CmdLine[0]])
$CmdLine[0] -= 1
WEnd
EndIf
#cs
SaveListSave_()
If $iUpdate Then
SaveListSearch_()
EndIf
Func SaveListSave_()
Local $_iA, $_hFile = FileOpen($sListFileSave, 2 +8)
For $_iA = 1 To $aListFileSave[0]
FileWrite($_hFile, $aListFileSave[$_iA]& @CRLF)
Next
FileClose($_hFile)
FileDelete($sListFileSave)
EndFunc
#ce
Func SaveListSearch_()
Local $_iA, $_hFile = FileOpen($sListFileSearch, 2 +8)
For $_iA = 1 To $aListFileSearch[0]
FileWrite($_hFile, $aListFileSearch[$_iA]& @CRLF)
Next
FileClose($_hFile)
EndFunc
Func FileCopy_($s_FileIn)
Local $sFileOut
If $iBuild Then
$sFileOut = StringReplace($s_FileIn, $sFolder, @WorkingDir & '\textures')
Else
$sFileOut = @WorkingDir & '\textures\' & StringRegExpReplace($s_FileIn, '(^.*)\\(.*)$', '$2')
EndIf
FileCopy($s_FileIn, $sFileOut, $iReplace ? 9 : 8)
EndFunc
Func FileSearch_($_sName)
Local $_iA, $_sFile
For $_iA = 1 To $aListFileSearch[0]
$_sFileName = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$2')
$_sFileName = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$1')
Switch $_sFileName
Case $_sName
$aListFileSave[0] += 1
ReDim $aListFileSave[$aListFileSave[0] +1]
$aListFileSave[$aListFileSave[0]] = $_sFileName
FileCopy_($aListFileSearch[$_iA])
If $iUpdate Then
$aListFileSearch[$_iA] = $aListFileSearch[0]
ReDim $aListFileSearch[$aListFileSearch[0]]
$aListFileSearch[0] -= 1
EndIf
Return 1
EndSwitch
Next
EndFunc
Func CheckIsSave_($_sName)
Local $_iA
For $_iA = 1 To $aListFileSave[0]
If $aListFileSave[$_iA] = $_sName Then
Return 1
EndIf
Next
Return 0
EndFunc
Func FileRead_($s_File)
Local $h_File = FileOpen($s_File)
Local $_sName, $i_Pos, $_sOldName, $_iStopper
While 1
$_sName = FileReadLine($h_File)
If @error Then
FileClose($h_File)
ExitLoop
EndIf
#cs
If StringLeft($_sName, 5) = 'Mesh ' Then
$_iStopper = True
ContinueLoop
ElseIf StringLeft($_sName, 4) = 'Alt ' Then
$_iStopper = True
ContinueLoop
ElseIf StringLeft($_sName, 1) = '=' Then
$_iStopper = ($_iStopper = False)
ContinueLoop
ElseIf StringLeft($_sName, 1) = '-' Then
$_iStopper = ($_iStopper = False)
ContinueLoop
ElseIf $_iStopper Then
ContinueLoop
EndIf
#ce
If StringInStr($_sName, '.sps') Then
$_sName = StringRegExpReplace($_sName, '(^.*)/.sps$', '$2')
$_sName = StringRegExpReplace($_sName, '(^.*)/$', '$1')
ConsoleWrite('good-good: ' & $_sName & @LF)
; If Not CheckIsSave_($_sName) Then
FileSearch_($_sName)
; EndIf
EndIf
WEnd
EndFunc
Func LoadListSave_()
Local $_sList
If FileExists($sListFileSave) Then
$_sList = FileRead($sListFileSave)
EndIf
Return StringSplit($_sList, @CRLF, 1)
EndFunc
Func CreateListSearch_($s_Folder)
Local $h_Find = FileFindFirstFile($s_Folder& '\*.*')
Local $s_Find, $_sList
While 1
$s_Find = FileFindNextFile($h_Find)
If @error Then
ExitLoop
EndIf
If StringInStr(FileGetAttrib($s_Folder& '\'& $s_Find) , 'D') Then
If $iSubDir Then
$_sList &= CreateListSearch_($s_Folder& '\'& $s_Find)
EndIf
Else
$_sList &= $s_Folder& '\'& $s_Find& @CRLF
EndIf
WEnd
FileClose($h_Find)
Return $_sList
EndFunc
Func LoadListSearch_()
Local $_sList
If Not FileExists($sListFileSearch) Then
$_sList = CreateListSearch_($sFolder)
Local $_hFile = FileOpen($sListFileSearch, 2 +8)
FileWrite($_hFile, $_sList)
FileClose($_hFile)
Else
$_sList = FileRead($sListFileSearch)
EndIf
Return StringSplit($_sList, @CRLF, 1)
EndFunc
Сообщение автоматически объединено:
подскажите как модифицировать скрипт. мне кажется проблема в этой функции:
Код:
Func FileSearch_($_sName)
Local $_iA, $_sFile
For $_iA = 1 To $aListFileSearch[0]
$_sFileName = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$2')
$_sFileName = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$1')
Switch $_sFileName
Case $_sName
$aListFileSave[0] += 1
ReDim $aListFileSave[$aListFileSave[0] +1]
$aListFileSave[$aListFileSave[0]] = $_sFileName
FileCopy_($aListFileSearch[$_iA])
If $iUpdate Then
$aListFileSearch[$_iA] = $aListFileSearch[0]
ReDim $aListFileSearch[$aListFileSearch[0]]
$aListFileSearch[0] -= 1
EndIf
Return 1
EndSwitch
Next
EndFunc
Последнее редактирование: