Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Verschieben von bestimmter Anzahl von Dateien aus vollem Ordner dauert zu lange

Mitglied: mkdeluxe

mkdeluxe (Level 1) - Jetzt verbinden

19.02.2015, aktualisiert 20.02.2015, 703 Aufrufe, 2 Kommentare

Hallo zusammen,

ich hoffe ihr könnt mir helfen, ich bin nach langer Zeit mal wieder im Batch-Umfeld unterwegs (sonst eher C# u.ä.) und benötige ein Script, mit dessen Hilfe ich eine bestimmte Anzahl von Dateien von einem in ein anderes Verzeichnis verschiebe. Wichtig ist, dass immer die ältesten zuerst verschoben werden. Wenn die definierte Anzahl an Files verschoben wurde, soll das Script beendet werden.

Mein Lösung (siehe unten) verschiebt zwar die gewünschten Files in das gewünschte Verzeichnis, läuft aber danach noch lange weiter, da das Ausgangsverzeichnis sehr voll ist und der ELSE-Zweig mit dem goto :eof nicht greift. Ich hoffe auf eure Hilfe...

01.
set StartFolder=C:\DATA\Test\ 
02.
set TargetFolder="C:\DATA\Test2\" 
03.
set SearchString="Update*.xml" 
04.
set Found="" 
05.
set /a Numbers=1 
06.
set Count=1000 
07.
 
08.
FOR /F "delims=" %%z IN ('dir %StartFolder%%SearchString% /OD /B') Do @( 
09.
	IF %Numbers% LEQ %Count% ( 
10.
		call :MoveFile "%%z" 
11.
		) ELSE ( GOTO :EOF	) 
12.
13.
 
14.
:MOVEFile 
15.
SET Found="%~1" 
16.
IF %Numbers% LEQ %Count% (MOVE %StartFolder%%Found% %TargetFolder% 
17.
SET /a Numbers= %Numbers%+1 )
Wie kann ich das besser lösen? Wo ist der Fehler im Ansatz? Könnt ihr mich anschubsen?

Danke für die Hilfe und viele Grüße
Mitglied: rubberman
LÖSUNG 19.02.2015, aktualisiert 20.02.2015
Hallo mkdeluxe.

  • Die FOR /F Schleife puffert zunächst die gesamte Ausgabe des DIR Befehls, bevor der Schleifenrumpf überhaupt abgearbeitet wird. Das wirst du nicht vermeiden können, da du die Ausgabe mit /OD vorsortiert haben möchtest.
  • Der Aufruf einer Subroutine kostet Zeit. Wenn du alles im Schleifenrumpf abarbeitest, wird das etwas schneller gehen.
  • Variablen werden in einer Kommandozeile oder einem (in Klammern eingeschlossenen) Block von Kommandozeilen nur einmal zum Wert erweitert, und zwar noch vor der Abarbeitung dieses Codes. Dein Schleifenrumpf ist so ein Block, deshalb bleibt %Numbers% beim Vergleich auch immer 1. Die "Verzögerte Variablenerweiterung" schafft Abhilfe.

Ungetestet:
01.
@echo off &setlocal 
02.
set "StartFolder=C:\DATA\Test\" 
03.
set "TargetFolder=C:\DATA\Test2\" 
04.
set "SearchString=Update*.xml" 
05.
set /a "Numbers=1, Count=1000" 
06.
 
07.
for /F "delims=" %%z in ('dir "%StartFolder%%SearchString%" /OD /B') do ( 
08.
  set "Found=%%z" 
09.
  setlocal EnableDelayedExpansion 
10.
  if !Numbers! LEQ !Count! ( 
11.
    move "!StartFolder!!Found!" "!TargetFolder!" 
12.
  ) else ( 
13.
    goto :EOF 
14.
15.
  endlocal 
16.
  set /a "Numbers += 1" 
17.
)
Grüße
rubberman
Bitte warten ..
Mitglied: mkdeluxe
20.02.2015 um 09:30 Uhr
Hallo rubberman,

danke für die Hilfe! Es funktioniert wie gewünscht. "EnableDelayedExpansion"... das erklärt vieles! Danke für die Lösung und für die Erklärungen!

Grüße
mkdeluxe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch: bestimmte Datei finden und den Ordner verschieben
gelöst Frage von Gari.onBatch & Shell9 Kommentare

Hallo! ich hoffe ich bin hier richtig, es geht um folgendes Problem: in einem Ordner liegen mehrere Unterordner mit ...

Batch & Shell
Ordner durchsuchen - wenn "bestimmter Text" in einer Datei enthalten, diese Datei in einen anderen Ordner kopieren oder verschieben
gelöst Frage von ConcurveBatch & Shell14 Kommentare

Hallo zusammen, ich habe ein Problem bei der Erstellung einer *.bat, welche innerhalb eines zu definierenden Ordners alle Dateien ...

Windows Netzwerk
Dateien und Ordner verschieben mit Rückfrage
Frage von steftsWindows Netzwerk1 Kommentar

Hallo, in einer Windows Server-Client Umgebung habe ich folgende Anforderung: Dateien und Ordner die auf einem Netzwerk Fileshare liegen, ...

Batch & Shell
Verschieben von Dateien in zugehörige Ordner
Frage von vmihaylovBatch & Shell5 Kommentare

Hallo allerseits! Ich habe in einem Ordner sehr viele Dateien mit Artikelnummern als Namen (z.B. 123456.tiff, 123456.jpg, 215456.jpg,215456,tiff,), die ...

Neue Wissensbeiträge
Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 StundeDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 6 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
Frage von a-za-zNetzwerkmanagement13 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk10 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Router & Routing
Firewall Homeoffice
Frage von leon123Router & Routing6 Kommentare

Hallo zusammen, ich möchte meine beiden Rechner von der Firma vom Heimbereich abtrennen. Die Fritzbox kann leider nur den ...