Что нового

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

fyodorg

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

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Попробуйте так (только на всякий случай сделайте резервную копию всех папок :-[ )
Код:
#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
 

joiner

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

joiner

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

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,556
Репутация
628
InnI, ответы пошли после третьего поста, которые был оставлен на днях самим автором топика. причем тут карл? )))
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ответы пошли после третьего поста
Я об этом и говорю. Полтора года человек... тестировал? лежал в коме? сидел в тюрьме? работал?! и вдруг решил вернуться к вопросу переименования картинок :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
подзабил, тогда это не столь критично было, а сейчас решил все таки сделать.
 

Вложения

  • 2019-08-17_225223.png
    2019-08-17_225223.png
    77 КБ · Просмотры: 8
  • 2019-08-17_225210.png
    2019-08-17_225210.png
    53.9 КБ · Просмотры: 6
  • 2019-08-17_225158.png
    2019-08-17_225158.png
    78.2 КБ · Просмотры: 6

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,590
Репутация
341
Если Вы нажмете на ссылку функции, всплывет документация по этой функции:
Код:
_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)
 
Последнее редактирование:
Верх