根据其他文件的存在复制文件 (Windows)
Copy files based on existence of other files (Windows)
我有一个名为 "finalpics" 的 jpg 格式的图像文件夹,还有另一个文件夹 ("sourcepics"),它有几个包含各种格式的 RAW 文件的子文件夹。
我需要一个脚本(批处理文件?),它将所有文件从 "sourcepics" 及其子文件夹复制到另一个文件夹 ("sourcefinal"),前提是该文件存在于 "finalpics" .
举个例子:
"finalpics" 包含名为 mypic1.jpg、mypic2.jpg、mypic3.jpg.
的文件
"sourcepics" 包含名为 mypic1.dng、mypic2.psd、mypic3.cr2、yourpic1.dng、yourpic2.psd、yourpic3.cr2.
的文件
我希望脚本将 'mypic' 文件而不是 'yourpic' 文件复制到 "sourcefinal"。
"finalpics" 中有超过一千个 jpg,但 "sourcepics" 的各个子文件夹中可能有 40,000 个文件。
希望这是有道理的。
感谢观看。
我认为这段 PowerShell 代码可以满足您的需求;如果 FinalPics 中存在同名文件(忽略文件扩展名),它将从 "SourcePics" 复制到 "SourceFinal":
# Define your folder locations:
$SourcePicsFolder = 'C:\SourcePics'
$FinalPicsFolder = 'C:\FinalPics'
$SourceFinalFolder = 'C:\SourceFinal'
# Get existing files into arrays:
$SourcePics = Get-ChildItem -Path $SourcePicsFolder -Recurse
$FinalPics = Get-ChildItem -Path $FinalPicsFolder -Recurse
# Loop all files in the source folder:
foreach($file in $SourcePics)
{
# Using the basename property (which ignores file extension), if the $FinalPics
# array contains a basename equal to the basename of $file, then copy it:
if($FinalPics.BaseName -contains $file.BaseName)
{
Copy-Item -Path $file.FullName -Destination $SourceFinalFolder
}
}
注意:没有基于文件类型的过滤(例如它将复制所有文件)。此外,如果您的 'SourcePics' 文件夹中有两张相同文件名但位于不同子文件夹中的图像,并且 'FinalPics' 中也存在同名文件,那么您在尝试时可能会收到有关文件已存在的错误消息第二次复制。要覆盖,请在 Copy-Item 命令中使用 -Force
参数。
我用 'SourcePics' 中的一些 .dng 文件和 'FinalPics' 中的一些 .jpg 文件测试了上面的代码并且它有效(忽略你的图片文件)。
我有一个名为 "finalpics" 的 jpg 格式的图像文件夹,还有另一个文件夹 ("sourcepics"),它有几个包含各种格式的 RAW 文件的子文件夹。
我需要一个脚本(批处理文件?),它将所有文件从 "sourcepics" 及其子文件夹复制到另一个文件夹 ("sourcefinal"),前提是该文件存在于 "finalpics" .
举个例子:
"finalpics" 包含名为 mypic1.jpg、mypic2.jpg、mypic3.jpg.
的文件"sourcepics" 包含名为 mypic1.dng、mypic2.psd、mypic3.cr2、yourpic1.dng、yourpic2.psd、yourpic3.cr2.
的文件我希望脚本将 'mypic' 文件而不是 'yourpic' 文件复制到 "sourcefinal"。
"finalpics" 中有超过一千个 jpg,但 "sourcepics" 的各个子文件夹中可能有 40,000 个文件。
希望这是有道理的。
感谢观看。
我认为这段 PowerShell 代码可以满足您的需求;如果 FinalPics 中存在同名文件(忽略文件扩展名),它将从 "SourcePics" 复制到 "SourceFinal":
# Define your folder locations:
$SourcePicsFolder = 'C:\SourcePics'
$FinalPicsFolder = 'C:\FinalPics'
$SourceFinalFolder = 'C:\SourceFinal'
# Get existing files into arrays:
$SourcePics = Get-ChildItem -Path $SourcePicsFolder -Recurse
$FinalPics = Get-ChildItem -Path $FinalPicsFolder -Recurse
# Loop all files in the source folder:
foreach($file in $SourcePics)
{
# Using the basename property (which ignores file extension), if the $FinalPics
# array contains a basename equal to the basename of $file, then copy it:
if($FinalPics.BaseName -contains $file.BaseName)
{
Copy-Item -Path $file.FullName -Destination $SourceFinalFolder
}
}
注意:没有基于文件类型的过滤(例如它将复制所有文件)。此外,如果您的 'SourcePics' 文件夹中有两张相同文件名但位于不同子文件夹中的图像,并且 'FinalPics' 中也存在同名文件,那么您在尝试时可能会收到有关文件已存在的错误消息第二次复制。要覆盖,请在 Copy-Item 命令中使用 -Force
参数。
我用 'SourcePics' 中的一些 .dng 文件和 'FinalPics' 中的一些 .jpg 文件测试了上面的代码并且它有效(忽略你的图片文件)。