Bestimme Anzahl an htm Files in Unterordner verschieben.
Ich beabsichtife eine Verschiebung von 63000 htm Files in Unterordner a la 600 Files.
Hallo,
Ich habe ein Problem und möchte dies durch einen Batch lösen. Wäre super, wenn sich jemand Zeit nimmt um mir dort auszuhelfen.
Ich habe um die 63000 .htm Files in dem Ordner "C:\MyHTMLHelp\Project\addin_a\Source" und möchte nun alle Dateien in Unterordner aufteilen. Jeder ordner sollte 600 .htm Files beinhalten. Bis auf den letzten, da ist es logisch, dass es nicht genau 600 sein können. Ist aber kein Problem.
Also:
600 htm Files in den Ordner "C:\MyHTMLHelp\Project\addin_a\Source\Ordner1"
600 htm Files in den Ordner "C:\MyHTMLHelp\Project\addin_a\Source\Ordner2"
...
usw.
Es muss aber beachtet werden, dass die Unterordner noch nicht existieren. Also muss ein neuer Ordner quasi in dem Verzeichnis "C:\MyHTMLHelp\Project\addin_a\Source" angelegt werden und dort dann die 600 Files eingeschoben werden.
Wäre super, wenn sich da jemand kurz zeit nehmen könnte. Bis jetzt hab ich es nur geschafft alle Dateien in einen Ordner zu schieben. Das mit der abzählung das nach 600 schluss ist, hab ich nicht hinbekommen. Auch das erstellen eines neuen Ordners ist mir noch nicht so ganz klar.
Also vielleicht hat ja jemand die Zeit und bastelt so einen kleinen Batch kurz und kann mir noch erklären, was er pro Code zeile genau macht, denn einfach nur die .bat ausführen hat ja nun auch keinen großen Lerneffekt.
Ich hab mir diesen Thread schon durchgelsen aber kann mangels fehlender Erfahrung im Bereich Batch keine Schlüsse draus ziehen.
Anzahl bestimmter Dateien per Batch verschieben
Mit freundlichen Grüßen
Lukas Patz
Hallo,
Ich habe ein Problem und möchte dies durch einen Batch lösen. Wäre super, wenn sich jemand Zeit nimmt um mir dort auszuhelfen.
Ich habe um die 63000 .htm Files in dem Ordner "C:\MyHTMLHelp\Project\addin_a\Source" und möchte nun alle Dateien in Unterordner aufteilen. Jeder ordner sollte 600 .htm Files beinhalten. Bis auf den letzten, da ist es logisch, dass es nicht genau 600 sein können. Ist aber kein Problem.
Also:
600 htm Files in den Ordner "C:\MyHTMLHelp\Project\addin_a\Source\Ordner1"
600 htm Files in den Ordner "C:\MyHTMLHelp\Project\addin_a\Source\Ordner2"
...
usw.
Es muss aber beachtet werden, dass die Unterordner noch nicht existieren. Also muss ein neuer Ordner quasi in dem Verzeichnis "C:\MyHTMLHelp\Project\addin_a\Source" angelegt werden und dort dann die 600 Files eingeschoben werden.
Wäre super, wenn sich da jemand kurz zeit nehmen könnte. Bis jetzt hab ich es nur geschafft alle Dateien in einen Ordner zu schieben. Das mit der abzählung das nach 600 schluss ist, hab ich nicht hinbekommen. Auch das erstellen eines neuen Ordners ist mir noch nicht so ganz klar.
Also vielleicht hat ja jemand die Zeit und bastelt so einen kleinen Batch kurz und kann mir noch erklären, was er pro Code zeile genau macht, denn einfach nur die .bat ausführen hat ja nun auch keinen großen Lerneffekt.
Ich hab mir diesen Thread schon durchgelsen aber kann mangels fehlender Erfahrung im Bereich Batch keine Schlüsse draus ziehen.
Anzahl bestimmter Dateien per Batch verschieben
Mit freundlichen Grüßen
Lukas Patz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 171997
Url: https://administrator.de/forum/bestimme-anzahl-an-htm-files-in-unterordner-verschieben-171997.html
Ausgedruckt am: 23.12.2024 um 19:12 Uhr
6 Kommentare
Neuester Kommentar
moin Lukas,
magst Du etwas fertiges oder etwas zum selbst Probieren
Begrenzte Anzahl von Dateien verschieben
hier kannst Du noch etwas anpassen?
Bei Fragen einfach diese stellen.
Gruß Phil
magst Du etwas fertiges oder etwas zum selbst Probieren
Begrenzte Anzahl von Dateien verschieben
hier kannst Du noch etwas anpassen?
Bei Fragen einfach diese stellen.
Gruß Phil
Aloha,
abgesehen davon, dass bei
Und weil ich heute meinen faulen Tag habe gibt's auch überlasse ich die weitere Abarbeitung meinen Batch-Kollegen
greetz André
edit @bastla, soso Da hätte ich zumindest eine Suchaktion starten müssen aber die Faulheit heute *lächz - so warm*
abgesehen davon, dass bei
set "Dorthin=C:\..."
das Dorthin
bei dir verloren ging sollte die Wortgruppe Dateien-Blockweise-verschieben doch nahe legen, dass der Grundcode an sich auch nur das macht, alles von A nach B und nichts mit C, D etc. (geht auch aus dem alten Thread hervor).move
bewegt nur, erstellt aber nichts, dass heißt:- Entweder du legst bereits weitere Ordner an und änderst das pro Durchgang in der Batch
- Man lässt per Batch (von vornherein am Besten) die Verzeichnisse anlegen (mit Nummerierung und nur sofern notwendig und der vorangehende bereits existiert und per counter) und lässt ihn solange durchjagen, bis nichts mehr zum Verschieben vorhanden ist
Und weil ich heute meinen faulen Tag habe gibt's auch überlasse ich die weitere Abarbeitung meinen Batch-Kollegen
greetz André
edit @bastla, soso Da hätte ich zumindest eine Suchaktion starten müssen aber die Faulheit heute *lächz - so warm*
@skye
Faul? Kann ich auch: Batch um Dateien nach Anzahl in Ordner abzulegen
Grüße
bastla
[Edit] @skye
[/Edit]
Faul? Kann ich auch: Batch um Dateien nach Anzahl in Ordner abzulegen
Grüße
bastla
[Edit] @skye
Da hätte ich zumindest eine Suchaktion starten müssen
Das ist der Vorteil, wenn man(n) dabei war ... [/Edit]
Hallo GnozoNAV,
teste mal folgendes:
Im Kopf der
Die daraus resultierenden Ausgabezeilen werden von der
In der Schleife wird geprüft, ob die Zeilennummer kleiner oder gleich 600 ist. Wenn ja wird geprüft ob sie gleich 1 ist. Wenn ja, wird ein neues Verzeichnis angelegt. Dazu wird die Zählervariable
Wenn die geforderte Anzahl Dateien verschoben wurde (wegen Zeile 8 also 600 Stück), stimmt die Bedingung in Zeile 17 nicht mehr und alle restlichen Dateien werden überlesen.
Nach dem Ende der
Diesmal ist die Dateiliste, die von
Das wird solange wiederholt, bis
Gruß
Friemler
teste mal folgendes:
@echo off
setlocal
set "SrcDir=C:\MyHTMLHelp\Project\addin_a\Source"
set "FileType=htm"
set "nFiles=600"
set /a "Cntr=1"
:Loop
set "FilesAvailable="
for /f "tokens=1* delims=:" %%a in ('dir /b /a:-d /o:n "%SrcDir%\*.%FileType%" 2^>NUL ^| findstr /n "^"') do (
if %%a leq %nFiles% (
if %%a equ 1 (
md "%SrcDir%\Ordner%Cntr%"
)
move "%SrcDir%\%%b" "%SrcDir%\Ordner%Cntr%\%%b"
set "FilesAvailable=1"
)
)
set /a "Cntr+=1"
if defined FilesAvailable goto :Loop
Im Kopf der
FOR
-Schleife ließt der DIR
-Befehl alle HTM-Dateien im Quellverzeichnis ein. Seine (wegen /o:n
alphabetisch sortierte) Ausgabe (wegen 2^>NUL
aber nicht die Fehlermeldungen) wird über eine Pipe an FINDSTR
weitergereicht, was wegen dem Parameter "^"
(steht für Zeilenanfang) alle Zeilen findet und wegen /n
Nummern vor alle Zeilen schreibt.Die daraus resultierenden Ausgabezeilen werden von der
FOR
-Schleife in Tokens zerlegt (siehe mein Tutorial zur FOR-Schleife). Das erste Token ist wegen delims=:
die Zeilennummer (enthalten in der Laufvariablen %%a
), das zweite Token ist wegen dem Stern in tokens=1*
der Rest der Zeile, also der Dateiname (enthalten in der automatisch erzeugten Laufvariablen %%b
).In der Schleife wird geprüft, ob die Zeilennummer kleiner oder gleich 600 ist. Wenn ja wird geprüft ob sie gleich 1 ist. Wenn ja, wird ein neues Verzeichnis angelegt. Dazu wird die Zählervariable
Cntr
benutzt. Danach wird die gerade aktuelle Datei in das neu erstellte Verzeichnis verschoben und die Variable FilesAvailable
auf 1 gesetzt.Wenn die geforderte Anzahl Dateien verschoben wurde (wegen Zeile 8 also 600 Stück), stimmt die Bedingung in Zeile 17 nicht mehr und alle restlichen Dateien werden überlesen.
Nach dem Ende der
FOR
-Schleife wird in Zeile 28 geprüft, ob die Variable FilesAvailable
existiert. Das ist nur der Fall, wenn zuvor die FOR
-Schleife durchlaufen wurde, da die Variable in Zeile 14 gelöscht wird. Falls die Variable existiert, wird zum Label :Loop
gesprungen und der Ablauf beginnt von neuem.Diesmal ist die Dateiliste, die von
DIR
geliefert wird, um 600 Dateien kürzer.Das wird solange wiederholt, bis
DIR
(wegen Zeile 7) keine HTM-Dateien mehr findet, dann wird die FOR
-Schleife nicht durchlaufen und FilesAvailable
existiert in Zeile 28 nicht, was zum Beenden des Scripts führt.Gruß
Friemler