#language-agnostic #scripting #file #duplicate-removal #windows-scripting
#не зависит от языка #создание сценариев #файл #дубликаты #windows-скриптинг
Вопрос:
У меня есть сервер под управлением Windows Server 2003 R2 Enterprise с каталогами объемом от 50 000 до 250 000 текстовых файлов размером 1 КБ каждый. Имена файлов являются последовательными (например, MLLP000001.rcv, MLLP000002.rcv и т.д.), И идентичные файлы будут последовательными. Как только последующие файлы будут отличаться, я могу ожидать, что не получу другой идентичный файл.
Мне нужен скрипт, который выполнит следующее, но я не знаю, с чего начать.
for each file in the target directory index 'i'
{
for each file in the target directory index 'j' = i 1
{
compare the hash values of files i and j
if the hashes are identical
delete file j
if the hashes differ
set i = j // to skip past the files that are now deleted
break
}
}
Я пробовал пакетные скрипты DOS, но это действительно громоздко, я не могу выйти из внутреннего цикла, и он срабатывает сам по себе, потому что во внешнем цикле есть список файлов в каталоге, но этот список постоянно меняется. Насколько я знаю, в VBScript нет хэш-функции.
Ответ №1:
Поскольку файлы имеют размер всего 1 КБ, почему бы не выполнить побитовое сравнение и избежать хэша?
Ответ №2:
Похоже, вы могли бы сделать что-то вроде:
Set Files to an array of files in a given directory.
Set PreviousHash to hash of the first file in the Files.
For each CurrentFile file after the first in Files,
Set CurrentHash to hash of the CurrentFile.
If CurrentHash is equal to PreviousHash, then delete CurrentFile.
Else, set PreviousHash to CurrentHash.