zip1928
Goto Top

Per Move 1000 Dateien ins 1. die nächsten 1K ins nächste Verzeichnis usw.

Hallo Experten,

wir haben hier z.Zt. 75000 Dateien die möchte ich in 75 Verzeichnisse verschieben. Es soll keine Sortierung o.a. geben

es sollen die Verzeichnisse 01000 02000 03000 04000 ... 10000 11000 usw erstellt werden und dort dann jeweils

maximal 1000 Dateien rein. ich hoffe ihr habt eine Lösung.

Vielen Dank für eure Hilfe.

Content-Key: 67893

Url: https://administrator.de/contentid/67893

Printed on: April 28, 2024 at 12:04 o'clock

Member: Biber
Biber Sep 05, 2007 at 05:12:28 (UTC)
Goto Top
Moin zip1928,

willkommen im Forum.
Ist das der ganze Plan oder nur der Teil, den wir wissen müssen?
Hört sich für mich nicht wirklich nach einer zukunftsweisenden Strategie an.

Möchtest Du eventuell darüber reden?

Falls Du Dich auf das rein Handwerkliche beschränken möchtest:
  • Sicherheitsabfrage: Die 1000er-Pakete weder nach Alphabet noch nach Dateidatum sortiert?!?
  • sind Leerzeichen/Sonderzeichen in den Dateinamen oder sind die noch in DOS-8.3-Notation?

Bitte nicht eingeschnappt sein - handwerklich ist es nicht sonderlich anspruchsvoll.
Aber als Problemlösung erscheint mir das Konzept eher suboptimal.

Grüße
Biber
Member: zip1928
zip1928 Sep 05, 2007 at 07:27:40 (UTC)
Goto Top
Hallo Biber,

die Dateien sind von 3 Überwachungskameras und haben das Format z.b. 20070905-10.11.54_P1.jpg zu erst kommt das Datum dann die Uhrzeit danach P1
für Parkplatz 1 dann ist das noch anstelle "P1" "P2" und "eingangshalle" da ich das
ganze nur zum Archivieren auf Platte brauche habe ich schon 3 Verzeichnisse
erstellt und per Move *P1.* ins passende Verzeichniss verschoben nur haben wir jetzt in jedem dieser Verzeichnisse so ca. 20-30 Tausend Fotos diese zu laden dauert unserem
Chef zulange nun wollte ich das Automatisch verschieben.

Ich hoffe das das Verständlich ist face-smile

Grüße
Zacharias
Member: bastla
bastla Sep 06, 2007 at 19:18:32 (UTC)
Goto Top
Hallo zip1928!

Versuch es einmal so:
@echo off & setlocal
cd /d D:\Daten\P1

set /a Nr=100000
set /a Anzahl=1000
set /a Z=%Anzahl%

for %%i in (*.jpg) do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set /a Z+=1
if %Z% leq %Anzahl% goto :MoveIt
set /a Z=1
set /a Nr+=%Anzahl%
set Verz=%Nr:~1%
md %Verz%
echo %Verz%
:MoveIt
move %1 %Verz%
Das Verzeichnis in der zweiten Zeile musst Du natürlich Deinen Gegebenheiten anpassen.

Falls Du übrigens vielleicht doch lieber eine chronologische Reihung hättest, könntest Du die "for"-Zeile so schreiben:
for /f "delims=" %%i in ('dir /b /od *.jpg') do call :ProcessFile "%%i"  

Und, nur zur Sicherheit: Verwende für Deine Tests bitte Kopien und nicht die Originaldaten! face-wink

Grüße
bastla
Member: Biber
Biber Sep 06, 2007 at 19:34:28 (UTC)
Goto Top
Fußnote für ängstliche Gemüter zu bastlas Lösung:

Wenn wir tatsächlich von ca 75000 Dateinamen mit je ~20+ Zeichen reden, dann könnte es der CMD.exe ein bisschen Stress machen, diese als "virtuelles File" im Hauptspeicher zu halten.
Wir wissen doch alle, dass es unter Windows laufen soll...

