Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Datei die nur Daten ab bestimmter Grösse kopiert.

Frage Entwicklung Batch & Shell

Mitglied: bastler2000

bastler2000 (Level 1) - Jetzt verbinden

01.02.2011, aktualisiert 15:57 Uhr, 7254 Aufrufe, 14 Kommentare

Hallo an alle Forumnutzer.
Ich komme mal direkt zur Sache.
Habe Probleme bei meiner Batch Datei ( bin noch Anfänger). Es soll später unter windows 7 laufen.

Also, die Batch Datei kopiert *.doc und *.txt Dateien in einen Backupordner, das klappt auch alles ganz gut.
Jedoch bräuchte ich einen Filter der nur Dateien ab einer bestimmten Dateigrösse kopiert,
z.B: ab 100kb kopiert der und kleinere lässt der liegen.
hoffe meine Beschreibung ist verständlich bin ja noch nicht so im Thema, wobei nach der Googelei müsste schon was hängen geblieben sein ;).
Hier mein Code:
@echo off
xcopy "C:\*.txt" %~d0\backup_a /s/c/q/r/h
xcopy "D:\*.doc" %~d0\backup_b /s/c/q/r/h
@cls
@ExIT

habe nach div. Suche folgende Ansätze gefunden. kann jedoch leider keine Verbindung aufbauen, ging meistens ums löschen von temp Dateien.
anbei die Ansätze:

1.)

@echo off & setlocal
set "List=D:\Log.txt"
set "Size=80000"
if exist "%List%" del "%List%"
for %%i in (*.jpg) do if %%~zi geq %Size% echo %%i>>"%List%"

2.)
if ($filename = 'clicks.txt'){
echo $filename . ': ' . filesize($filename) . '0';
copy("sicherungclicks.txt","clicks.txt");
}
?>

Wenn Jemand einen Tip hat wäre das total toll.
Danke
MfG
Mitglied: bastla
01.02.2011 um 16:02 Uhr
Hallo bastler2000 und willkommen im Forum!

Die Version 1 müsstest Du (ungetestet) etwa so abwandeln:
01.
@echo off & setlocal 
02.
set "Size=80000" 
03.
 
04.
for /f "delims=" %%i in ('dir /s /b D:\*.txt') do if %%~zi geq %Size% xcopy "%%i" "%~d0\backup_a%%~pnxi*" /cqrh 
05.
for /f "delims=" %%i in ('dir /s /b D:\*.doc') do if %%~zi geq %Size% xcopy "%%i" "%~d0\backup_b%%~pnxi*" /cqrh
[Edit2] Als Ergänzung (und immer noch ungetestet ): Soferne nur relative Pfade "mitgenommen" werden sollen, etwa so:
01.
@echo off & setlocal 
02.
set "Basis=D:\Test" 
03.
set "Size=80000" 
04.
 
