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
Kommentar vom Moderator Biber am 26.02.2012 um 14:17:40 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell".
GELÖST

Batch Eine bestimmte Anzahl von Dateien kopieren, Zielordne ist aber leer

Frage Entwicklung Batch & Shell

Mitglied: sugram

sugram (Level 1) - Jetzt verbinden

21.02.2012, aktualisiert 18.10.2012, 6254 Aufrufe, 15 Kommentare

Hallo

Ich hoffe das hier mir jemand weiterhelfen kann

Folgendes Problem.

Ich habe hier mehrere Ordner in denen immer neue Bilder reinkommen. Diese werden für uns für eine Analyse benötigt.
Da man aber meist nicht alle benötigt, sondern nur die letzten 20 oder 30 neuesten, dachte ich ich löse das mit ner Batch,
Allerdings bin ich da jetzt an meine Grenzen gestoßen.
Somit, ist es möglich von mehreren Ordnern nur die letzten 20 neuesten Dateien zu kopieren, wobei der Zielordner leer ist?!

Vielen Dank schon mal.
Mitglied: 105215
21.02.2012 um 09:15 Uhr
Moin,

ich würde dies via robocopy machen. An diesem Thema Robocopy bin ich auch gerade dran!!! Das Tool ist echt super und dort kannst duch da es sich am Besten mit cmd Befehlen handelt kannst du die Befehle direkt in ein Batch eingeben.

Gruß
Karsten
Bitte warten ..
Mitglied: 60730
21.02.2012 um 10:05 Uhr
moin,

Somit, ist es möglich von mehreren Ordnern nur die letzten 20 neuesten Dateien zu kopieren, wobei der Zielordner leer ist?!

Yupp das ist durchaus möglich, allerdings würde ich die Reihenflge umdrehen und die ersten Treffer solange kopieren, bis 20 erreicht ist.

PS:
Sicherlich willst du das per Batch erledigen, also wäre die Fragestellung besser unter Batch aufgehoben.
Bitte warten ..
Mitglied: bastla
21.02.2012 um 11:42 Uhr
Hallo sugram und willkommen im Forum!

Sollte sich (ungetestet) etwa so machen lassen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Ordner mit neuen Bildern" 
03.
set "Typ=jpg" 
04.
set "Ziel=D:\Zielordner" 
05.
set /a Anzahl=20 
06.
 
07.
pushd "%Quelle%" 
08.
for /f "delims=" %%i in ('dir /b /o-d *.%Typ%') do call :ProcessFile "%%i" 
09.
popd 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
set /a Anzahl-=1 
14.
if %Anzahl% geq 0 copy %1 "%Ziel%" 
15.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
21.02.2012 um 13:28 Uhr
moin,

das geht sogar auch ohne Unterprogram:
auch in der CMD-Line

wobei der Zielordner leer ist?!
01.
@echo off & setlocal 
02.
set "Quelle=D:\Ordner mit neuen Bildern" 
03.
set "Typ=jpg" 
04.
set "Ziel=D:\Zielordner" 
05.
if exist "%Ziel%\*%Typ%" exit /b 1 
06.
set /a Anzahl=20 
07.
 
08.
pushd "%Quelle%" 
09.
set /a x=Anzahl+1 
10.
(for /f "delims=" %%i in ('dir /b /o-d *.%Typ%') do @set /a x-=1,y=1/x &&>&3  copy "%%i" "%Ziel%" || set /a x=1) >nul 2>nul 
11.
popD
[Edit]
hinweis von bastla - berichtigt.
[/Edit]

Gruß Phil
Bitte warten ..
Mitglied: bastla
21.02.2012 um 17:57 Uhr
@PH
das geht sogar auch ohne Unterprogram
... aber wohl doch nur mit %Typ%

Ansonsten tut's auch:
for /f "tokens=1* delims=:" %%i in ('dir /b /o-d *.%Typ%^|findstr /n "^"') do if %%i leq %Anzahl% copy "%%j" "%Ziel%"
Grüße
bastla
Bitte warten ..
Mitglied: sugram
22.02.2012 um 13:00 Uhr
VIELEN VIELEN Dank euch allen!

Ich habe das Programm ohne Unterprogramm getestet und funktioniert klasse!
Nur eine Frage habe ich hierzu, das kopieren / suchen dauert da schon lange. Habe für 5 Dateien ca 30 -40 sec gebraucht.

Gruß sugram

P.S.: Ich bin dennoch happy und schmeiß mal ne runde )
Bitte warten ..
Mitglied: bastla
22.02.2012 um 13:12 Uhr
Hallo sugram!
Habe für 5 Dateien ca 30 -40 sec gebraucht.
Ich kann mir eigentlich nicht vorstellen, dass das am Batch liegt - auch wenn Du meine zuletzt gepostete Zeile als Ersatz der Zeile 8 im ursprünglichen Batch verwendest (die Zeilen 12 bis 15 werden dann nicht mehr benötigt) und damit testest, sollte es keinen nennenswerten Unterschied in der Laufzeit geben ...

Wie viele Bilder befinden sich denn im fraglichen Ordner, und wo liegt dieser (auf einer lokalen Platte oder auf einem Netzlaufwerk / NAS)?

Grüße
bastla
Bitte warten ..
Mitglied: sugram
22.02.2012 um 13:37 Uhr
Hallo

Nun die Bilder liegen auf einem Netzlaufwerk, die Anzahl der Bilder kann hier schon mal auf 1000 oder mehr ansteigen. Ich denke das es dann daran liegen wird.
Immerhin funktioniert das ganze, dann muß man halt warten

