【发布时间】:2017-12-03 15:09:08
【问题描述】:
我正在寻找我找到的类似这样的 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
}
但不同的是,组对象应该从文件夹 A 中获取固定数量的 5 个文件,创建一个以第一个文件命名的新文件夹,并将 5 个文件移动到新文件夹中。请参见下面的示例图片(文件名不同)。 我是 powershell 的血腥初学者,所以如果可能的话,请保持建议简单;)
enter image description here
enter image description here
谢谢和问候!
【问题讨论】:
-
@Paul:
Group-Object按文件名中(第一个)_之前的共享文件名前缀对输入文件进行分组。然后ForEach-Object对每个生成的组进行操作,创建一个以共享前缀命名的目录,并将组中的所有文件移动到该新目录。 -
@nosediver:您是否只想从每个组中获取前 5 个文件?如果您想跨组进行分区,则不清楚您正在寻找什么逻辑。请通过直接更新您的问题来澄清。
-
将分组更改为除以 5 的计数器并四舍五入到最接近的整数
$n = 0; Get-ChildItem -File | Group-Object -Property {$script:n++; [math]::Ceiling($n/5)} | ForEach-Object { your code here }可能会这样做 -
@TessellatingHeckler:谢谢。它接缝它有点工作。结果:脚本列出了正确的文件,但命名错误,它仅以数字 5 开头,(下一个组 6 等)没有字母。 New-Item 有一些错误:+ $dir = New-Item -Type Directory -Name $_.Name + CategoryInfo : ResourceExists: ("path") [New- Item], IOException + FullyQualifiedErrorId : DirectoryExist,Microsoft .PowerShell.Commands.NewItemCommand 导致第一个错误,Move-Item 无法工作。
-
对不起,错过了第一个,组的编号从 1 开始,而不是像我写的那样从 5 开始!
标签: powershell