05.
for /f "delims=" %%i in ('dir /s /b "%Basis%\*.txt"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_a" 
06.
for /f "delims=" %%i in ('dir /s /b "%Basis%\*.doc"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_b" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set "Quellpfad=%~f1" 
11.
call set "RelPfad=%%Quellpfad:%Basis%=%% 
12.
xcopy %1 "%~2%RelPfad%*" /cqrh 
13.
goto :eof
[/Edit2]

Grüße
bastla

[Edit] Hatte übersehen, dass in unterschiedliche Zielordner kopiert und wohl auch der Pfad übernommen werden soll [/Edit]
Bitte warten ..
Mitglied: Snowman25
01.02.2011 um 17:19 Uhr
Hallo bastler2000,

Kennst du Robocopy?
Ab Vista ist es standardmäßig installiert. Bei Robocopy gibt es einen Switch namens /MIN:n. Dieser schließt von einem Kopiervorgang alles aus, was kleiner als deine angegebene Größe ist!

Zitat von robocopy
/MIN:n :: Minimale Dateigröße - schließt Dateien aus, die kleiner als n Bytes sind.

Gruß
Snow
Bitte warten ..
Mitglied: bastler2000
01.02.2011 um 17:43 Uhr
Vielen Dank für die schnelle Antwort. Werde das heute abend mal testen. melde mich dann obs geklappt hat.
Bitte warten ..
Mitglied: bastla
01.02.2011 um 21:31 Uhr
[OT] @snow
Spielverderber ...

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: bastler2000
02.02.2011 um 16:00 Uhr
Hi wieder da .
@ bastla
habe den code etwas abgewandelt verwendet, jedoch habe ich leider festellen müssen, dass das Kopieren damit sehr viel länger dauert und er trotzdem alles kopiert.
Zum Testen habe ich 2 Ordner erstellt und der soll von A-B kopieren mit dem besagten Filter. ( um die Methode zu verstehen).
Hast du evtl Lust für dieses Beispiel einen Einfachen Beispielcode zu schreiben.

Hatte nun mit einer \Exclude *.txt gearbeitet, ist nur nicht so optimal. Würde mich interessiern wie das Andere klappt ;)


@ snowman
habe leider noch PC´s mit Winxp im Haushalt
Bitte warten ..
Mitglied: bastla
02.02.2011 um 17:00 Uhr
Hallo bastler2000!

Leider kann ich Dir nicht so ganz folgen ...

Der einfache Beispielcode für das Kopieren von *.txt-Dateien und *.doc-Dateien mit einer Größe von mindestens 80.000 Bytes steht oben, und damit werden auch nicht alle, sondern nur die entsprechenden Dateien kopiert. Wenn Du das für die Ordner A und B benötigst, solltest Du (im zweiten Ansatz) die Zeilen 2 sowie 5 und 6 anpassen ...

Das das Kopieren bei Überprüfung jeder einzelnen Dateigröße durch einen Batch vergleichsweise langsam ist, kannst Du nur durch Verwendung eines effizienteren Werkzeuges ändern - zB, indem Du Dir "robocopy" besorgst (gibt's auch für XP und als Download bei Microsoft) ...

Grüße
bastla
Bitte warten ..
Mitglied: bastler2000
03.02.2011 um 23:03 Uhr
Hi vielen Dank für die Mühe und den super Code, habe diesen zuvor falsch angepasst, dadurch ist der sehr langsam geworden und hat nicht richtig gefiltert.
Habe den fehler gefunden und siehe da: das Filtern klappt vorzüglich.
Der Code wurde dann von mir geändert damit er aus 2 verschiedenen Ordnern die Daten sucht, anhand der Grösse filtert und dann in einem gemeinsamen Ordner kopiert.
Leider klappt das mit dem Filtern nur für Ordner a, bei Ordner b kopiert der einfach alles. Ich weiss nicht sorecht wo der Fehler ist.
Anbei der Code:

@echo off & setlocal

set "Basis_a=C:\Users\Meister\Desktop\a"
set "Basis_b=C:\Users\Meister\Desktop\b"
set "Size=80000"

for /f "delims=" %%i in ('dir /s /b "%Basis_a%\*.doc"') do if %%~zi geq %Size% call :ProcessFile_a "%%i" "%~d0\backup_ab"
for /f "delims=" %%i in ('dir /s /b "%Basis_b%\*.txt"') do if %%~zi geq %Size% call :ProcessFile_b "%%i" "%~d0\backup_ab"

goto :eof

:ProcessFile_a
set "Quellpfad=%~f1"
call set "RelPfad=%%Quellpfad:%Basis_a%=%%

xcopy %1 "%~2%RelPfad%*" /cqrh
goto :eof

:ProcessFile_b
set "Quellpfad=%~f1"
call set "RelPfad=%%Quellpfad:%Basis_b%=%%

xcopy %1 "%~2%RelPfad%*" /cqrh
goto :eof
Bitte warten ..
Mitglied: bastla
03.02.2011 um 23:38 Uhr
Hallo bastler2000!

Abgesehen davon, dass in meinem Ansatz oben noch ein Anführungszeichen gefehlt hat, sollte es bei praktischen identischen Codeteilen "alles oder nix" heißen - mit der folgenden Variante dann hoffentlich "alles" :
01.
@echo off & setlocal 
02.
 
03.
set "Basis_a=C:\Users\Meister\Desktop\a" 
04.
set "Basis_b=C:\Users\Meister\Desktop\b" 
05.
set "Size=80000" 
06.
 
07.
for /f "delims=" %%i in ('dir /s /b "%Basis_a%\*.doc"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_ab" "%Basis_a%" 
08.
for /f "delims=" %%i in ('dir /s /b "%Basis_b%\*.txt"') do if %%~zi geq %Size% call :ProcessFile "%%i" "%~d0\backup_ab" "%Basis_b%" 
09.
 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
set "Quellpfad=%~f1" 
14.
call set "RelPfad=%%Quellpfad:%~3=%%" 
15.
 
16.
xcopy %1 "%~2%RelPfad%*" /cqrh >nul 
17.
goto :eof
Da die Ermittlung des relativen Pfades und das Kopieren ja nach dem selben Schema erfolgen, sollte ein Unterprogramm (dem die erforderlichen Parameter - als %1 bis %3 - übergeben werden) eigentlich genügen ...

Grüße
bastla

P.S.: Code als Code formatiert zu posten ist übrigens gar nicht schwer ...
Bitte warten ..
Mitglied: bastler2000
04.02.2011 um 00:12 Uhr
Hallo Danke für die schnelle Antwort.
habe den Code getestet. Jedoch wird nur der Inhalt des Ordners a gefiltert der Inhalt des Ordner b wird komplett kopiert.
Habe mir in Ordner a und b verschieden grosse Dateien gelegt um die Funktion zu testen.
Habe mich schon gefragt wie alle den Code so schön formatiert ins Forum stellen können.
grüsse
Bitte warten ..
Mitglied: bastla
04.02.2011 um 00:18 Uhr
Hallo bastler2000!

Sorry - ich habe den Code vor dem Posten getestet und er macht bei mir, was er soll ...

Grüße
bastla
Bitte warten ..
Mitglied: bastler2000
04.02.2011 um 00:35 Uhr
Hi ,
Ich fühle mich wie auf wolke 7. Sitze schon fast den halben Tag daran und jetzt geht es: tja Dicker kopf und ne menge byte, bit, kilobit, kilobyte..... hatte den Filterwert zu niedrig gewählt und die Dateien im Ordner b zu hoch ;).
01.
Vielen Vielen Dank bastla 
02.
Jetzt kann ich endlich schlafen gehen.
Bitte warten ..
Mitglied: bastler2000
04.02.2011 um 01:34 Uhr
Tja immernoch an der Kiste.
Was müsste ich denn in Zeile 12-16 ändern wenn ich 3 Quellen anstatt 2 wählen würde?
lg
Bitte warten ..
Mitglied: bastla
04.02.2011 um 08:02 Uhr
Hallo bastler2000!
Was müsste ich denn in Zeile 12-16 ändern wenn ich 3 Quellen anstatt 2 wählen würde?
Die gute Nachricht zum Tage: gar nix (es werden ja alle relevanten Informationen - zu kopierende Datei, Zielpfad und (Quell-)Basispfad - beim Aufruf des Unterprogramms übergeben ...)

Grüße
bastla
Bitte warten ..
Mitglied: bastler2000
04.02.2011 um 17:35 Uhr
Hallo bastla,
habe gerade nach dem Muster von Zeile 7/8 neue ordner erstellt klapp!
Danke
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...