Назад | Перейти на главную страницу

Найдите файлы размером 0 КБ на жестком диске и замените их файлом с таким же именем с другого жесткого диска.

Недавно установил новый сервер Windows 2012 Essentials для клиента. У них была очень старая система XP, которую они использовали в качестве файлового сервера. Через несколько недель после того, что казалось успешным переносом файлов клиентов из старой системы XP, клиент обнаружил несколько файлов размером 0 КБ.

Я просмотрел их файловую структуру, и их тысячи.

Хорошая новость в том, что у меня все еще есть оригинальные диски, и файлы на этом диске есть и пригодны для использования. У меня он есть как image.vhd и прикреплен к серверу как диск.

Плохая новость заключается в том, что клиент использовал и обновил несколько файлов из миграции данных, поэтому реэкспорт данных в полном объеме невозможен. Или даже если бы я сделал один и вручную проследил за заменой 0 КБ, затраченное время непрактично из-за количества задействованных файлов.

Это мой первый раз, когда мне приходится сталкиваться с подобными проблемами, и я не знаю, как лучше всего подойти к этому.

Я знаю, что мне нужно каким-то образом найти файлы данных клиента с размером 0 КБ, а затем, когда он будет найден, посмотрите на исходный диск для файла, скопируйте и замените файл 0 КБ на сервере тем, который был найден на исходном диске.

Я пишу код, но не в Windows. Мой опыт программирования - это PHP, HTML, CSS, Javascript и другие языки для веб-сайтов и баз данных.

Мне действительно нужна помощь в том, как мне подойти к этому.

Заранее спасибо!

Следующий сценарий может быть отправной точкой.

@ECHO OFF >NUL
@SETLOCAL enableextensions disabledelayedexpansion

set "serverPath=D:\Path\files"
set "backupPath=D:\bat\files"

for /R "%serverPath%\" %%G in (*.*) do (
    if %%~zG EQU 0 (
        for /R "%backupPath%\" %%g in ("*%%~nxG") do (
            if "%%~nxG"=="%%~nxg" (
                echo server %%~G %%~zG 
                echo backup %%~g %%~zg
            )
        )

    )
)
@ENDLOCAL
goto :eof

Ссылка на основную документацию:

Примечание (с прямыми ссылками):

Пример вывода. Сделал несколько подпапок, каждая примерно по 20 файлов, в двух из них файлы нулевого размера (в байтах) (смоделирована неправильная копия):

==>D:\bat\ServerFault\678871.bat
server D:\Path\files\folder 1\111070290_8 daftar isi.pdf 0
backup D:\bat\files\folder 1\111070290_8 daftar isi.pdf 29
server D:\Path\files\folder 1\111070290_9_daftar_gambar.pdf 0
backup D:\bat\files\folder 1\111070290_9_daftar_gambar.pdf 32
server D:\Path\files\folder 2\111070117_2_lembar_pernyataan_orisinalitas.pdf 0
backup D:\bat\files\folder 2\111070117_2_lembar_pernyataan_orisinalitas.pdf 49
server D:\Path\files\folder 2\111070117_3_lembar_pengesahan.pdf 0
backup D:\bat\files\folder 2\111070117_3_lembar_pengesahan.pdf 36