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

Cra*_*ley 4 powershell recursion file

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

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

    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
Run Code Online (Sandbox Code Playgroud)

Sha*_*evy 8

一些东西:

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

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

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

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

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
Run Code Online (Sandbox Code Playgroud)