
Estoy ejecutando Windows 10.
Me gustaría copiar muchos archivos de una carpeta a otra y probablemente necesite un script o cualquier otra solución que pueda hacerlo.
Tengo 2 carpetas: la carpeta A
contiene archivos llamados así:
00010_name0_1680x1050.jpg
00020_name11_1680x1050.jpg
00021_name222_1680x1050.jpg
00022_name300_1680x1050.jpg
mientras que la carpeta de destino B
tiene archivos con nombres así:
00010_name0_1920x1200.jpg
00020_name11_1920x1200.jpg
00021_name222_1920x1200.jpg
00030_name500_1920x1200.jpg
Entonces los nombres de archivos son los mismos excepto que difieren en la última parte, sobre la resolución.
Me gustaría copiar todos los archivos de A
a B
, pero solo aquellos que tienen una primera parte del nombre diferente, hasta la última _
que separa la resolución.
Entonces, tal vez necesite un script de expresiones regulares que pueda comparar nombres y decidir si copiarlos o no. Se agradecerá cualquier tipo de solución sencilla.
Respuesta1
Puede utilizar este tipo de script de 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
La explicación de las funciones está en los comentarios.