Batch-Skript zum Verschieben von Dateien aus übergeordneten Ordnern in Unterordner in einer angegebenen Menge

Batch-Skript zum Verschieben von Dateien aus übergeordneten Ordnern in Unterordner in einer angegebenen Menge

Ich brauche ein Batchdateiskript, um alle Dateien aus einem einzigen übergeordneten Ordner in so viele Unterordner wie nötig zu verschieben, solange jeder Unterordner die maximale Anzahl von Dateien erhält, die in der Batchdatei oder in der Befehlszeile angegeben ist. Mit anderen Worten, das Skript muss alle Dateien aus dem übergeordneten Ordner in mehrere Unterordner darunter verteilen (die das Skript automatisch erstellen muss) und die Dateien in viele verschiebenXDateien (wobei "X" ist die Anzahl der Dateien, die jeder Unterordner erhält).

Zusätzliche Anforderungen:

  1. Unterordnernamen müssen gemäß der folgenden Nomenklatur erstellt werden: 001, 002, 003 usw.

  2. Muss Dateien mit allen Arten von Dateinamen unterstützen (mit Leerzeichen, Sonderzeichen oder nicht-englischer Akzentuierung usw.).

  3. Muss das Verschieben von Zehntausenden Dateien unterstützen.

  4. Muss unter Windows 10 Professional mit lokalen Administratorrechten funktionieren.

Angenommen, der Ordner „D:\Downloads“ enthält 2400 Dateien und Sie möchten diese in Unterordnern mit jeweils bis zu 1000 Dateien verteilen. Nach dem Ausführen des Skripts wird die folgende Struktur erstellt:

D:\Downloads
       |__001
       |__002
       |__003

Wo:

D:\Downloads --> Will have no files inside it anymore
       |__001 --> Will have 1000 files inside it
       |__002 --> Will have 1000 files inside it
       |__003 --> Will have the last 400 files inside it

Die Reihenfolge der Dateien (welche Datei in welchen Unterordner kommt) ist nicht wichtig, d. h. beim Verschieben müssen keine bestimmten Kriterien (wie Dateiname, Größe, Dateityp usw.) berücksichtigt werden. Verbesserungen in dieser Hinsicht sind jedoch willkommen (z. B. die Option, die zuletzt erstellten Dateien zuerst in die ersten Unterordner zu verschieben).

Irgendwelche Ideen?


AKTUALISIEREN

Hier ist die Lösung, die bei mir funktioniert hat:

@echo off
setlocal enableextensions
setlocal enabledelayedexpansion

if not %3.==. goto syntax
if %2.==. goto syntax
:: Checks if %2 is a number:
SET "var="&for /f "delims=0123456789" %%i in ("%2") do set var=%%i
if defined var (goto syntax) 
if /i %1.==. goto syntax
if /i not exist %1 echo. & echo  The folder %1 does not exist... && echo  Folder paths must be typed between "quotes" if there's any empty space. && echo. && goto end

setlocal enableextensions
setlocal enabledelayedexpansion
:: Maximum amount of files per subfolder:
SET limit=%2
:: Initial counter (everytime counter is 1, a new subfolder is created):
SET n=1
:: Subfolder counter:
SET nf=0
::Retrieves the amount of files in the specified folder:
set count=0
for %%A in (%1%\*.*) do set /a count+=1
echo.
echo  Distributing %count% files in subfolders of up to %2 files...
FOR %%f IN (%1%\*.*) DO (
  :: If counter is 1, create a new subfolder with name starting with "00...":
  IF !n!==1 (
    SET /A nf+=1
    MD %1%\00!nf!
  )
  :: Move files into subfolders with names starting with "00...":
  MOVE /-Y "%%f" %1%\00!nf! > NUL
  :: Reset counter when a subfolder reaches the maximum file limit:
  IF !n!==!limit! (
    SET n=1
  ) ELSE (
    SET /A n+=1
  )
)
SET limit=
SET n=
SET nf=
SET count=
echo  Move finished successfully.
goto end

:syntax
echo.
echo  YOU TYPED: movedown %*
echo  SYNTAX: movedown ["full path"] (between quotes if there's any space) [n] (maximum number of files per subfolder)
echo.
:end
ENDLOCAL

verwandte Informationen