Powershell,Mass移动某种类型的文件

时间:2011-08-22 17:50:10

标签: file powershell recursion

我想创建一个脚本,该脚本将占用一个父目录,该目录中包含许多包含文件的子目录。使用列表我希望将子目录中的所有文件移动到父目录中。

到目前为止,我创建了以下代码,它列出了子目录中指定类型的所有文件,但我不确定如何大规模移动所有子文件。

    Write-host "Please enter source Dir:"
$sourceDir = read-host

Write-Host "Format to look for with .  :"
$format = read-host

#Write-host "Please enter output Dir:"
#$outDir = read-host

$Dir = get-childitem -Path $sourceDir -Filter $format -recurse | format-table name

$files = $Dir | where {$_.extension -eq "$format"} 
$files #| format-table name

3 个答案:

答案 0 :(得分:8)

一些事情:

  1. 您可以将您写入屏幕的文本直接传递给读取主机cmdlet,它可以为每个用户输入节省一行。

  2. 根据经验,如果您打算使用命令输出执行更多操作,请不要将其传递给format- * cmdlet。 cmdlet格式生成格式化对象,指示powershell如何在屏幕上显示结果。

  3. 尽量避免将结果分配给变量,如果结果包含大量文件系统,则内存消耗可能会非常高,并且可能会降低性能。

  4. 同样,在性能方面,尝试使用cmdlet参数而不是where-object cmdlet(服务器端过滤与客户端)。第一个过滤目标上的对象,而后者仅在到达您的机器后过滤对象。

  5. WhatIf开关将显示哪些文件已移动。删除它以执行命令。您可能还需要对其进行处理以处理重复的文件名。

    $sourceDir = read-host "Please enter source Dir"
    $format = read-host "Format to look for"
    
    Get-ChildItem -Path $sourceDir -Filter $format -Recurse | Move-Item -Destination $sourceDir -Whatif
    

答案 1 :(得分:1)

如果我正确理解了您的问题,您可以在文件上使用Move-Item将它们移动到输出目录:

$Dir = get-childitem $sourceDir -recurse
$files = $Dir | where {$_.extension -eq "$format"}
$files | move-item -destination $outDir

答案 2 :(得分:0)

之前的一张海报指出该脚本会覆盖同名文件。可以通过测试扩展脚本并避免这种可能性。像这样:

$sourceDir = read-host "Please enter source Dir"
$format = read-host "Format to look for?"
$destDir = read-host "Please enter Destination Dir"

Get-ChildItem -Path $sourceDir -Filter $format -Recurse | Copy-Item   -Destination $DestDir 
$files = $DestDir | where {$_.extension -eq "$format"} 

If (Test-Path $files) {
    $i = 0
    While (Test-Path $DestinationFile) {
        $i += 1
        $DestinationFile = "$files$i.$format"
        Copy-Item -Destination $DestDir  $DestinationFile
    }
} 
Else {
    $DestinationFile = "$files$i.$format"
    Copy-Item -Destination $DestDir $DestinationFile
}
Copy-Item -Path $SourceFile -Destination $DestinationFile -Force