Deshalb eventuell statt dieser Variante:
for /f "delims=" %%i in ('dir /b /od *.jpg') do call :ProcessFile "%%i"  
das übervorsichtige Zwischenspeichern in einer temporären, aber real vorhandenen Datei:
dir /b /od *.jpg>%temp%\AllFiles.lst
for /f "delims=" %%i in (%temp%\AllFiles.lst) do call :ProcessFile "%%i"  
del %temp%\AllFiles.lst

BTW, wäre es nicht - wenn diese Bildchen eh schon sortiert, archiviert und nach menschlichem Ermessen nie wieder vorgekramt werden, eine Abspeicherung nach Monatsordnern sinnvoller?
2007-08_P1
2007-08_P2
2007_08_eingangshalle
2007-09_P1
2007-09_P2
2007_09_eingangshalle
Die Informationen aufgrund der Dateinamen wären ja da...?

Grüße
Biber
Member: zip1928
zip1928 Sep 06, 2007 at 19:40:46 (UTC)
Goto Top
Hallo Leute,

danke euch es hat alles bestens hingehauen !!!

Läuft zwar immer noch da das ganze über ein NW muß aber es sieht gut aus !


Danke nochmals

Zacharias
Member: bastla
bastla Sep 06, 2007 at 19:53:11 (UTC)
Goto Top
@Biber

... Abspeicherung nach Monatsordnern sinnvoller?
Ich hatte mich ja nach dem nahezu kategorischen "Es soll keine Sortierung o.a. geben" eigentlich kaum getraut, eine zeitliche Ordnung vorzuschlagen, und jetzt sowas.

Das wäre ja ein fast schon unentschuldbarer Verstoß gegen das Prinzip "Wundertüte", und außerdem würdest Du damit dem (fast originalen) Forrest Gump-Zitat: "Ein Verzeichnis (mit 1000 jpg-Files) ist wie eine Schachtel Pralinen - man weiß nie, was man bekommt" doch glatt die Grundlage entziehen ... face-wink

Grüße
bastla
Member: bastla
bastla Sep 06, 2007 at 19:57:34 (UTC)
Goto Top
Hallo zip1928!

Freut mich, wenn's geklappt haben wird. face-smile

Grüße
bastla
Member: Biber
Biber Sep 06, 2007 at 20:06:51 (UTC)
Goto Top
@bastla
Ich hatte mich ja nach dem nahezu kategorischen "Es soll keine Sortierung o.a. geben" eigentlich kaum getraut, eine zeitliche Ordnung vorzuschlagen, und jetzt sowas.
Na ja, warte erst mal ab, wenn er morgen früh stolz das Ergebnis mit je 1000 Dateien in so sprechenden Verzeichnisnamen wie "01000", "02000", "03000" sieht...
Dann kommt bestimmt die Nachfrage: Wäre das denn ein großer Aufwand, das in Monatsordner wegzukruuschen?"

Aber das warten wir erstmal ab...

Schönen Abend
Biber
Member: bastla
bastla Sep 06, 2007 at 20:20:34 (UTC)
Goto Top
@Biber

Wir wissen ja ohnehin beide, dass Du Recht hast, aber wie hieß es bei Frank Zander (in der "Disco Polka"): Der Wirt will es so.

Bevor mir noch mehr solcher weltbewegender Zitate einfallen, hör ich lieber auf. face-wink

Dir auch einen schönen Abend
bastla
Member: bastla
bastla Sep 06, 2007 at 20:41:20 (UTC)
Goto Top
... aber da ich manchmal im Abwarten so schlecht bin:
@echo off & setlocal
cd /d D:\Daten\P1

for %%i in (*.jpg) do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
for /f "tokens=1,2 delims=_" %%d in ('echo %~n1') do set Zeitraum=%%d & set Bereich=%%e  
set Verz=%Zeitraum:~0,4%-%Zeitraum:~4,2%_%Bereich%
if not exist %Verz% md %Verz%
move %1 %Verz%

Grüße
bastla