Inhalt Verschieben zum sichern auf Externe Medien nach Dateianzahl bzw Medium Groesse mit Logging in Ordner
Die HD ist wiedermal kurz vorm Überlaufen.
allerhöchste Zeit wiedermal die wichtigen Daten wie MP3 aus Downloadshop und gute RSS Feeds wie auch andere wichtige Dokumente auf ein Externes Medium zu sichern.
Platzprobleme auf der HDD - dann ist einfach mal aufräumen ist angesagt.
eigentlich wollte ich mir nur meine AVI Files sichern.
das ist ja noch ganz einfach, weil diese sind fast alle gleich groß und passen zu jeweils 25 Stück bequem auf eine DVD5.
das ganze habe ich dann mit Subroutine gemacht und ohne delayed expansion, da ja in manchen Dateinamen auch Ausrufezeichen sind.
die AVI Dateien werden natürlich erst verschoben, wenn die gewünschte Stückzahl erreicht ist.
dazu wird das ganze noch in eine LOG-Datei geschrieben.
nun wird das Ganze ein wenig komplizierter.
das sichern der MP3 Files. die sind ja alle unterschiedlich Groß. also nix mit Anzahl!
Erläuterung der Funktionsweise der Batch
das Ganze nun mit Berechnung der Größe und bei einzelner (und/oder mehrerer) Überschreitung der Filegröße zur Mediumgröße mit Meldung.
sollten noch weitere Dateien auf das Medium passen - werden die Dateien noch nicht Verschoben, stattdessen kommt eine Abfrage wenn noch weitere Dateien ähnlich der Größe vom Durchschnitt der anderen Dateien auf das Medium passen würden.
Verschieben der Daten in einen (Zähl-)Unterordner mit gleichzeitigem erstellen vom Log.
es war ein bischen kniffliger, da die Forschleife eine Variable beim Übergeben in eine Subroutine als Parameter nicht mit den Prozentzeichen übergibt, sondern dieses einfach entfernt.
also erst die For-Variable in eine Umgebungsvariable einsetzen. Zeile 23
achso und die Zeile 39 kann ich nicht in die Zeile 36 integrieren, da in den MP3 Files auch Klammern enthalten sind.
funktioniert also nur auserhalb, weil ich ja die Gänsefedern "ach-was" -Füsschen nicht brauchen kann.
und das (und) & im Dateinamen soll ja auch richtig im Log-Buch stehen. daher die Umänderung der Variable.
in die Zeile 09 sind entsprechend des Medium den jeweiligen Wert vom Medium hinter dem (istgleich) = aus dem Kopfbereich einzusetzen.
es kann natürlich auch jeder beliebige andere byte-Wert für den Sicherungsordner angenommen und eingesetzt werden.
Die Sicherung funktioniert dewswegen genauso.
in Zeile 11 wird entsprechend der Dateiauswahl gefiltert bzw noch ein Pfad vorangestellt.
[ EDIT]
Hier gibts den Funktionsfähigen Batch
[red| /EDIT]
ja sonst... vllt hat jemand noch eine andere Idee bzw Ergänzung dazu.
vllt für Unterordner und mehrere Dateitypen?
allerhöchste Zeit wiedermal die wichtigen Daten wie MP3 aus Downloadshop und gute RSS Feeds wie auch andere wichtige Dokumente auf ein Externes Medium zu sichern.
Platzprobleme auf der HDD - dann ist einfach mal aufräumen ist angesagt.
eigentlich wollte ich mir nur meine AVI Files sichern.
das ist ja noch ganz einfach, weil diese sind fast alle gleich groß und passen zu jeweils 25 Stück bequem auf eine DVD5.
Sichern nach Stückzahl
:test
set schieb=1 & set /a NR = 0
for /f "delims=" %%i in ('Dir /b *.avi') do call :schieb
if %NR% geq 25 (set /a NR = 0 & set "schieb=" ) else goto :eof
set /a zahl = 1
:anf
if exist OP%zahl%. (set /a zahl + = 1 & goto :anf) else md "OP%zahl%."
for /f "delims=" %%i in ('Dir /b *.avi') do call :schieb "%%i"
echo.>>Brenn-log.txt
goto :test
:schieb
set /a NR + = 1
if defined schieb goto :eof
if %NR% leq 25 (echo OP%zahl% %~1>>Brenn-log.txt) else goto :eof
move %1 "OP%zahl%\%~1"
die AVI Dateien werden natürlich erst verschoben, wenn die gewünschte Stückzahl erreicht ist.
dazu wird das ganze noch in eine LOG-Datei geschrieben.
nun wird das Ganze ein wenig komplizierter.
das sichern der MP3 Files. die sind ja alle unterschiedlich Groß. also nix mit Anzahl!
Erläuterung der Funktionsweise der Batch
das Ganze nun mit Berechnung der Größe und bei einzelner (und/oder mehrerer) Überschreitung der Filegröße zur Mediumgröße mit Meldung.
sollten noch weitere Dateien auf das Medium passen - werden die Dateien noch nicht Verschoben, stattdessen kommt eine Abfrage wenn noch weitere Dateien ähnlich der Größe vom Durchschnitt der anderen Dateien auf das Medium passen würden.
Verschieben der Daten in einen (Zähl-)Unterordner mit gleichzeitigem erstellen vom Log.
es war ein bischen kniffliger, da die Forschleife eine Variable beim Übergeben in eine Subroutine als Parameter nicht mit den Prozentzeichen übergibt, sondern dieses einfach entfernt.
also erst die For-Variable in eine Umgebungsvariable einsetzen. Zeile 23
achso und die Zeile 39 kann ich nicht in die Zeile 36 integrieren, da in den MP3 Files auch Klammern enthalten sind.
funktioniert also nur auserhalb, weil ich ja die Gänsefedern "ach-was" -Füsschen nicht brauchen kann.
und das (und) & im Dateinamen soll ja auch richtig im Log-Buch stehen. daher die Umänderung der Variable.
in die Zeile 09 sind entsprechend des Medium den jeweiligen Wert vom Medium hinter dem (istgleich) = aus dem Kopfbereich einzusetzen.
es kann natürlich auch jeder beliebige andere byte-Wert für den Sicherungsordner angenommen und eingesetzt werden.
Die Sicherung funktioniert dewswegen genauso.
in Zeile 11 wird entsprechend der Dateiauswahl gefiltert bzw noch ein Pfad vorangestellt.
Sichern nach Mediumgröße
[ EDIT]
Hier gibts den Funktionsfähigen Batch
[red| /EDIT]
@echo off
:: Einstellungen fuer die SicherungsDatentraegerGroesse in byte
::X 1GB 1.073.741.824= 1073741824
:: ---------------Speicher-Mediengroessen
::X CD80 700.000.000= 700000000
::X DVD5 4.700.000.000= 4700000000
::X DVD9 8.500.000.000= 8500000000
::
set Medium=700000000
:: ---------------Einstellung (Pfad\)Typ
set typ=*.mp3
:: ---------------
set "filenr=0"
:test
set "back=" & set /a MediumG = 0,SNR = 0,schieb = 1,NR = 1,NRb = 0
for /f "delims=" %%i in ('Dir /b %typ% 2^>nul') do call :zaehl %%~zi
if defined back (if %NR% lss 2 if not %filenr% == 0 (echo Datei %filenr% groesser als Medium!& set /a filenr + = 1 & goto :test ) else set /a filenr + = 1 & goto :test ) else if %NR% gtr 1 (call :posttest ) else if %filenr% gtr 0 (echo %NRb% %typ:~-3%-Dateien fuer Medium zu gross!& pause & goto :eof ) else echo Fertig!& pause & goto :eof
if defined sichern (if /i "%sichern%"=="j" (echo.) else echo Fertig!& goto :eof )
set /a zahl = 1,NRa = 0
:anf
if exist %typ:~-3%-%zahl%. (set /a zahl + = 1 & goto :anf) else md "%typ:~-3%-%zahl%."
echo ---------------%typ:~-3%-%zahl%--------------->>%typ:~-3%-Brenn-log.txt
for /f "delims=" %%i in ('Dir /b %typ%') do (set "logtxt=%%i" & call :schieb )
goto :test
:zaehl
set /a NRb + = 1
if %NRb% lss %filenr% goto :eof
if defined back goto :eof
set /a MediumG + = %1
if %Medium% gtr %MediumG% (set /a NR + = 1 ) else set back=1
goto :eof
:schieb
set /a NRa + = 1
if %NRa% lss %filenr% goto :eof
set /a NR - = 1
if %NR% gtr 0 (call :loggen ) else goto :eof
move "%logtxt%" "%typ:~-3%-%zahl%\%logtxtx%"& goto :eof
:loggen
echo %typ:~-3%-%zahl% %logtxt:&=^&%>>%typ:~-3%-Brenn-log.txt& goto :eof
:posttest
set /a SNR = NR - 1
set /a schnitt = MediumG / SNR
:postzaeh
if not defined back (call :zaehl %schnitt% & goto :postzaeh ) else set /a FNR = NR - SNR - 1
if %FNR% gtr 1 (set "mz=en ") else if %FNR%==0 (set /a NRa - = 1 &set sichern=j& goto :eof ) else set "mz= "
echo Sicherungsende ist erreicht.
echo Es koennte%mz:~ 1% zusaetzlich noch %FNR% Datei%mz%in den Medium-Ordner eingefuegt werden!
echo Trotzdem Verschieben? [J] [N]
set /a NRa - = %FNR% - 1 & set /p sichern=
ja sonst... vllt hat jemand noch eine andere Idee bzw Ergänzung dazu.
vllt für Unterordner und mehrere Dateitypen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121438
Url: https://administrator.de/contentid/121438
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
2 Kommentare
Neuester Kommentar