PowerShell Move-Item无法移动文件

时间:2016-06-25 19:03:33

标签: powershell get-childitem

我尝试自动将照片从drop文件夹移动到托管文件夹,并且我正在运行以下脚本。

问题是,它没有移动任何文件,而且我没有看到任何警告。我启用了-force选项,但它仍然没有移动任何内容。 Powershell设置为允许远程执行。

# Preq: Copy all files to $ImportPath`n

$ImportPath = "D:\Photo_Imports"
$JPGDest = "D:\Photos\ALL_PHOTOS\JPG"
$RAWDest = "D:\Photos\ALL_PHOTOS\RAW"
$MOVDest = "D:\Photos\ALL_PHOTOS\Movies"

Write-Host "About to run the script, hold on!" `n
Write-Host "File summary"
Get-Childitem $ImportPath -Recurse | where { -not $_.PSIsContainer } | group Extension -NoElement | sort count -desc 

# If $Path exists, get a list of all children (files/folders) and move each one to the $Dest folders
if(Test-Path $ImportPath)
{
    try
    {
        Get-ChildItem -Path $ImportPath -Include *.JPG -Verbose | Move-Item -Destination $JPGDest -Force
        Get-ChildItem -Path $ImportPath -Include *.CR2 -Verbose | Move-Item -Destination $RAWDest -Force
        Get-ChildItem -Path $ImportPath -Include *.MOV -Verbose | Move-Item -Destination $MOVDest -Force
    }
    catch
    {
        "Something broke, try manually"
    }
}
Write-Host `n
Write-Host " FINISHED ! " `n

1 个答案:

答案 0 :(得分:0)

如上所述in the documentation -Include 参数仅在指定了 -Recurse 时才有效。

所以你需要添加 -Recurse 参数,如下所示:

Get-ChildItem -Path $ImportPath -Include *.JPG -Recurse -Verbose | Move-Item -Destination $JPGDest -Force
Get-ChildItem -Path $ImportPath -Include *.CR2 -Recurse -Verbose | Move-Item -Destination $RAWDest -Force
Get-ChildItem -Path $ImportPath -Include *.MOV -Recurse -Verbose | Move-Item -Destination $MOVDest -Force

或者,如果您不想进行递归文件搜索,请不要使用 -Recurse 并将 -Include 替换为 - 过滤,如下:

Get-ChildItem -Path $ImportPath -Filter "*.JPG" -Verbose | Move-Item -Destination $JPGDest -Force
Get-ChildItem -Path $ImportPath -Filter "*.CR2" -Verbose | Move-Item -Destination $RAWDest -Force
Get-ChildItem -Path $ImportPath -Filter "*.MOV" -Verbose | Move-Item -Destination $MOVDest -Force

对于非递归搜索,您也可以这样做:

Get-ChildItem -Path $ImportPath\*.JPG -Verbose
Get-ChildItem -Path $ImportPath\*.CR2 -Verbose
Get-ChildItem -Path $ImportPath\*.MOV -Verbose