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

Anzahl bestimmter Dateien per Batch verschieben

Mitglied: Sirbubu

Sirbubu (Level 1) - Jetzt verbinden

17.11.2010 um 13:55 Uhr, 8286 Aufrufe, 9 Kommentare

HI

ich habe einen Ordern mit ungefähr 90000 Dateien.
Diese dateien sind Rohdaten und müssen in ein Verzeichniss wo sie dann automatisch importiert werden.
Durch die große Anzahl benötigt natürlich der Importer ziemlich lange um sich alleine 1 File zu holen.
Daher würde ich gerne ein Batch haben das einfach eine bestimmte Anzahl von Dateien z.b 1000 in den Zielordner verschiebt!
Kann mir jemand von euch dabei helfen?

danke im vorraus

Sirbubu
Mitglied: 60730
17.11.2010 um 14:21 Uhr
moin und willkomen im Club,

UNGETESTET für ein deutsches OS geschrieben

01.
rem logfile 
02.
set "log"=="%temp%\log.ini" 
03.
rem quelle definieren 
04.
set "quelle"=="c:\abc\def" 
05.
rem ziel definieren 
06.
set "ziel"=="c:\123\456\" 
07.
 
08.
rem erstmal alle Treffer zusammenzählen 
09.
for /f %%a in ('dir /s %quelle%\*.* ^|find "Datei(en)"') do set files=%%a 
10.
rem "schwung" definieren: 
11.
set "minus"=="100" 
12.
 
13.
rem Wenn mehr Treffer als abzuziehen sind ziehe (im Beispiel 100 von Variable ab. Sonst nicht. 
14.
if %files% leq %minus% ( 
15.
                        set files=0 
16.
             ) else ( 
17.
                        set /a files=%files%-%minus% 
18.
19.
 
20.
rem tempfiles schreiben 
21.
dir /b /s %quelle%\*.*>%log% 
22.
for /f %%a in ('"more +%files% %log%"') do echo move "%%a" %ziel% 
23.
pause

UNGETESTET

Macht auch nix, zeigt potentielle Dateiverschiebungen nur an (echo in der letzten zeile entfernen)
Pfade selbstverfreilich frei erfunden jede Übereinstimmung mit lebenden Pfaden oder Personen sind rein zufällig.

  • Was genau passiert, wenn du weniger Treffer hast, als abgezogen werden, dazu müßte man sich noch was ausdenken.

Wie geschrieben UNGETESTETer Schnellschuss aus der Hüfte.

Gruß
Bitte warten ..
Mitglied: 60730
17.11.2010 um 15:47 Uhr
Oben siehst du, wie ich die Problematik lösen würde, wenn ich streng nach deiner Überschrift vorgehen würde.

Ich würde die Thematik aber anders lösen.

01.
set "quelle"=="c:\abc\def" 
02.
set "ziel"=="c:\123\456\" 
03.
set "suffix"=="pdf" 
04.
 
05.
for /R %%quelle%\ %%a in (*.%suffix%) do ( 
06.
		for /f "tokens=3" %%i in ('dir /-C "%%a" ^| find ".%suffix%" ') do call :processlines %%a %%i 
07.
08.
goto end 
09.
 
10.
:processlines 
11.
set /a "wait"="%2" / 100 
12.
echo move %1 %ziel%\ && ping -n %wait% localhost>nul 
13.
:eof 
14.
 
15.
:end
Wobei dieser Schnippsel eine Datei nach der anderen verschiebt und zwischen den verschiebeaktionen eine gewisse Zeit (die abhängig von der Dateigröße ist) pausiert.

Ob die Dateigröße nun durch 10; 100 oder gar 1000 geteilt werden soll, das kann ich dir nicht sagen -dazu kennen wir deinen Importjob nicht.

Und wieder einmal hab ich Bastlas call :processlines benutzt.
Jedoch "spinnt" diese Version, wenn du Dateien/Ordner mit ! Sonderzeichen hast.

Und ob man mit %2 überhaupt so spielen kann, gehört zu den Fragen, die ein Test erweisen würde

Der Votril, den ich in diesem Ansatz sehe ist - wenn der Import nicht auf dem Rechner läuft, den das Script laufen läßt dann sparst du einiges an Zeit - sehr wahrscheinlich läuft der Import sauberer ab, wenn nur eine Datei nach der nächsten rein kommt und das script kann einmal gestartet werden und beendet sich dann, wenn keine Dateien mehr da sind.

Der erste Ansatz müßte ja eine goto schleife bekommen und die hab ich absichtlich nicht reingebaut, denn ich kenne den zeitbedarf nicht, wann der nöchste 1.000er Block in den Ordner darf.

All das und das, was noch von einem /beiden Bs aus dem B Bereich kommen wird solltest du beachten.

Gruß
Bitte warten ..
Mitglied: Biber
17.11.2010 um 16:34 Uhr
Moin Sirbubu,

ich würde es von der Strategie her schon ähnlich machen wie T-Mo.
Allerdings würde ich auf eine selbst definierte und hochgezählte Set /a -Variable verzichten und diese Übung vom Standardprogramm Find.exe abkaspern lassen.

Demo am CMD-Prompt:
[Input ist die erste Zeile gekennzeichnet durch den ">"-Prompt. dieses ">"-Zeichen NICHT mit eingeben.}

>For /F "delims=[] tokens=1,2" %i in ('dir /a:-d /b F:\Schnipsel\*.txt^|find /i /n ".txt"') do @if %i LSS 77 @ECHO %i move "F:\Schnipsel\%j" C:\Zielverzeichnis\ 
1 move "F:\Schnipsel\namen.txt" C:\Zielverzeichnis\ 
2 move "F:\Schnipsel\PasswordneverExpires_vbs.txt" C:\Zielverzeichnis\ 
3 move "F:\Schnipsel\scanlog.txt" C:\Zielverzeichnis\ 
4.... 
.... usw. 
77 ...
Erläuterung:/Annahmen.
  • Alle Dateien ("deine 90000") liegen in meinem Beispiel im Verzeichnis "F:\Schnipsel" und erfüllen die Namenskonvention "*.txt"
  • Zielverzeichnis ist "C:\Zielverzeiochnis"
  • als proof-of-concept-Ausgabe wird der MOVE-Befehl nur mit @ECHO ausgegeben, nicht aber ausgeführt
  • zusätzlich nur zur Visualisierung des Zählers %i, der bei mir das Limit "77" statt "1000" hat --> wird der Wert von %i mit ausgegeben.

Grüße
Biber
Bitte warten ..
Mitglied: 60730
17.11.2010 um 16:56 Uhr


[OT]
Biber du alter einzeiler
Wenn ich ne Kappe auf hätte, die würde ich ziehen
[/OT]

Nur der Vollständigkeit halber:
  • Falls der Bibersche Schnippsel in eine Batch gepackt werden soll - was ich an deiner Stelle machen würde - spendiere jedem einzelnen % einen Zwilling (%%).

Gruß
Bitte warten ..
Mitglied: Sirbubu
17.11.2010 um 18:43 Uhr
Wow gleich soviele Antworten damit hätte ich nicht gerechnet
Danke

Ich werde morgen früh mal die Scripte ausprobieren und euch feedback geben.

Gruß

Sirbubu
Bitte warten ..
Mitglied: Sirbubu
19.11.2010 um 12:25 Uhr
Hi

habe eure Scripte gerade mal ausprobiert.
Komme leider mit keinem zu dem gewünschten ziel!
Das Problem bei den letzten 2 ist das ich keinen spezifische Dateiendung habe d.h die dateien heißen *.071[326CEEE1-BF40-412B-B454-A333ö2A776834]
wenn ich in den suffix ein * eintrage funzen die scripte irgenwie nichtmehr!
bin gerade am überlegen ob ich nicht mit Powershell und der Filesystemwatcher klasse eine überwachung des verzeichnises mache und bei änderung also Import einer datei eine andere reinkopiere!
Was haltet ihr davon?
Bitte warten ..
Mitglied: Biber
19.11.2010 um 14:14 Uhr
Moin Sirbubu,

ja nee... is' klar.
Damit habe ich natürlich nicht gerechnet, dass eckige Klammern im Dateinamen bzw. in der Endung enthalten sind, als ich als Token-Trenner die Zeichen "[" und "]" gewählt habe.

Wenn deine Dateien jetzt beispielsweise der Namenskonvention "Dateiendung enthält u.a. eine Eckige-Klammer-Auf=='[' " entsprechen, dann muttu anpassen:

 :: Demo am CMD-Prompt BISHER: 
For /F "delims=[] tokens=1,2" %i in ('dir /a:-d /b F:\Schnipsel*.txt^|find /i /n ".txt"') do @if %i LSS 77 @ECHO %i move "F:\Schnipsel\%j" C:\Zielverzeichnis 
...wird jetzt zu
For /F "delims=[] tokens=1,*" %i in ('dir /a:-d /b F:\Schnipsel*.*[*^|find /i /n "["') do @if %i LSS 77 ......{whatever}
  • Statt nach "*.txt" suche ich jetzt nach allen Dateien "*.*[*" (==Extension enthält eine Eckige-Klammer-Auf )
  • Statt "Delims=[] tokens=1,2" , also einer Annahme "Es gibt nur 2 Zeilen-Teile maximal" Jetzt--> "Tokens=1,*" --> Es gibt Token1 und den Rest
  • Statt bisher "FindStr ".txt" dann natürlich auch "FindStr "[" (= suche die Eckige-Klammer-Auf]

Zu Teil b) der Frage, ob du nicht besser mit der PowerShell etc.... Warum nicht?
Einzige Bitte dann: Mach hier einen Haken dran und lass uns die neue Variante in einem neuen Beitrag abfriemeln.

Grüße
Biber
Bitte warten ..
Mitglied: Sirbubu
19.11.2010 um 16:17 Uhr
Jepp das klingt logisch mit den [

habe jetzt ein Powershell script gemacht fällt mir irgendwie leichter von der Hand
Mach gleich mal nen Thread mit dem Powershell Script auf.

Gruß
Bitte warten ..
Mitglied: GnozoNAV
24.08.2011 um 12:31 Uhr
Hallo,

Ich habe fast das selbe Problem, nur hab ich echt keine Ahnung von Batch programmierung und hoffe, dass ihr mir hier weiterhelfen könnt.

Ich habe um die 63000 .htm Files in dem Ordner "C:\MyHTMLHelp\Project\addin_a\Source" und möchte nun alle Dateien in Unterordner aufteilen. Jeder ordner sollte 600 .htm Files beinhalten. Bis auf den letzten, da ist es logisch, dass es nicht genau 600 sein können. Ist aber kein Problem.

Also:
600 htm Files in den Ordner "C:\MyHTMLHelp\Project\addin_a\Source\Ordner1"
600 htm Files in den Ordner "C:\MyHTMLHelp\Project\addin_a\Source\Ordner2"
...
usw.

Es muss aber beachtet werden, dass die Unterordner noch nicht existieren. Also muss ein neuer Ordner quasi in dem Verzeichnis "C:\MyHTMLHelp\Project\addin_a\Source" angelegt werden und dort dann die 600 Files eingeschoben werden.

Wäre super, wenn sich da jemand kurz zeit nehmen könnte. Bis jetzt hab ich es nur geschafft alle Dateien in einen Ordner zu schieben. Das mit der abzählung das nach 600 schluss ist, hab ich nicht hinbekommen. Auch das erstellen eines neuen Ordners ist mir noch nicht so ganz klar.

Also vielleicht hat ja jemand die Zeit und bastelt so einen kleinen Batch kurz und kann mir noch erklären, was er pro Code zeile genau macht, denn einfach nur die .bat ausführen hat ja nun auch keinen großen Lerneffekt.

Mit freundlichen Grüßen

Lukas Patz
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch bestimmte Dateien verschieben ohne Ordnerstruktur
gelöst Frage von OOmatrixOOBatch & Shell14 Kommentare

Hallo. Ich möchte aus mehreren Ordnern und Unterordnern bestimmte Dateien in ein anderes Verzeichnis verschieben. Habe schon dies probiert: ...

Batch & Shell
Batch Datei erstellen - bestimmte Dateien verschieben
Frage von KingKoengBatch & Shell2 Kommentare

Hallo zusammen, ich benötige ein Batch dass mir per Parameter-Übergabe bestimmte Dateien von einem Verzeichnis ins andere verschiebt. Bspl: ...

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
Verschieben von bestimmter Anzahl von Dateien aus vollem Ordner dauert zu lange
gelöst Frage von mkdeluxeBatch & Shell2 Kommentare

Hallo zusammen, ich hoffe ihr könnt mir helfen, ich bin nach langer Zeit mal wieder im Batch-Umfeld unterwegs (sonst ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

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 1 TagTipps & Tricks

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

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

Monitoring
VPN Performance Zyxel-Fritte
gelöst Frage von HenereMonitoring13 Kommentare

Servus, nachdem ihr mir ja schon so gut helfen konntet, was das VPN zwischen Zyxel USG60W und Fritte 7490 ...

Sicherheit
Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen
Information von FrankSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...