Проверьте, существует ли содержимое файла с powershell - PullRequest
0 голосов
/ 21 сентября 2018

Заранее извиняюсь, если мой вопрос не ясен или неправильно отформатирован.Это моя первая публикация здесь.

У меня есть простой сценарий powerhshell, который копирует файлы из одной папки в другую, если файл еще не существует в папке назначения.Однако моя текущая проблема заключается в том, что, хотя файлы имеют разные имена, они могут иметь одинаковое содержимое.Я хочу, чтобы скрипт мог определить, существует ли содержимое файла в папке назначения, и если это так, ничего не делать.Если содержимое файла еще не существует в месте назначения, он копирует файл.Любая помощь приветствуется.

$date = get-date
$path = "path1"
$destination = "path2" 
Foreach($file in (Get-ChildItem $path)) {
If($file.LastWriteTime -gt $date.date) 
{ 
    #Test to see if the file already exists in the destination.
    if (!(Test-path (join-path $destination $file.name)))
    {
       Copy-Item -Path $file.fullname -Destination $destination
    }
}

}

1 Ответ

0 голосов
/ 21 сентября 2018

Я собираюсь пойти с тем, что публикует Kory Gill.

Используйте get-filehash, чтобы проверить хэши файлов, чтобы увидеть, совпадают они или нет ... даже если их имена отличаются.Хэширует содержимое.Имейте в виду, что любая разница создаст другой хэш.Любой пробел или символ, находящийся в одном файле, а не в другом, создаст совершенно другой хэш.Но, если вы ищете точные совпадения, это работает лучше всего.используйте алгоритм Sha256, так как sha1 и md5 или объявлены небезопасными (возможно получить коллизии), хотя с Sha1 может быть трудно получить коллизию еще сегодня, если вы действительно не пытаетесь.

if((Get-FileHash -Path <file1> -Algorithm SHA256).Hash -ne (Get-FileHash -Path <file1> -Algorithm SHA256).Hash)
{
    "Copy the file"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...