我创建了ps脚本,只复制文件夹结构中的文件 - 递归
cp $source.Text -Recurse -Container:$false -destination $destination.Text
$dirs = gci $destination.Text -directory -recurse | Where { (gci $_.fullName).count -eq 0 } | select -expandproperty FullName
$dirs | Foreach-Object { Remove-Item $_ }
工作正常。但问题是我有相同名称的文件。它不是复制重复的文件。我需要重命名文件是否已存在
源:
folderA--> xxx.txt,yyy.txt,
folderB-->xxx.txt,yyy.txt,zzz.txt,
folderc-->xxx.txt
目的地(要求)
xxx.txt
xxx1.txt
xxx2.txt
yyy.txt
yyy1.txt
zzz.txt
答案 0 :(得分:0)
这是一个解决方案,我使用Group-Object cmdlet按文件名对所有项目进行分组。然后我遍历每个组,如果该组包含多个文件,我将_$i
附加到$i
,其中$source = $source.Text
$destination = $destination.Text
Get-ChildItem $source -File -Recurse | Group-Object Name | ForEach-Object {
if ($_.Count -gt 1) { # rename duplicated files
$_.Group | ForEach-Object -Begin {$i = 1} -Process {
$newFileName = $_.Name -replace '(.*)\.(.*)', "`$1_$i.`$2"
$i++
Copy-Item -Path $_.FullName -Destination (Join-Path $destination $newFileName)
}
}
else # the filename is unique, just copy it.
{
$_.Group | Copy-Item -Destination $destination
}
}
从1开始并递增:
-File
注意:
如果PowerShell版本不支持,您可以将-Container:$false
更改为 A B C
User UserID Area
。另请注意,脚本不会查看目标文件夹是否已存在具有相同名称的文件。