Что нового

[Автоматизация] Переименовывание папок на основе текстовых файлов

fyodorg

Чайник
Сообщения
5
Репутация
0
Подскажите пожалуйста, требуется переименовать много папок на основе текстового файла лежащего внутри каждой папки- то есть папки называются 1,2,3,4,4(2),5,6 и т.д. и в каждой этой папке лежит картинка и текстовый файл data.txt с названием картинки, нужно извлечь из этого файла название и переименовать папку из скажем "1" в "море".
 

ra4o

Скриптер
Сообщения
985
Репутация
180
Попробуйте так (только на всякий случай сделайте резервную копию всех папок :-[ )
Код:
#include <File.au3>

$MyDir = @ScriptDir ;Путь к дирректории с папками

$FileList = _FileListToArray($MyDir, Default, 2)
If Not @error Then
	For $i = 1 To $FileList[0]
		$FileName = StringStripWS ( FileRead($MyDir & '\' & $FileList[$i] & '\data.txt'),1+2+4);Чтение название картинки из файла и на всякий случай уберём возможные лишние пробелы
		$File = _FileListToArray($MyDir & '\' & $FileList[$i] & '\', '*.jpg', 1)
		FileMove($MyDir & '\' & $FileList[$i] & '\' & $File[1], $MyDir & '\' & $FileList[$i] & '\' & $FileName & '.jpg')
	Next
EndIf
 
Автор
F

fyodorg

Чайник
Сообщения
5
Репутация
0
К сожалению не сработало
 

joiner

Модератор
Локальный модератор
Сообщения
3 012
Репутация
502
приведите пример содержимого файла data.txt. а лучше прикрепите к сообщению или дайте ссылку.
 

joiner

Модератор
Локальный модератор
Сообщения
3 012
Репутация
502
в файлах по несколько названий. в задаче это не было указано. поэтому код у вас не работает. я тоже понял, в файле только одна строка с названием картинки.
может быть проще - выбрать все картинки и переместить их в созданные папки?
 

ZaRaki

Новичок
Сообщения
48
Репутация
19
Не совсем уверен что понял, а что вы приложили?
В 1 посту вы описываете, что каждая папка содержит свой data.txt файл, тоесть по смыслу подразумевается в каждой папки свой файл data.txt с 1 строкой названия изображения. А вы прикрепили файл с 5-7 строками. Это пример соединённых вместе файлов черезстрочно?
Второй вопрос, вы написали "картинка и текстовый файл data.txt с названием картинки", а вот двоеточие и символ перед двоеточием это часть названия? или название после двоеточия?
.
Если отвечать на ваш пост в прямом смысле слова, тогда вот.
Код:
#include <File.au3>
#include <Array.au3>

$FileList=_FileListToArray(@ScriptDir,"*",2)

$aa = 1
while $aa < $FileList[0]
$hFile = FileOpen(@ScriptDir & "\data.txt", 0)
$sChars = FileReadline($hFile)
FileClose($hFile)
filemove(@ScriptDir & "\" & $FileList[$aa],@ScriptDir & "\" & $sChars)

$aa = $aa + 1
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3 012
Репутация
502
InnI, ответы пошли после третьего поста, которые был оставлен на днях самим автором топика. причем тут карл? )))
 

InnI

AutoIT Гуру
Сообщения
4 214
Репутация
1 114
ответы пошли после третьего поста
Я об этом и говорю. Полтора года человек... тестировал? лежал в коме? сидел в тюрьме? работал?! и вдруг решил вернуться к вопросу переименования картинок :shok:

причем тут карл?
Откуда взялся мем про Карла. Откуда, Карл?
 

ZaRaki

Новичок
Сообщения
48
Репутация
19
Я об этом и говорю. Полтора года человек... тестировал? лежал в коме? сидел в тюрьме? работал?! и вдруг решил вернуться к вопросу переименования картинок :shok:
А нам то какая разница чем он занимался )
Он мог отредактировать 1 пост. Он мог создать ещё 1 тему для кармы себе "флуд". Так что всё ок.
 
Автор
F

fyodorg

Чайник
Сообщения
5
Репутация
0
в файлах по несколько названий. в задаче это не было указано. поэтому код у вас не работает. я тоже понял, в файле только одна строка с названием картинки.
может быть проще - выбрать все картинки и переместить их в созданные папки?
да, я наверно просто плохо объяснил, в data.txt несколько названий на разных языках, мне нужно на русском, те текст после r:, но до следующего языка, если так будет проще, то пусть от r: до ближайшего двоеточия.
картинка и data.txt итак лежат в одной папке, и вот эту самую папку с лежащими внутри data и картинкой надо переименовать потому что по цифрам непонятно что там внутри.
приложу несколько скриншотов так может понятней будет.

2019-08-17_225240.png
Сообщение автоматически объединено:

ZaRaki
название начинается после двоеточия
Сообщение автоматически объединено:

InnI
подзабил, тогда это не столь критично было, а сейчас решил все таки сделать.
 

Вложения

ZaRaki

Новичок
Сообщения
48
Репутация
19
Во, вот это уже хороший полноценный вопрос.
Ответ:
.
Код:
#include <File.au3>
#include <Array.au3>

$FileList=_FileListToArray(@ScriptDir,"*",2)

$aa = 1
$rusname = ''
while $aa < $FileList[0]
$hFile = FileOpen(@ScriptDir & "\" & $FileList[$aa] & "\data.txt", 0)
$rusname_spl = ''
While 1
    $sChars = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
    $rusname = stringsplit($sChars, ":")
    if($rusname[1]=='r') then $rusname_spl = $rusname[2]
WEnd
FileClose($hFile)

if($rusname_spl<>'') then
   dirmove(@ScriptDir & "\" & $FileList[$aa],@ScriptDir & "\" & $rusname_spl)
EndIf

$aa = $aa + 1
WEnd

.
Проверил, работает как надо. Если в data.txt нету буквы r: то переименовывать не будет. И на счёт одинаковых названий ты уж сам допиши код под нужны тебе шаблон наименований для одинаковых названий, по умолчанию если такая папка уже есть, то с одинаковым названием он ничего не будет делать.
 
Последнее редактирование:
Автор
F

fyodorg

Чайник
Сообщения
5
Репутация
0
ZaRaki
может я начинающий пользователь, прописал папку, ошибка-

"while $aa < $FileList[0]
while $aa < $FileList^ ERROR
>Exit code: 1 Time: 0.5416"

Код:
#include <File.au3>
#include <Array.au3>

$FileList=_FileListToArray(@ScriptDir,"D:\9",2)

$aa = 1
$rusname = ''
while $aa < $FileList[0]
$hFile = FileOpen(@ScriptDir & "\" & $FileList[$aa] & "\data.txt", 0)
$rusname_spl = ''
While 1
    $sChars = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
    $rusname = stringsplit($sChars, ":")
    if($rusname[1]=='r') then $rusname_spl = $rusname[2]
WEnd
FileClose($hFile)

if($rusname_spl<>'') then
   dirmove(@ScriptDir & "\" & $FileList[$aa],@ScriptDir & "\" & $rusname_spl)
EndIf

$aa = $aa + 1
WEnd
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 517
Репутация
321
Если Вы нажмете на ссылку функции, всплывет документация по этой функции:
Код:
_FileListToArray()

В которой указано, что первый параметр это путь до директории, а второй это файловая маска.
 

ZaRaki

Новичок
Сообщения
48
Репутация
19
ZaRaki
может я начинающий пользователь, прописал папку, ошибка-

"while $aa < $FileList[0]
while $aa < $FileList^ ERROR
>Exit code: 1 Time: 0.5416"
Ты зачем в строке $FileList=_FileListToArray(@ScriptDir,"D:\9",2) указал второй параметр как "D:\9", я чёт таких файлов с таким названием никогда в жизни не видел ))
Оставляй так же "*" не трогай это значение. Хочешь поменять директорию на конкретную (тоже не понятно зачем, не проще просто скрипт закинуть туда где хочешь запустить?) - просто пропиши везде где есть @ScriptDir вместо этой фразы свой путь директории без закрывающего слеша.
Типо если ты так хотел $FileList=_FileListToArray("D:\9","*",2)
 
Последнее редактирование:
Верх