PowerShell Move-Item 无法移动文件
PowerShell Move-Item failing to move files
我正在尝试自动将照片从拖放文件夹移动到托管文件夹,我正在 运行 以下脚本。
问题是,它没有移动任何文件,而且我没有看到任何警告。我启用了 -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
如 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
我正在尝试自动将照片从拖放文件夹移动到托管文件夹,我正在 运行 以下脚本。
问题是,它没有移动任何文件,而且我没有看到任何警告。我启用了 -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
如 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