Powershell - 获取一定数量的文件并将其移动到新文件夹

时间:2017-06-29 19:13:04

标签: powershell

我正在寻找像我发现的那样的PowerShell脚本:

Get-ChildItem -File |  # Get files
  Group-Object { $_.Name -replace '_.*' } |  # Group by part before first underscore
  ForEach-Object {
    # Create directory
    $dir = New-Item -Type Directory -Name $_.Name
    # Move files there
    $_.Group | Move-Item -Destination $dir
  }

但不同之处在于,group-object应该从文件夹A中获取5个文件的修复量,创建一个由第一个文件命名的新文件夹,然后移动新文件夹中的5个文件。请参见下面的示例图片(文件名不同)。 我是powershell的血腥生物,所以如果可能请保持简单的建议;)

enter image description here
enter image description here

谢谢和问候!

3 个答案:

答案 0 :(得分:0)

谢谢@TessellatingHeckler,它运作良好。

$n = 0; Get-ChildItem -File | Group-Object -Property {$script:n++; [math]::Ceiling($n/5)} | 
ForEach-Object {                               
    $dir = New-Item -Type Directory -Name $_.Name   # Create directory
    $_.Group | Move-Item -Destination $dir          # Move files there
}

对于重命名部分我正在使用来自@Dennis van Gils(How to rename a folder the same as the filename of the first file inside that folder using Windows batch programming?)的批次 我确信有一种方法可以与powershell部分一起使用,但这个解决方案对我有用。

答案 1 :(得分:0)

  

您好。如果要创建由第一个文件命名的新文件夹,也可以尝试此操作:

ForEach-Object { 
$dname = $_.group.name    
$fname=$dname.replace(".","")    
$fl = $fname[0]
    $dir = New-Item -Type Directory -Name $fl                      

    $_.Group | Move-Item -Destination $dir 

答案 2 :(得分:0)

谢谢@Vitaly!解决方案效果很好。
这是完整的脚本:

$n = 0; Get-ChildItem -File | Group-Object -Property {$script:n++; [math]::Ceiling($n/5)} | 
ForEach-Object { 
$dname = $_.group.name    
$fname=$dname 
$fl = $fname[0].Split(".")[0]
    $dir = New-Item -Type Directory -Name $fl                      

    $_.Group | Move-Item -Destination $dir     
}