Mover archivos a carpetas separadas

Mover archivos a carpetas separadas

Tengo una carpeta en la que creo varias capturas de pantalla por día ' [projectname].[date].[time].png'

Entonces se ve así:

ProjectAlpha.2020-11-10.09-53-21.png
ProjectAlpha.2021-05-20.15-10-43.png
ProjectBeta.2020-11-10.09-53-28.png
ProjectBeta.2021-05-20.15-11-24.png
ProjectBeta.2021-07-27.11-34-42.png
ProjectDelta.2021-05-20.15-19-01.png
ProjectDelta.2021-05-20.15-09-42.png
ProjectDelta.2021-07-27.11-35-03.png

Quiero que la parte antes del primer 'punto' sea el nombre de la carpeta y luego mover todo a su carpeta correspondiente.

Entonces el resultado se verá así:

├── ProjectAlpha
│   ├── ProjectAlpha.2020-11-10.09-53-21.png
│   └── ProjectAlpha.2021-05-20.15-10-43.png
└── ProjectBeta
│   ├── ProjectBeta.2020-11-10.09-53-28.png
│   ├── ProjectBeta.2021-05-20.15-11-24.png
│   └── ProjectBeta.2021-07-27.11-34-42.png
└── ProjectDelta
    ├── ProjectDelta.2021-05-20.15-19-01.png
    └── ProjectDelta.2021-05-20.15-09-42.png

Encontré algo similar eneste powershellpublicar yeste CMDpublicar, pero no puedo hacer que funcione para mi situación.

¿Hay alguien que pueda ayudarme con esto por favor?

Respuesta1

Algo así, pega este código en el bloc de notas y guárdalo con el nombre que quieras pero con extensión *.bat. Luego arrastre y suelte la carpeta donde están los proyectos (imágenes) en el archivo por lotes...

@echo off

:: Please drag and drop the folder where the projects are to this batch script

if exist "%~1" (if not exist "%~1\" exit) else (exit)

set "Folder=%~1"
Set Files=*.jpg *.png *.gif *.webp

pushd "%Folder%"

for /f "delims=" %%a in ('dir /b /a-d /on %Files%') do for /f "delims=." %%b in ("%%~a") do (
                                                                                             if not exist "%%b" md "%%b"
                                                                                             move "%%a" "%%b"
                                                                                            )
exit

ingrese la descripción de la imagen aquí

Respuesta2

Con Powershell, intente lo siguiente:

$mypath = Get-Location
$files = Get-ChildItem

$files | Where { $_ -match "project[a-z]+"} | 
ForEach { 
            if ( !( Test-Path -Path $Matches[0] )) { 
                    New-Item -Path   $Matches[0] -ItemType Directory 
                }

            $files = $Matches[0] + "*.*"
            Move-Item -Path $files -Destination $Matches[0] 
    }

información relacionada