如何按照数字对应关系将“文件[Integer].jpg”移动到“文件夹[Integer]”?

如何按照数字对应关系将“文件[Integer].jpg”移动到“文件夹[Integer]”?

我将文件存储在以下目录中:

Photo 1.jpg  
Photo 2.jpg  
Photo 3.jpg  

在同一个文件夹中,我有一系列已经存在的子文件夹,其中包含其他文件:

 Group 1  
 Group 2  
 Group 3 

有没有办法将文件移动到名称包含相同数字的子文件夹?

答案1

我现在无法评论,所以我无法询问您使用的是 Windows 还是 Linux,或者您是否安装了 Python,因此,我将为它们两者编写脚本,

首先,PowerShell

# Get all .jpg files in the current directory.
$all_files = Get-ChildItem -Filter *.jpg

# Iterate through the list of files.
foreach ($file in $all_files) {

    # Extract the number from the file name.
    $number = $file.Name.Split(" ")[1].Split(".")[0]

    
    # Print a message to the console.
    Write-Host "Copying $file to Group $number/"


    # Copy the file to the new folder.
    Copy-Item $file "Group $number"
}

然后,Python

import glob
import shutil
import os

# Get All .jpg
all_files = glob.glob("*.jpg")
for file in all_files:

    # Get that Number
    number = file.split(" ")[1].split(".")[0]

    print(f"Copying {file} to Group {number}/")
    
    # if the folder, in case, do not exists, create it
    if not os.path.exists(f"Group {number}"):
        os.mkdir(f"Group {number}")
    
    # copy the file
    shutil.copy2(file, f"Group {number}")

请注意,在 Python 脚本中,我使用的是shutil.copy2()函数,因为它可以保留日期/时间等元数据。此外,我使用的是复制而不是移动,因为要求防止任何不可预见的灾难。之后您可以删除 jpg。

不过,如果你有信心,你可以替换最后一行

shutil.copy2(file, f"Group {number}")

os.rename(file, f"Group {number}/{file}")

并在顶部添加此导​​入

import os

然后,对于 powershell,替换此行

# Copy the file to the new folder.
Copy-Item $file "Group $number"

有了这个,

# Move the file to the new folder.
Move-Item -Path $file -Destination "Group $number"

现在运行这些

为了电源外壳,创建一个文件名copy_script.ps1,注意扩展名,不应该是.txt,而是.ps1。用记事本打开它,并粘贴上面的代码。右键点击脚本并选择使用 Powershell 运行,现在应该已经完成​​了

现在,对于 Python,如果你已经安装了 Python,那么你应该知道如何运行。但如果没有,请从下载并安装最新的 PythonPython 的网站。安装时,请务必检查“添加到路径”。然后创建一个名为 的文件copy_script.py(再次不是.txt而是.py),粘贴上面的 Python 代码,然后双击它即可运行。现在应该完成了。

如果你不知道如何确认是否如此.ps1.py.txt参阅此内容如何在 Windows 中启用文件扩展名

希望这可以帮助

答案2

@echo off

cd /d "D:\Full\Path\To\Folder\Where\JPGs\Are" 2>nul || exit /b

for /f delims^= %%i in ('dir /a: /b /a:-d *.jpg ^| findstr /e [0-9]\.jpg
    ')do set "_dir=%%~ni" && call move /y "%%~i" "%%_dir:photo=group%%"

+

Set-Location "D:\Full\Path\To\Folder\Where\JPGs\Are" 

Get-ChildItem .\*.jpg | ForEach { 
    Move-Item $_ -Destination ($_.BaseName).Replace("Photo","Group")
   }

+

 cd "D:\Full\Path\To\Folder\Where\JPGs\Are" ; dir .\*.jpg | % {Move $_ -Destination ($_.BaseName).Replace("Photo","Group")}

+

PowerShell -Nol -NoP -Ex -By "gci .\*.jpg | ? { Move $_ -Dest ($_.BaseName).Replace('Photo','Group')}"

@cd "D:\Full\Path\To\Folder\Where\JPGs\Are" && @for /f delims^= %i in ('dir /a: /b /a:-d *.jpg ^| findstr /e [0-9]\.jpg')do @(%ComSpec% /v /c "set "_dir=%~ni" && call move /y "%~i" "!_dir:photo=group!"")

观察:考虑使用以下方法测试行为Move-Iten ... -WhatIf

+

cd "D:\Full\Path\To\Folder\Where\JPGs\Are" ; gci .\*.jpg | % { 
    Move $_ -Destination ($_.BaseName).Replace("Photo","Group") -WhatIf
   }

+

cd "D:\Full\Path\To\Folder\Where\JPGs\Are" ; gci .\*.jpg | % {Move $_ -Dest ($_.BaseName).Replace("Photo","Group") -wi }

+

PowerShell -Nol -NoP -Ex -By "gci .\*.jpg | ? { Move $_ -Dest ($_.BaseName).Replace('Photo','Group') -wi}"


我将文件存储在以下目录中:

Photo 1
Photo 2
Photo 3

其中folder I有一系列已经存在的子文件夹,其中包含其他文件:

Group 1
Group 2
Group 3

- 简单地用名称替换变量%var:file=folder%就可以为您提供精确的服务。

>$Folder="Photo 1"
>$Folder
Photo 1

>$Folder=$Folder.Replace("Photo","Group")
>$Folder
Group 1
>set "_var=Photo 1"
>echo\%_var%
Photo 1

>set "_var=%_var:Photo=Group%"
>echo\%_var%
Group 1

其他资源:

参考:


参考:

相关内容