Имеется файл-список содержащий имена файлов и папок с полными путями.
Содержание его каждый раз разное. Каждый путь на отдельной строке. Число строк в файл-списке от 1 до неограниченно. Путь во всех строках одинаковый. Папки в списке могут иметь в конце слеш, но могут и не иметь его. Имена папок могут иметь точки в имени, а также точки могут присутствовать и в путях. Файлы могут иметь лишние точки в имени или вовсе не иметь расширения.
Требуется:
1 Найти в списке первые 4 файла и присвоить переменным $var1 ... $var4 значения равные полному пути\имени с расширением этих файлов. Если файлов будет меньше, то остальные переменные $var не определять.
2 Записать в переменную $allfile число найденных в п1 файлов (0...4)
3 Определить переменную $nameArchv следующим образом:
Если в списке только один пункт, то (
$nameArchv = полному пути\имени [в случае файла, без расширения] из этого пункта
) Иначе (
Если файлы/папки находятся в корне диска, то (
$nameArchv = имени_диска\ и слову "Archive"
) Иначе (
$nameArchv = полному_пути\имени_папки в которой находятся папки или файлы, т.е., имя последней папки будет использовано дважды.
)
)
Код, который это выполняет, я написал, но он мне не нравится. Прошу посмотреть его и, по возможности, подправить.
Спасибо.
Пример файл-списка:
Содержание его каждый раз разное. Каждый путь на отдельной строке. Число строк в файл-списке от 1 до неограниченно. Путь во всех строках одинаковый. Папки в списке могут иметь в конце слеш, но могут и не иметь его. Имена папок могут иметь точки в имени, а также точки могут присутствовать и в путях. Файлы могут иметь лишние точки в имени или вовсе не иметь расширения.
Требуется:
1 Найти в списке первые 4 файла и присвоить переменным $var1 ... $var4 значения равные полному пути\имени с расширением этих файлов. Если файлов будет меньше, то остальные переменные $var не определять.
2 Записать в переменную $allfile число найденных в п1 файлов (0...4)
3 Определить переменную $nameArchv следующим образом:
Если в списке только один пункт, то (
$nameArchv = полному пути\имени [в случае файла, без расширения] из этого пункта
) Иначе (
Если файлы/папки находятся в корне диска, то (
$nameArchv = имени_диска\ и слову "Archive"
) Иначе (
$nameArchv = полному_пути\имени_папки в которой находятся папки или файлы, т.е., имя последней папки будет использовано дважды.
)
)
Код, который это выполняет, я написал, но он мне не нравится. Прошу посмотреть его и, по возможности, подправить.
Спасибо.
Код:
; формирование 4-х переменных с именами файлов, имени архива и числа найденых файлов (0...4)
$flagmany = 0
$allfile = 0
;$file = FileOpen($CmdLine[1], 0)
$file = FileOpen('filelist.tmp', 0)
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$flagmany += 1
If StringInStr(FileGetAttrib($line), 'D') Then
If Not IsDeclared("nameArchv") Then
$nameArchv = $line
If StringRight($line, 1) = "\" Then $nameArchv = StringTrimRight($line, 1)
EndIf
Else
$allfile += 1
Assign("var" & $allfile, $line, 0)
If Not IsDeclared("nameArchv") Then $nameArchv = StringRegExpReplace($line, '\.[^.]*$', '') ;Full path without File Extension
If $allfile = 4 Then ExitLoop
EndIf
Wend
FileClose($file)
$array = StringSplit($nameArchv, "\")
If $flagmany > 1 Then
If $array[0] <= 2 Then
$nameArchv = $array[1] & "\Archive"
Else
$nameArchv = StringTrimRight($nameArchv, StringLen($array[$array[0]])) & $array[$array[0]-1]
EndIf
EndIf
; ================================================================================================
; ===== Тестовое окно ======
$preskey = MsgBox(1+256, "test", _
"$nameArchv = " & $nameArchv & @CRLF & _
"$allfile = " & $allfile & @CRLF & _
"$var1 = " & Eval("var1") & @CRLF & _
"$var2 = " & Eval("var2") & @CRLF & _
"$var3 = " & Eval("var3") & @CRLF & _
"$var4 = " & Eval("var4") & @CRLF & _
@CRLF)
If $preskey = 2 Then Exit
; ==========================
Пример файл-списка:
Код:
e:\DISTRIBUT\7-Zip\0_Button_Test\test\_Button.7z
e:\DISTRIBUT\7-Zip\0_Button_Test\test\test_ch\
e:\DISTRIBUT\7-Zip\0_Button_Test\test\1
e:\DISTRIBUT\7-Zip\0_Button_Test\test\_Button.7z.001
e:\DISTRIBUT\7-Zip\0_Button_Test\test\deflate.7z
e:\DISTRIBUT\7-Zip\0_Button_Test\test\1.exe
e:\DISTRIBUT\7-Zip\0_Button_Test\test\all.exe
e:\DISTRIBUT\7-Zip\0_Button_Test\test\ppmd.exe