2012-02-08 82 views
0

我在一个目录中有250.000个文件。
这些文件都在格式将文件批量复制到与文件名匹配的新目录

1a.jpg 
1b.jpg 
1c.jpg 

...并上升到1f.jpg那么这个数是由一个

2a.jpg 
2a.jpg 
2c.jpg 

增加...等等。

现在我想将所有以1开头的文件复制到一个名为1的新目录中,
以2开头的所有文件到目录2等等。

任何人都可以帮忙吗?

回答

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! 
) 

复制此批处理文件所在的目录文件驻留并执行它。它将创建同一级别的新目录,但您可以轻松修改此目录。

+0

这与我想要的完全一样!非常感谢 – user1197199 2012-02-09 09:27:18

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])" } 
+0

它不起作用。是我的文件应该在哪里的C:\测试? – user1197199 2012-02-08 14:46:12

+0

c:\ test是所有目标文件夹应存在的位置。 – 2012-02-08 14:54:33

1

尝试:

dir -filter *.jpg | % { Copy-Item -PATH $_ -DESTINATION .\$($_.BaseName.ToCharArray()[0]) } 

这样,目标文件夹必须存在!

+0

我创建了一些目录1,2和3,但运行命令时没有任何反应 – user1197199 2012-02-08 14:47:34

+0

执行命令时是否在源文件夹中? – 2012-02-08 14:56:04

3

如果你有一个目录名ň [A-F] .JPG 250000页的文件,我希望ň去从1至41,667你想有41,667目录数6个JPG文件。如果是这样的话,这里是我的解决方案,一个涉及多一点:

  • 首先,去掉字母(A-F)和扩展从 项目的全名的.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 
    } 
    
相关问题