[英]Powershell script to copy files to folders by matching file to folder names
我有一个包含空文件夹的目录,我们称之为 D1。 另一个目录(我们称之为 D2)包含命名为文件名包含来自 D1 的文件夹名称的文件。 我想将 D2 中的文件名与 D1 中的文件夹名相匹配,并将文件复制(而不是移动)到 D1 中的相应文件夹中。 这可以使用 Powershell 完成吗? 例如,D1 看起来像:
FolderName1
FolderName2
FolderName3
D2 中的文件如下所示:
abcd.FolderName1.txt
xyz.FolderName2.txt
qwerty.FolderName3.txt
编辑:上面的文件夹名称只是一个例子。 实际的文件夹/文件名可能会有所不同,例如Folder#Name
、 My_Folder
、 abcd.1234.Folder_Name
等。
我使用正则表达式从文件名中提取文件夹名称。 那里有一些错误处理,但如果该文件夹不存在,您可能希望改为创建该文件夹。
$FromPath = 'C:\D2'
$ToPath = 'C:\D1'
$FilesToMove = Get-ChildItem -Path $FromPath -File
$RegexPattern = '^[^.]+\.(?<NewFolder>[^.]+)\..+$'
foreach ($File in $FilesToMove) {
If($File.Name -match $RegexPattern){
$OutFolder = Join-Path -Path $ToPath -ChildPath $Matches.NewFolder
if (Test-Path -Path $OutFolder) {
Copy-Item -Path $File -Destination $OutFolder
}
else {
Write-Error -Message "Invalid or Inaccesible path $OutFolder"
}
}
else {
Write-Error -Message "Filename $($File.Name) Is Incorrectly Formatted"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.