Per Autostart unter XP - Zufallsdateien (jpg-Bilder aus verschiedenen Unterordnern) von Laufwerk C nach D kopieren
Hallo Forumsleute
Hoff' mal das ich für diese Frage hier im richtigen Forumsbereich gelandet bin ;)
Ich suche ein Programm, natürlich möglichst Freeware :D das in den 'Autostart-Ordner' unter XP kommt...
...möchte per Zufall Dateien (jpg-Bilder aus verschiedenen Unterordnern) von Laufwerk C nach D kopieren. Wobei das Laufwerk D eine Ramdisk ist und ich die Dateien auf eine bestimmte Anzahl oder Megabytemenge begrenzen möchte.
Gibt es da ein Tool/Utility mit dem sich das bewerkstelligen lässt? Ich habe geGOOGLEd aber leider nichts brauchbares gefunden
FreundlichFragenderGruss
von der Leertaste
Hoff' mal das ich für diese Frage hier im richtigen Forumsbereich gelandet bin ;)
Ich suche ein Programm, natürlich möglichst Freeware :D das in den 'Autostart-Ordner' unter XP kommt...
...möchte per Zufall Dateien (jpg-Bilder aus verschiedenen Unterordnern) von Laufwerk C nach D kopieren. Wobei das Laufwerk D eine Ramdisk ist und ich die Dateien auf eine bestimmte Anzahl oder Megabytemenge begrenzen möchte.
Gibt es da ein Tool/Utility mit dem sich das bewerkstelligen lässt? Ich habe geGOOGLEd aber leider nichts brauchbares gefunden
FreundlichFragenderGruss
von der Leertaste
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 70718
Url: https://administrator.de/contentid/70718
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo leertaste!
Wenn es auch ein Batch sein dürfte, könntest Du es so versuchen:
Im dargestellten Beispiel werden jpg-Bilder aus dem Ordner "C:\Bilder" nach "D:\" kopiert - bitte bei den Pfadangaben keinen "\" an das Ende setzen (daher nur "D:").
Anmerkung: Für das Kopieren gilt eine Speicherplatz-Obergrenze (im Beispiel 5.000.000 Bytes), aber keine -Untergrenze.
Das bedeutet: Es werden solange Bilder kopiert, bis mit dem nächsten zu kopierenden Bild die Grenze (in Bytes angegeben) überschritten würde - Beispiel: Wenn bereits Bilder mit einer Gesamtgröße von 4.620.000 Bytes kopiert wurden, wird ein weiteres Bild mit 500.000 Bytes nicht mehr kopiert, während ein solches mit 300.000 Bytes noch unter die Grenze passt und daher noch kopiert würde. Damit wird sicher gestellt, dass die angegebene Kapazität keinesfalls überschritten wird. Dennoch sollte noch eine Reserve eingeplant werden, da der tatsächliche Platzbedarf einer Datei höher ist als ihre exakte Größe in Bytes.
Bitte auch zu beachten: Wenn die Grenze zu hoch angesetzt wird (also die Größe aller Bilder zusammen den Grenzwert nicht überschreitet), läuft der Batch in eine Endlosschleife.
Grüße
bastla
Wenn es auch ein Batch sein dürfte, könntest Du es so versuchen:
@echo off & setlocal
set "Quelle=C:\Bilder"
set "Typ=*.jpg"
set "Ziel=D:"
set /a Grenze=5000000
set /a Bytes=0
set Done=
for /f %%i in ('dir "%Quelle%\%Typ%"^|findstr "Datei(en)"') do set /a Anzahl=%%i
:Loop
set /a Nr=%random%*%Anzahl%/32768+1
for /f "tokens=1* delims=:" %%i in ('dir /b "%Quelle%\%Typ%"^|findstr /n .^|findstr /b "%Nr%"') do call :ProcessFile "%Quelle%\%%j"
if not defined Done goto :Loop
goto :eof
:ProcessFile
if exist "%Ziel%\%~nx1" goto :eof
set /a Bytes+=%~z1
if %Bytes% lss %Grenze% (
copy %1 "%Ziel%" >nul
) else (
set Done=True
)
Anmerkung: Für das Kopieren gilt eine Speicherplatz-Obergrenze (im Beispiel 5.000.000 Bytes), aber keine -Untergrenze.
Das bedeutet: Es werden solange Bilder kopiert, bis mit dem nächsten zu kopierenden Bild die Grenze (in Bytes angegeben) überschritten würde - Beispiel: Wenn bereits Bilder mit einer Gesamtgröße von 4.620.000 Bytes kopiert wurden, wird ein weiteres Bild mit 500.000 Bytes nicht mehr kopiert, während ein solches mit 300.000 Bytes noch unter die Grenze passt und daher noch kopiert würde. Damit wird sicher gestellt, dass die angegebene Kapazität keinesfalls überschritten wird. Dennoch sollte noch eine Reserve eingeplant werden, da der tatsächliche Platzbedarf einer Datei höher ist als ihre exakte Größe in Bytes.
Bitte auch zu beachten: Wenn die Grenze zu hoch angesetzt wird (also die Größe aller Bilder zusammen den Grenzwert nicht überschreitet), läuft der Batch in eine Endlosschleife.
Grüße
bastla
Hallo leertaste!
Die folgende Version sollte höchstens 20 Bilder (auch aus Unterordnern) kopieren:
Anmerkung: Da auch "Fehlversuche" (wenn das Bild bereits in einem früheren Durchlauf kopiert wurde) mitgezählt werden, wird zumeist die angegebene Maximalanzahl nicht erreicht werden - daher also vielleicht etwas höher ansetzen (oder zB gleich auf 200, um tatsächlich nur der Gefahr einer Endlosschleife vorzubeugen).
Grüße
bastla
[Edit] Zweite "for"-Zeile gekürzt. [/Edit]
Aber ich hätte auch gerne (diverse) UnterOrdner mit einbezogen
Da hatte ich einfach drübergelesen ... laufe nur 10x, 20x oder wie oft auch immer(?) durch und beende dich dann selbst...
Eine solche Festlegung würde darauf hinauslaufen, dass (je nachdem, was früher eintritt), bei max 10, 20 oder "wieviel auch immer" Bildern oder beim Erreichen der Speichergrenze Schluss ist.Die folgende Version sollte höchstens 20 Bilder (auch aus Unterordnern) kopieren:
@echo off & setlocal
set "Quelle=C:\Bilder"
set "Typ=*.jpg"
set "Ziel=D:"
set /a Grenze=5000000
set /a Max=20
set /a Bytes=0
set Done=
for /f %%i in ('dir /s "%Quelle%\%Typ%"^|findstr "Datei(en)"') do set /a Anzahl=%%i
:Loop
set /a Nr=%random%*%Anzahl%/32768+1
for /f "tokens=1* delims=" %%i in ('dir /s /b "%Quelle%\%Typ%"^|find /v /n "::"^|find "[%Nr%]"') do call :ProcessFile "%%j"
if %Max% lss 1 goto :eof
if not defined Done goto :Loop
goto :eof
:ProcessFile
set /a Max-=1
if exist "%Ziel%\%~nx1" goto :eof
set /a Bytes+=%~z1
if %Bytes% lss %Grenze% (
copy %1 "%Ziel%" >nul
) else (
set Done=True
)
Anmerkung: Da auch "Fehlversuche" (wenn das Bild bereits in einem früheren Durchlauf kopiert wurde) mitgezählt werden, wird zumeist die angegebene Maximalanzahl nicht erreicht werden - daher also vielleicht etwas höher ansetzen (oder zB gleich auf 200, um tatsächlich nur der Gefahr einer Endlosschleife vorzubeugen).
Grüße
bastla
[Edit] Zweite "for"-Zeile gekürzt. [/Edit]
... und um den Ablauf vielleicht ein wenig zu beschleunigen, noch eine Variante mit Verwendung einer Temporärdatei für die Bilderliste:
Grüße
bastla
@echo off & setlocal
set "Quelle=C:\Bilder"
set "Typ=*.jpg"
set "Ziel=D:"
set /a Grenze=5000000
set /a Max=20
set "Liste=%Temp%\Bilderliste.txt"
set /a Bytes=0
set Done=
for /f %%i in ('dir /s "%Quelle%\%Typ%"^|findstr "Datei(en)"') do set /a Anzahl=%%i
dir /s /b "%Quelle%\%Typ%"|find /v /n "::">"%Liste%"
:Loop
set /a Nr=%random%*%Anzahl%/32768+1
for /f "tokens=1* delims=" %%i in ('find "[%Nr%]"^<"%Liste%"') do call :ProcessFile "%%j"
if %Max% lss 1 goto :eof
if not defined Done goto :Loop
goto :eof
:ProcessFile
set /a Max-=1
if exist "%Ziel%\%~nx1" goto :eof
set /a Bytes+=%~z1
if %Bytes% lss %Grenze% (
copy %1 "%Ziel%" >nul
) else (
set Done=True
)
Grüße
bastla