批量复制文件到与文件名匹配的新目录

发布于 2025-01-03 05:22:41 字数 283 浏览 0 评论 0原文

我的一个目录中有 250.000 个文件。
这些文件的格式均为

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

...,最大为 1f.jpg,然后数字增加 1

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

...等等。

现在我想将所有以 1 开头的文件复制到名为 1 的新目录中,
所有以 2 开头的文件都放入目录 2 中,依此类推。

有人可以帮忙吗?

I have 250.000 files all in one directory.
The files are all in the format

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

... and goes up to 1f.jpg then the number is incremented by one

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

... and so on.

Now I want to copy all files that start with 1 to a new directory called 1,
all files that start with 2 to directory 2 and so on.

Can anyone help on this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

牵你手 2025-01-10 05:22:41

按第一个字符对所有文件进行分组,然后将每个组复制到目标文件夹:

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

Group all the files by the first character and then copy each group to the destination folder:

Get-ChildItem -Filter *.jpg | Group-Object {$_.Name[0]} | Foreach-Object { $_.Group | Copy-Item -Destination "C:\test\$($_.Name)" }

EDIT: this should perform faster:

Get-ChildItem *.jpg | Copy-Item -Destination { "C:\test\$($_.Name[0])" }
玩心态 2025-01-10 05:22:41

如果一个目录名称 n[af].jpg 中有 250,000 个文件,我预计 n 为1 到 41,667,您希望有 41,667 个目录,每个目录有 6 个 JPG 文件。如果是这种情况,这是我的解决方案,涉及更多一点:

  • 首先,它从文件中删除字母 (af) 和扩展名 .jpg
    项目的全名来获取目标文件夹。
  • 接下来它检查目标文件夹是否存在,如果不存在则为
    创建的。
  • 最后,该项目被复制到目标文件夹。

    Get-ChildItem *.jpg | ForEach-对象 {
     $destination = $_.FullName -replace '[af]\.jpg'
     if (-not (测试路径 -Path $destination -PathType Container)) {
      $null = New-Item -Path $destination -ItemType 目录
     }
     复制项目 -Path $_.FullName -Destination $destination
    }
    

If you have 250,000 files in one directory name n[a-f].jpg, I would expect n goes from 1 to 41,667 and you want to have 41,667 directories each having 6 JPG files. If that is the case, here is my solution, a little more involved:

  • First, it strips the letter (a-f) and the extension .jpg from the
    item's FullName to get the destination folder.
  • Next it checks if the destination folder exists, if it does not it is
    created.
  • Finally, the item is copied to the destination folder.

    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
    }
    
跨年 2025-01-10 05:22:41

尝试:

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

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

try:

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

In this way the destination folders MUST exist!

小嗷兮 2025-01-10 05:22:41

如果您愿意,您可以尝试这个“老式”.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!   
)

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

You may try this "old fashioned" .BAT Batch file if you wish:

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

Copy this Batch file to the directory where the files resides and execute it. It will create the new directories in the same level, but you may easily modify this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文