Копирование скрипта 57 000 изображений - PullRequest
1 голос
/ 04 марта 2020

Здравствуйте. В настоящее время я пытаюсь написать скрипт для копирования всех изображений из дерева папок в одну единственную папку. Мне нужно взять все изображения, около 57 000, а затем сделать с ними какую-то другую работу. Я сделал простую команду, чтобы скопировать их, используя Get-ChildItem и конвейерную передачу в Copy-Item. Тем не менее, это не учитывает дубликаты имен (которых много). Мне нужна помощь в написании этой части, чтобы создать полезный способ скопировать все элементы и сохранить их названия. В настоящее время у меня есть:

Get-ChildItem | Rename-Item -NewName { $_.BaseName +(1)+$_.Extension } -PassThru | Copy-Item -Destination "C:\Users\insert user here\temp"

Мне нужна любая информация, которую я могу получить. Я знаю, что это только добавляет (1) к концу имени файла, но мне нужно найти способ получить индекс для всех элементов или что-то в этом роде. Я также предпочел бы не переименовывать все оригинальные файлы, только копии. Спасибо!

1 Ответ

0 голосов
/ 04 марта 2020

Используя папки, которые выглядели так ( Папка 4 намеренно пуста ):

PS C:\> Get-ChildItem -Path C:\temp\YourDirectory\ -Recurse


    Directory: C:\temp\YourDirectory

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        04/03/2020    16:03                Folder1
d-----        04/03/2020    16:04                Folder2
d-----        04/03/2020    16:04                Folder3
d-----        04/03/2020    16:02                Folder4
-a----        04/03/2020    16:03              0 MyImage.png
-a----        04/03/2020    16:03              0 YourImage.png

    Directory: C:\temp\YourDirectory\Folder1

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        04/03/2020    16:03              0 MyImage.png
-a----        04/03/2020    16:03              0 MyPhoto.jpg

    Directory: C:\temp\YourDirectory\Folder2

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        04/03/2020    16:04              0 YourImage.png

    Directory: C:\temp\YourDirectory\Folder3

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        04/03/2020    16:04              0 catmeme.gif
-a----        04/03/2020    16:04              0 MyImage.png

И, желая скопировать файлы в папку C:\Temp\DestinationDirectory, я получил следующее:

$Source = "C:\temp\YourDirectory"
$Destination = "C:\temp\DestinationDirectory"

$Files = Get-ChildItem -Path $Source -Recurse -File

ForEach($File In $Files)
{
    $Path = $File.Fullname
    $Name = $File.BaseName
    $Ext = $File.Extension

    $NewPath = "$Destination\$Name$Ext"
    $i = 1
    While (Test-Path -Path $NewPath)
    {
        $NewPath = $Destination + "\" + $Name+ "_" + $i.ToString() + $Ext
        $i++
    }

    Copy-Item -Path $Path -Destination $NewPath

    Write-host "Copied file $Path to $NewPath."
}

Это цикл для каждого файла, рекурсивно. Затем он перебирает каждый файл и проверяет, существует ли файл в месте назначения. Если это так, он устанавливает добавление суффикса к имени (_1 для первого дубликата). Он продолжает проверять и увеличивать до тех пор, пока не найдет файл, а затем скопирует указанный файл.

В результате появился каталог, как показано ниже:

PS C:\> Get-ChildItem -Path C:\temp\DestinationDirectory\


    Directory: C:\temp\DestinationDirectory

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        04/03/2020    16:04              0 catmeme.gif
-a----        04/03/2020    16:03              0 MyImage.png
-a----        04/03/2020    16:03              0 MyImage_1.png
-a----        04/03/2020    16:04              0 MyImage_2.png
-a----        04/03/2020    16:03              0 MyPhoto.jpg
-a----        04/03/2020    16:03              0 YourImage.png
-a----        04/03/2020    16:04              0 YourImage_1.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...