Verschieben eine große Anzahl von Dateien in einem Verzeichnis auf mehrere Verzeichnisse

StackOverflow https://stackoverflow.com/questions/2541887

  •  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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top