我想找到其中的所有 .jpg 文件D:\ZZZ_Phone_test
及其子目录,然后使用 Robocopy 将它们复制到其中D:\ZZZ_Phone_test\1\1\BackUp\
(需要排除,因为它在源内)
如果可能的话,我更愿意使用 Robocopy,而不是编写更复杂的脚本。我计划使用 Robocopy 日志记录和其他选项。如果 Robocopy 不适用,请提供解释和您想到的任何内容的来源。
这不起作用:
Get-ChildItem -recurse D:\ZZZ_Phone_test -Exclude D:\ZZZ_Phone_test\1\1\BackUp -filter *.jpg | ForEach-Object {
robocopy "D:\ZZZ_Phone_test\$_" "D:\ZZZ_Phone_test\1\1\BackUp\$_" /z /s /v
}
答案1
不太熟悉Robocopy,但看看帮助,我认为这对你有用:
$Source = 'D:\ZZZ_Phone_test'
$Backup = 'D:\ZZZ_Phone_test\1\1\BackUp'
Get-ChildItem $Source -Directory -Recurse | ? FullName -ne $Backup | ForEach{
robocopy $_.FullName $Backup *.jpg /z /v
}
因为Get-ChildItem
返回的是文件夹集合,所以我删除了/s
参数。
如果只有一个文件夹Backup
,并且您希望以代码而不是变量的形式使用路径,则应该这样做:
Get-ChildItem D:\ZZZ_Phone_test -Directory -Recurse | ? Name -ne 'Backup' | ForEach{
robocopy $_.FullName D:\ZZZ_Phone_test\1\1\BackUp *.jpg /z /v
}
使用电源外壳别名,可以缩写为:
gci D:\ZZZ_Phone_test -ad -r | ? Name -ne 'Backup' | %{
robocopy $_.FullName D:\ZZZ_Phone_test\1\1\BackUp *.jpg /z /v
}
答案2
尝试这个:
Get-ChildItem "D:\ZZZ_Phone_Test" -Exclude "D:\ZZZ_Phone_test\1\1\BackUp" |
Get-ChildItem -Recurse -Filter *.jpg |
Foreach {
robocopy $_.fullName "D:\ZZZ_Phone_test\1\1\BackUp" /z /b
}
不需要 /z 开关,因为不需要复制子目录。