Gruß sugram
Bitte warten ..
Mitglied: sugram
22.02.2012 um 22:55 Uhr
So, hätte doch noch eine Frage dazu und hoffe, daß diese auch beantwortet werden kann.

Die Lösung ist ja so konzipiert, daß der exakte Zielpfad als Quelle angegeben wird.
Ich veranschauliche mal mein "Problem"
Die Bilder sind von einem Objekt mit 6 Seiten, von jeder Seite existieren Bilder. Natürlich brauch ich alle Bilder von allen Seiten. Dabei ist die Ordnerstruktur so aufgebaut:

\\share\Objekt1\seite1
\\share\Objekt1\seite2
\\share\Objekt1\seite3
usw.

mir dir /s bekomme ich dann zwar das Directorylisting unter objekt1 hin, aber wie veranlasse ich dann xcopy / copy das noch in das richtige Unterverzeichnis zu kopieren?

Danke schon mal im voraus
Bitte warten ..
Mitglied: bastla
22.02.2012 um 23:02 Uhr
Hallo sugram!

Ungetestet etwa so:
01.
@echo off & setlocal 
02.
set "Quelle=\\share\Objekt1" 
03.
set "Typ=jpg" 
04.
set "Ziel=D:\Zielordner" 
05.
set /a Anzahl=20 
06.
 
07.
for /d %%a in ("%Quelle%\*") do for /f "tokens=1* delims=:" %%i in ('dir /b /o-d "%%a\*.%Typ%"^|findstr /n "^"') do if %%i leq %Anzahl% xcopy "%%a\%%j" "%Ziel%\%%~nxa\"
Zielordner wären in diesem Fall "D:\Zielordner\seite1", "D:\Zielordner\seite2", ... und kopiert werden jeweils 20 Dateien ...

Grüße
bastla
Bitte warten ..
Mitglied: sugram
26.02.2012 um 09:50 Uhr
Vielen Dank, klappt wunderbar!


Dennoch eine Frage, der String arbeitet ja dann das ganze Verzeichnis durch. Also wenn 1000 Dateien enthalten sind, dann kann das dauern.
Wäre es möglich das er dann nach 20 einfach abbricht, da ja die Anzahl schon erreicht ist.

Ich glaube langsam ich nerve euch, aber ich bekomme das leider nicht hin.

Gruß sugram
Bitte warten ..
Mitglied: 60730
26.02.2012 um 12:06 Uhr
Zitat von sugram:
Vielen Dank, klappt wunderbar!
Ich glaube langsam ich nerve euch, aber ich bekomme das leider nicht hin.

Moin,
Wenn du mich damit meinst, ja - denn ich schrieb dir gleich verschiebe die frage nach batch & shell.

Und was deinen aenderungswunsch angeht,


Edit so viel lesen musst du garnicht, denn achon seine erste antwort zielt genau dahin.

Versuche mal ein paar geloeste threads vom bastla anzusehen, er arbeitet gerne mit unterprogrammen.

Mit anderen worten,, jetzt kaut er (die batch) Alles durch und mit einer simplen anpassung koennte die locker alles unter 20 abarbeiten und dann abbrechen.

Dazu musst du aber jeden ordner seperat ansprechen und nicht wie jetzt einen samt unterordnern.

Also versuch mal, meinen vorschlaegen zu folgen, denn wir koennen das-aber davon lernst du nix.
Und dann finde ich es immer schade, wenn man versucht den fragestellern einen tipp zu geben und wenn man dan merken darf, das der in den wind geschrieben wird- hat man(ich) keine lust mehr.

Gruss

Gruss
Bitte warten ..
Mitglied: sugram
26.02.2012 um 12:40 Uhr
Das war allgemein gemeint.

Ich versuche das ich das hin bekomme. Denn ich kann dich / euch schon verstehen wenn keine Lust mehr habt, weil ihr damit richtig liegt, daß man so nix lernt.
Wie ist es denn meistens, die Lösung ist manchmal so einfach, aber man sieht sie nicht, weil man zu kompliziert denkt.

Also nicht's für ungut ich danke euch ALLEN!


Gruß sugram
Bitte warten ..
Mitglied: bastla
26.02.2012, aktualisiert 18.10.2012
@T-Mo
Das Abbrechen von Schleifen ist so eine Sache für sich ...

Ich würde eher zu einem anderen Ansatz (dem Gegenteil Deiner ursprünglichen Idee) greifen - ungetestet etwa so:
01.
@echo off & setlocal 
02.
set "Quelle=\\share\Objekt1" 
03.
set "Typ=jpg" 
04.
set "Ziel=D:\Zielordner" 
05.
set /a Anzahl=20 
06.
 
07.
for /d %%a in ("%Quelle%\*") do call :ProcessDir "%%a" 
08.
goto :eof 
09.
 
10.
:ProcessDir 
11.
set /a Skip=0 
12.
for /f %%i in ('dir "%~1\*.%Typ%"^|findstr "Datei(en)" 2^>nul') do set /a Skip=%%i - Anzahl 
13.
if %Skip% lss 0 set /a Skip=0 
14.
for /f "delims=" %%i in ('dir /b /od /a-d "%~1\*.%Typ%"^|more +%Skip%') do xcopy "%~1\%%i" "%Ziel%\%~nx1\" 
15.
goto :eof
Aus edukativen Gründen verzichte ich (vorläufig) auf eine Erkklärung der Vorgangsweise ...

Grüße
bastla
Bitte warten ..
Mitglied: sugram
02.03.2012 um 06:40 Uhr
@bastla

VIELEN DANK!!

Klappt wunderbar, mußte nur den String "Datei(en)" in "File(s) ändern.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

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 ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

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 ...