将文件从一个位置移动到另一个位置并排除子文件夹

时间:2018-10-05 10:48:24

标签: powershell

我想将文件从一个位置移动到另一位置,但又不想从我要移动文件的目录的子文件夹中移动任何文件。

我有以下代码,但这将文件移动到子文件夹中。此外,扩展名只能是.xml和.pdf。

此脚本将所有文件从$MoveThese移到目标位置,即使是子文件夹中的文件,例如C:\Test\Folder1\Subfolder。任何建议都会有所帮助。

$MoveThese = "C:\Test\Folder1", "C:\Test2\Folder2", "C:\Test3\Folder3"
$Destination = "C:\Test\Docs", "C:\Test2\Docs", "C:\Test3\Docs"

For($i=0; $i -lt $FailFolders.Length; $i++){
Get-ChildItem -Path $MoveThese[$i] -Recurse -Include "*.xml", "*.pdf" | Move-Item -Destination $Destination[$i] 
}

2 个答案:

答案 0 :(得分:2)

如果您不想将文件放在子文件夹中,请不要使用-Recurse。根据{{​​3}},此“获取指定位置以及该位置的所有子项中的项。”


缺少-Include语句的这一部分:

  

-Include参数仅在命令中包含-   -递归参数

解决方案:

Get-ChildItem  $MoveThese[$i] -File |
    Where-Object {$_.Extension -in @(".xml",".pdf")} |
    Move-Item -Destination $Destination[$i]

答案 1 :(得分:0)

不幸的是,如果没有-Recurse开关,include将无法工作,除非该路径使用C:\Windows*中的通配符

这可能为您做到了:

$MoveThese = "C:\Test\Folder1", "C:\Test2\Folder2", "C:\Test3\Folder3"
$Destination = "C:\Test\Docs", "C:\Test2\Docs", "C:\Test3\Docs"

For($i=0; $i -lt $MoveThese.Length; $i++){
  Get-ChildItem  $MoveThese[$i] -File | 
    Where-Object { $_.Name -like "*.xml" -or $_.Name -like "*.pdf" | 
    Move-Item -Destination $Destination[$i] -Force
}