Windows 10 — скрипт с регулярным выражением для сравнения частичных имен файлов и копирования тех, которые не существуют

Windows 10 — скрипт с регулярным выражением для сравнения частичных имен файлов и копирования тех, которые не существуют

Я использую Windows 10.

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

У меня есть 2 папки: папка Aсодержит файлы с такими названиями:

00010_name0_1680x1050.jpg
00020_name11_1680x1050.jpg
00021_name222_1680x1050.jpg
00022_name300_1680x1050.jpg

в то время как в папке назначения Bнаходятся файлы с такими именами:

00010_name0_1920x1200.jpg
00020_name11_1920x1200.jpg
00021_name222_1920x1200.jpg
00030_name500_1920x1200.jpg

Итак, имена файлов одинаковы, за исключением последней части, касающейся разрешения.

Я хотел бы скопировать все файлы из Aв B, но только те, у которых отличается первая часть имени, до последнего, _который разделяет разрешение.

Так что, возможно, мне нужен скрипт regex, который мог бы сравнивать имена и решать, копировать их или нет. Любое простое решение будет оценено по достоинству.

решение1

Вы можете использовать такой скрипт PowerShell:

# Save directory paths to vars
$dirA = C:\Some\Folder\A
$dirB = C:\Some\Folder\B

# Get file names of each found .jpg (with 1920x1200 in name)
$fileNamesB = (Get-ChildItem -Path $dirB -Filter *_1920x1200.jpg).Name

# Get prefixes of names that shouldn't be copied, by removing the resolution postfix
# % is shorthand for ForEach-Object 
$prefixesB = $fileNamesB | % { $_ -replace "_1920x1200\.jpg$", '' }

$filesA = Get-ChildItem -Path $dirA -Filter *_1680x1050.jpg
# Filter files by checking their name property against our prefixes
# ? is shorthand for Where-Object
$filteredFilesA = $filesA | ? { ($_.Name -replace "_1680x1050\.jpg$", '') -NotIn $prefixesB } 

# Copy the filtered files to folder B
$filteredFilesA | Copy-Item -Destination $dirB

Пояснения функций в комментариях.

Связанный контент