我在一个目录中有250.000个文件 这些文件都采用
格式1a.jpg
1b.jpg
1c.jpg
...然后上升到1f.jpg然后数字增加一个
2a.jpg
2a.jpg
2c.jpg
......等等。
现在我想将所有以1开头的文件复制到名为1的新目录中 所有以2开头的文件到目录2,依此类推。
有人可以为此提供帮助吗?
答案 0 :(得分:3)
按第一个字符对所有文件进行分组,然后将每个组复制到目标文件夹:
Get-ChildItem -Filter *.jpg | Group-Object {$_.Name[0]} | Foreach-Object { $_.Group | Copy-Item -Destination "C:\test\$($_.Name)" }
编辑:这应该更快地执行:
Get-ChildItem *.jpg | Copy-Item -Destination { "C:\test\$($_.Name[0])" }
答案 1 :(得分:3)
如果您在一个目录名 n [af] .jpg中有250,000个文件,我希望 n 从1到41,667,你想拥有41,667个目录,每个目录有6个JPG文件。如果是这种情况,这是我的解决方案,更多涉及:
最后,该项目被复制到目标文件夹。
Get-ChildItem *.jpg | ForEach-Object {
$destination = $_.FullName -replace '[a-f]\.jpg'
if (-not (Test-Path -Path $destination -PathType Container)) {
$null = New-Item -Path $destination -ItemType directory
}
Copy-Item -Path $_.FullName -Destination $destination
}
答案 2 :(得分:1)
尝试:
dir -filter *.jpg | % { Copy-Item -PATH $_ -DESTINATION .\$($_.BaseName.ToCharArray()[0]) }
通过这种方式,目标文件夹必须存在!
答案 3 :(得分:0)
你可以试试这个"老式的" .BAT批处理文件,如果你愿意:
@echo off
setlocal EnableDelayedExpansion
for %%f in (*.jpg) do (
set dir=%%~Nf
set dir=!dir:~0,-1!
if not exist !dir! md !dir!
copy %%f !dir!
)
将此批处理文件复制到文件所在的目录并执行它。它将在同一级别创建新目录,但您可以轻松修改它。