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,但只複製那些名稱第一部分不同的文件,直到最後_一個分隔解析度的文件。

所以也許我需要一個正規表示式腳本來比較名稱並決定是否要複製它們。任何類型的簡單解決方案都將受到讚賞。

答案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

功能說明見註。

相關內容