Что нового

Как поменять названия файлов случайным образом

mv6677

Новичок
Сообщения
105
Репутация
0
Версия AutoIt: 3.3.1.,0

Описание:
Доброго времени суток.

Вопрос:
В папке C:\1\ - есть txt файлы, с названиями 1.txt, 2.txt, 3.txt и т.д.
Как нажатием на кнопку макроса - поменять названия файлов случайным образом - используя те же самые числовые данные?

В итоге - получится что файлы вроде бы те же самые... но их названия ПЕРЕТАСОВАНЫ. Например файл который при запуске макроса - назывался 2.txt - после срабатывания - будет называться 5.txt или 11.txt (в названии файлов - всегда только числа).

Названия файлов - могут быть только те, что существуют в папке на момент запуска скрипта. То есть - если в папке с книгой всего 11 текстовых файлов, то при переименовании - не может быть файла с названием 14 или 15. Названия также - не могут повторяться.
Примечания:
 

Вложения

  • 1.zip
    1.9 КБ · Просмотры: 1

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
мой вариант-пример.
Код:
#include <File.au3>
#include <Array.au3>
Local $Dir = @ScriptDir & '\Тест'
For $i = 1 To 15
	Local $rnm = Random(1, 15, 1)
	If FileExists($Dir & '\' & $rnm & '.txt') Then ContinueLoop
	Local $fo = FileOpen($Dir & '\' & $rnm & '.txt', 1)
	FileWrite($fo, $rnm)
	FileClose($fo)
Next

Local $aFile = _FileListToArray($Dir, '*.txt', 1, True)
_ArrayDelete($aFile, 0)
While 1
	If UBound($aFile) <= 1 Then ExitLoop
	FileMove($aFile[0], $aFile[UBound($aFile) - 1] & '.tmp')
	FileMove($aFile[UBound($aFile) - 1], $aFile[0] & '.tmp')
	_ArrayDelete($aFile, 0)
	_ArrayDelete($aFile, UBound($aFile) - 1)
WEnd

$aFile = _FileListToArray($Dir, '*.tmp', 1, True)
For $i = 0 To $aFile[0]
	FileMove($aFile[$i], StringTrimRight($aFile[$i], 4))
	FileDelete($aFile[$i])
Next
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <Array.au3>
#include <File.au3>

Local $sPath = "C:\1"

Local $aFileList = _FileListToArray($sPath, "*.txt", $FLTA_FILES), $aOutList = $aFileList
If @error Then Exit MsgBox(0, "Ошибка", "Файлы не найдены")

_ArrayShuffle($aOutList, 1)
For $i = 1 To $aFileList[0]
	FileMove($sPath & "\" & $aFileList[$i], $sPath & "\" & $aOutList[$i] & ".tmp")
Next
For $i = 1 To $aFileList[0]
	FileMove($sPath & "\" & $aOutList[$i] & ".tmp", $sPath & "\" & $aOutList[$i])
Next
 
Верх