Verschieben eine große Anzahl von Dateien in einem Verzeichnis auf mehrere Verzeichnisse
-
23-09-2019 - |
Frage
Ich suche eine Windows-Batch-Skript erstellen sie etwa 2.000 Dateien und Spalten so zu bewegen, dass es 10 Dateien pro Ordner. Ich habe eine Batch-Skript versuchter zu schaffen, sondern die Syntax schreckt wirklich Sinn. Hier ist, was ich habe, so weit
@echo off
:: Config parameters
set /a groupsize = 10
:: initial counter, everytime counter is 1, we create new folder
set /a n = 1
:: folder counter
set /a nf = 1
for %%f in (*.txt) do (
:: if counter is 1, create new folder
if %n% == 1 (
md folder%nf%
set /a n += 1
)
:: move file into folder
mv -Y %%f folder%nf%\%%f
:: reset counter if larger than group size
if %n% == %groupsize% (
set /a n = 1
) else (
set /a n += 1
)
)
pause
Im Grunde, was das Skript tut, ist eine Schleife durch jede TXT-Datei im Verzeichnis. Es erstellt ein neues Verzeichnis am Anfang und bewegt sich 10 Dateien in diesem Verzeichnis, dann wieder ein neuer Ordner erstellt und bewegt sich weitere 10 Dateien in diesem Verzeichnis, und so weiter. Aber ich habe Probleme, wo die n
Variable nicht in der Schleife erhöht werden? Ich bin sicher, dass es andere Fehler zu, da die CMD-Fenster auf mir schließen sogar mit pause
. Jede Hilfe oder Anleitung wird geschätzt, vielen Dank für Ihre Zeit!
Lösung
Ein paar Dinge, die Sie wissen müssen:
-
SETLOCAL ENABLEDELAYEDEXPANSION
ist erforderlich, da Sie Variablen und mit ihren geänderten Werte in einem einzigen geklammerten Block ändern.SET /?
auf der Kommandozeile wird einige Informationen geben. Suche im Internet für diesen Begriff und Sie werden eine bessere Erklärung finden. - Die Orte, die ich verwende, um das
!nf!
Format für Variablen auf verzögerte Expansion im Zusammenhang. - Wie ghostdog74 erwähnt, waren Sie nicht
%nf%
erhöht wird. - I initialisiert
nf
auf 0 statt 1. Auf diese Weise wird die Ordnernummer Sie möchten Dateien bewegen, ist die gleiche wie die Ordnernummer, die Sie gerade erstellt haben. In Ihrem Code erstellen Sie FolderX, dann Schritt X, und dann versuchen, die Datei zu X + 1 zu bewegen. - Sie haben
MOVE
zu verwenden, um eine Datei zu verschieben,MV
nicht gültig ist.
Diese Batchdatei funktioniert ... aber stellen Sie sicher, dass Sie Test! Ich habe nur auf eine kleine Menge von Dateien getestet.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: Config parameters
SET groupsize=10
:: initial counter, everytime counter is 1, we create new folder
SET n=1
:: folder counter
SET nf=0
FOR %%f IN (*.txt) DO (
:: if counter is 1, create new folder
IF !n!==1 (
SET /A nf+=1
MD folder!nf!
)
:: move file into folder
MOVE /Y "%%f" folder!nf!
:: reset counter if larger than group size
IF !n!==!groupsize! (
SET n=1
) ELSE (
SET /A n+=1
)
)
ENDLOCAL
PAUSE
Andere Tipps
Sie sind %nf%
nicht erhöht wird.