我正在寻找像我发现的那样的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
谢谢和问候!
答案 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
}