
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:
Unterordnernamen müssen gemäß der folgenden Nomenklatur erstellt werden: 001, 002, 003 usw.
Muss Dateien mit allen Arten von Dateinamen unterstützen (mit Leerzeichen, Sonderzeichen oder nicht-englischer Akzentuierung usw.).
Muss das Verschieben von Zehntausenden Dateien unterstützen.
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