3

У меня есть клиент, который ничего не знает о компьютерах, выполнил форматирование и переустановил из раздела восстановления своего старого рабочего стола AMD Athlon II X4 под управлением Windows 7. Это была его основная бизнес машина.

Я использовал Recuva и DiskDigger из среды Live, чтобы скопировать файлы на внешний жесткий диск объемом 3 ТБ.

Мало ли я знал, что DiskDigger имеет ограничение имени файла назначения, поэтому я был вынужден использовать корневой каталог моего уже достаточно полного внешнего диска. Для запуска обеих программ потребовалось почти 3 дня, и теперь ни Windows Explorer, ни минимальный файловый менеджер в Puppy Linux не могут полностью загрузить каталог.

Я попытался использовать Folder Axe (разделитель папок), чтобы разбить корневой каталог на более управляемые части, но он зависает при выборе этой папки для работы.

Я попытался оптимизировать папку для документов (я читал, что сокращает время загрузки в проводнике) и отключить имена файлов 8.3 в Windows.

Да, я знаю, что на SU был еще один вопрос о «папке Windows с миллионами файлов, которые не отвечают». Но ни один из ответов не был настолько велик, и это не касалось моей конкретной проблемы.

Есть идеи, обходные пути, догадки?

2 ответа2

1

Если я правильно понимаю, у вас есть следующая проблема:

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

К счастью для вас, я обнаружил еще 1,562,922 файла, оставшихся после этого разгрома... Я уверен, что мы можем разделить это на подпапки, используя PowerShell.

Сначала давайте запустим PowerShell ISE, перечислим все файлы и сохраним их в переменной.

$files = ls C:\recovered\

Выполните эту команду и иди пообедать. Я обещаю, что это закончится в конце концов...

Теперь мы собираемся перебрать все эти файлы и переместить их в управляемые подпапки. Для начала посмотрим, с кем мы имеем дело:

$files.count

Я постараюсь объяснить это по частям, чтобы вы могли легко изменить его для своих нужд ... Простите, если это слишком многословно для вас. Начнем с настройки нашего цикла:

#This is to keep track of files
$i = 0

#This is to keep track of subfolders
$x = 0

do
{

}
while ($i -le $files.count)

Я решил разделить мои каждые 1000 файлов:

$i = 0
$x = 0

do
{
    #If $i is divisible by 1000 with no remainder...
    #Create a new folder
    if ($i % 1000 -eq 0){

            #Increment x
            $x++

            #Log progress to the console
            Write-Host "Creating folder $x..."

            #Create the new folder
            #Start with a DIFFERENT root folder
            New-Item -Path C:\recovered_subfolders -Name $x -ItemType directory
        }
}
while ($i -le $files.count)

Запустите этот процесс в папке, отличной от той, в которой вы восстановили все файлы, чтобы вы могли сразу же просмотреть файлы.

Теперь мы фактически перемещаем файлы. Вот как выглядел весь мой сценарий:

$i = 0
$x = 0

do
{
    if ($i % 1000 -eq 0){
            $x++
            Write-Host "Creating folder $x..."
            New-Item -Path C:\recovered_subfolders -Name $x -ItemType directory
        }
    Move-Item $files[$i] -Destination C:\recovered_subfolders\$x\
    $i++
}
while ($i -le $files.count)

Он работает уже около 20 минут, и я получил только 22 000 файлов. Похоже, у тебя впереди еще один выходной. Удачи.

0

Я бы попробовал использовать XCOPY (help xcopy в cmd.exe), но обязательно сообщайте ему только об имени папки; то есть не: folder\* . Например:

xcopy /Q / YC:\clientPath\bigDirectory Z:\externalPath\bigDirectory

Это скопирует каталог с ним (/Q), перезаписав (/Y) все файлы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .