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

Bestimme Anzahl an htm Files in Unterordner verschieben.

Frage Entwicklung Batch & Shell

Mitglied: GnozoNAV

GnozoNAV (Level 1) - Jetzt verbinden

24.08.2011, aktualisiert 18.10.2012, 3441 Aufrufe, 6 Kommentare

Ich beabsichtife eine Verschiebung von 63000 htm Files in Unterordner a la 600 Files.

Hallo,

Ich habe ein Problem und möchte dies durch einen Batch lösen. Wäre super, wenn sich jemand Zeit nimmt um mir dort auszuhelfen.

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.

Ich hab mir diesen Thread schon durchgelsen aber kann mangels fehlender Erfahrung im Bereich Batch keine Schlüsse draus ziehen.
http://www.administrator.de/index.php?content=155260

Mit freundlichen Grüßen

Lukas Patz
Mitglied: pieh-ejdsch
24.08.2011 um 13:31 Uhr
moin Lukas,

magst Du etwas fertiges oder etwas zum selbst Probieren
Begrenzte Anzahl von Dateien verschieben

hier kannst Du noch etwas anpassen?

Bei Fragen einfach diese stellen.

Gruß Phil
Bitte warten ..
Mitglied: GnozoNAV
24.08.2011 um 13:46 Uhr
Also ich hab mir deinen Link jetzt mal angeschaut und mit den Code genommen und so angepasst, wie ich denke, dass es richtig ist :D

01.
::----snipp----Dateien-Blockweise-verschieben 
02.
@echo Off 
03.
set Woher="C:\MyHTMLHelp\Project\addin_a\Source" 
04.
set "C:\MyHTMLHelp\Project\addin_a\Source\Ordner1" 
05.
set "Dateityp=*.htm" 
06.
 
07.
pushD %Woher% 
08.
 
09.
del "%temp%\tmp" 2>nul 
10.
if exist "%temp%\tmp2" (move "%temp%\tmp2" "%temp%\tmp">nul ) else dir /b %Dateityp%>"%temp%\tmp" 
11.
 
12.
call :move 600 
13.
popD 
14.
goto :eof 
15.
 
16.
 
17.
:move 
18.
set "Nr=1" 
19.
for /f "usebackq delims=" %%i in ("%temp%\tmp") do (@ECHO move "%%i" "%Dorthin%\" 
20.
	setlocal enabledelayedexpansion 
21.
	if !Nr! == %1 endlocal & set "Nr=1"&more +%1 "%temp%\tmp">"%temp%\tmp2"&goto :eof 
22.
	endlocal & set /a Nr+=1 
23.
24.
::----snapp----Dateien-Blockweise-verschieben
Also sofern ich das jetzt richtig verstehe, würde er 600 htm Files in den Ordner1 verschieben? Muss ich dann jeweils einen neuen Ordner anlegen wie z.b. Ordner2 und die .bat dann ergänzen und wieder ausführen, bis ich keine htm Files mehr habe oder erstellt er automatisch einen neuen Ordner?

Sorry aber mit Batch kenn ich mich gar nicht aus, bin Navision Entwickler.

Zitat von pieh-ejdsch:
magst Du etwas fertiges oder etwas zum selbst Probieren

Aus zeitgründen wohl eher etwas fertiges :/

Beste Grüße

Lukas
Bitte warten ..
Mitglied: Skyemugen
24.08.2011 um 14:34 Uhr
Aloha,

abgesehen davon, dass bei set "Dorthin=C:\..." das Dorthin bei dir verloren ging sollte die Wortgruppe Dateien-Blockweise-verschieben doch nahe legen, dass der Grundcode an sich auch nur das macht, alles von A nach B und nichts mit C, D etc. (geht auch aus dem alten Thread hervor).

move bewegt nur, erstellt aber nichts, dass heißt:
  • Entweder du legst bereits weitere Ordner an und änderst das pro Durchgang in der Batch
oder
  • Man lässt per Batch (von vornherein am Besten) die Verzeichnisse anlegen (mit Nummerierung und nur sofern notwendig und der vorangehende bereits existiert und per counter) und lässt ihn solange durchjagen, bis nichts mehr zum Verschieben vorhanden ist

Und weil ich heute meinen faulen Tag habe gibt's auch überlasse ich die weitere Abarbeitung meinen Batch-Kollegen

greetz André

edit @bastla, soso Da hätte ich zumindest eine Suchaktion starten müssen aber die Faulheit heute *lächz - so warm*
Bitte warten ..
Mitglied: bastla
24.08.2011, aktualisiert 18.10.2012
@skye
Faul? Kann ich auch: Batch um Dateien nach Anzahl in Ordner abzulegen

Grüße
bastla

[Edit] @skye
Da hätte ich zumindest eine Suchaktion starten müssen
Das ist der Vorteil, wenn man(n) dabei war ...
[/Edit]
Bitte warten ..
Mitglied: Friemler
24.08.2011 um 15:30 Uhr
Hallo GnozoNAV,

teste mal folgendes:
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "SrcDir=C:\MyHTMLHelp\Project\addin_a\Source" 
07.
set "FileType=htm" 
08.
set "nFiles=600" 
09.
 
10.
 
11.
set /a "Cntr=1" 
12.
 
13.
:Loop 
14.
  set "FilesAvailable=" 
15.
 
16.
  for /f "tokens=1* delims=:" %%a in ('dir /b /a:-d /o:n "%SrcDir%\*.%FileType%" 2^>NUL ^| findstr /n "^"') do ( 
17.
    if %%a leq %nFiles% ( 
18.
      if %%a equ 1 ( 
19.
        md "%SrcDir%\Ordner%Cntr%" 
20.
21.
 
22.
      move "%SrcDir%\%%b" "%SrcDir%\Ordner%Cntr%\%%b" 
23.
      set "FilesAvailable=1" 
24.
25.
26.
 
27.
  set /a "Cntr+=1" 
28.
if defined FilesAvailable goto :Loop
Im Kopf der FOR-Schleife ließt der DIR-Befehl alle HTM-Dateien im Quellverzeichnis ein. Seine (wegen /o:n alphabetisch sortierte) Ausgabe (wegen 2^>NUL aber nicht die Fehlermeldungen) wird über eine Pipe an FINDSTR weitergereicht, was wegen dem Parameter "^" (steht für Zeilenanfang) alle Zeilen findet und wegen /n Nummern vor alle Zeilen schreibt.

Die daraus resultierenden Ausgabezeilen werden von der FOR-Schleife in Tokens zerlegt (siehe mein Tutorial zur FOR-Schleife). Das erste Token ist wegen delims=: die Zeilennummer (enthalten in der Laufvariablen %%a), das zweite Token ist wegen dem Stern in tokens=1* der Rest der Zeile, also der Dateiname (enthalten in der automatisch erzeugten Laufvariablen %%b).

In der Schleife wird geprüft, ob die Zeilennummer kleiner oder gleich 600 ist. Wenn ja wird geprüft ob sie gleich 1 ist. Wenn ja, wird ein neues Verzeichnis angelegt. Dazu wird die Zählervariable Cntr benutzt. Danach wird die gerade aktuelle Datei in das neu erstellte Verzeichnis verschoben und die Variable FilesAvailable auf 1 gesetzt.

Wenn die geforderte Anzahl Dateien verschoben wurde (wegen Zeile 8 also 600 Stück), stimmt die Bedingung in Zeile 17 nicht mehr und alle restlichen Dateien werden überlesen.

Nach dem Ende der FOR-Schleife wird in Zeile 28 geprüft, ob die Variable FilesAvailable existiert. Das ist nur der Fall, wenn zuvor die FOR-Schleife durchlaufen wurde, da die Variable in Zeile 14 gelöscht wird. Falls die Variable existiert, wird zum Label :Loop gesprungen und der Ablauf beginnt von neuem.

Diesmal ist die Dateiliste, die von DIR geliefert wird, um 600 Dateien kürzer.

Das wird solange wiederholt, bis DIR (wegen Zeile 7) keine HTM-Dateien mehr findet, dann wird die FOR-Schleife nicht durchlaufen und FilesAvailable existiert in Zeile 28 nicht, was zum Beenden des Scripts führt.

Gruß
Friemler
Bitte warten ..
Mitglied: GnozoNAV
24.08.2011 um 16:09 Uhr
Der Code von Friemler ist ja mal sowas von geil
Er hat auf jedenfall genauso funktioniert, wie ich mir das vorgestellt habe und ging sogar richtig fix.

Ich möchte mich nocheinmal herzlich bei allen Leuten bedanken, die mir geholfen haben und besonders bei Friemler, der sich die Zeit genommen hat und extra einen Batch geschrieben hat und eine Erklärung dazu. DANKE

Der Batch ist ja auch zemlich nützlich allgemein um mal einen Ordner aufzuräumen.

Beste Grüße

Lukas
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...