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 um Dateien mit unregelmäßigen Namen und dazu zweite Datei mit nur anderer Endung in neues Verzeichnis zu verschieben

Frage Entwicklung Batch & Shell

Mitglied: peiker

peiker (Level 1) - Jetzt verbinden

14.07.2009, aktualisiert 22:36 Uhr, 4602 Aufrufe, 11 Kommentare

Habe hier viel gelesen, aber es passt irgendwie nichts von dem auf meinen Anforderungsbereich, der irgendwie kompliziert, und wenn händisch zu lösen, sehr langwierig ist.

Folgendes Problem besteht: Auf (meines Wissens bisher) 26 Notebooks wurde mit einer selbstprogrammierten Lösung aus unserer alten Firma von einem ehemaligen Mitarbeiter eine Datei ausgegeben, dessen Namen und Endung variiert. Grundsätzlich wird dazu eine Datei parallel erstellt, die sich nur von der Endung her unterscheidet (bild mit veriierendem format und endung). Das alles mehrmals am Tag, an 26 Plätzen, rückwirkend auf 2 Jahre.

Jetzt muss für ein neues Modul und dessen Import eine andere Struktur geschaffen werden. Dass das per Hand nicht geht, haben wir seit 2 Tagen in fummelarbeit schmerzhaft feststellen müssen. Parallel hat einer nach einer automatisierten Lösung gesucht, aber leider fehlt das Wissen, weshalb ich jetzt wirklich mal fragen muss.


Die batch soll:

1. am einfachsten immer den ersten Dateinamen im vorher gesetzten verzeichnis suchen
2. dessen namen ohne endung in eine variable setzen
3. ein verzeichnis mit dem namen erstellen
4. die partnerdatei mit gleichem namen aber ander endung zusammen mit der ersten in das neue verzeichnis verschieben
4a. in manchen fällen sogar eine dritte datei mit gleichem namen, aber wieder anderer endung mit verschieben
5. der partnerdatei (immer ein bild - format aber jpg, bmp, gif oder png) "folder" als namen verpassen
6. mit der nächsten, datei im ausgangsverzeichnis weiter machen


wenn wir das weiter händisch machen müssen, sind wir in grob geschätzten 4 jahren unserem ziel etwas näher.
normalerweise sollte von hersteller des neuen moduls ja sowas angeboten werden, aber als 4 mann-betrieb ist uns der migrations-support geringfügig zu teuer und ich hab so schon probleme meine firma über wasser zu halten. die daten von damals würden uns evtl. wieder frischen wind in die auftragsmappen bringen, ich wär sooo dankbar.

euer peiker
Mitglied: rubberman
15.07.2009 um 00:44 Uhr
Hallo peiker,

ggf. ist das noch nicht die Endlösung für dein Problem, weil du nicht erwähnt hast, welches Format (Dateiendung) deine Ausgangsdatei hat. Aber einen Versuch ist es wert.
01.
@echo off &setlocal 
02.
 
03.
:: Dein Verzeichnis (anpassen): 
04.
set folder=c:\test 
05.
 
06.
pushd "%folder%" 2>nul 
07.
 
08.
if errorlevel 1 ( 
09.
 pause>nul|set /p "=Pfad nicht gefunden " 
10.
 goto :eof 
11.
12.
 
13.
for /f "tokens=*" %%i in ('dir /a-d /b /on *.jpg *.bmp *.gif *.png') do call :sub "%%i" 
14.
for /f "tokens=*" %%j in ('dir /a-d /b /on') do move "%%j" ".\%%~nj\%%j" 2>nul 
15.
popd 
16.
echo. 
17.
pause>nul|set /p "=Fertig " 
18.
goto :eof 
19.
 
20.
:sub 
21.
if "%before%"=="%~n1" ( 
22.
 move %1 ".\%~n1\folder%~x1" 
23.
) else ( 
24.
 md "%~n1" 
25.
 move %1 ".\%~n1\folder%~x1" 
26.
27.
set "before=%~n1" 
28.
goto :eof
Falls die Ausgangsdatei nicht einer der geposteten Bildformate entspricht, bitte vorher noch die Dateiendung in der FOR Schleife hinzufügen.
Bitte warten ..
Mitglied: SchoSeb
15.07.2009 um 01:55 Uhr
Hi Peiker,

rubberman hat das Problem so wie ich das sehe ja schon gelöst, aber könntest du mir dennoch kurz einige
Erläuterungen geben, ich hab nämlich versucht das ganze mit VBScript umzusetzen und möchte das
auch noch zu Ende bringen
Zu meinen Fragen:
Befinden sich im Ausgansverzeichnis ausschließlich diese Bild Dateien oder auch andere Dateien?
Könntest du mir noch mal kurz erklären was bei Schritt 5 gemeint is mit folder als Dateinamen und
den Bild Formaten.?
@rubberman: Vielleicht kannst auch du mir das erklären, du hast ja anscheinend verstanden was gemeint ist ;)

Mit freundlichen Grüßen Sebastian
Bitte warten ..
Mitglied: peiker
15.07.2009 um 08:09 Uhr
guten morgen rubberman und SuperMari0!

also ich muss ja sagen, dass ich mal sowas von geplättet bin :O
gut, wenn ich mir die batch so ansehe, sind so einige syntaxen bei, die mir selbst damals zu geoworks zeiten noch nicht bekannt waren, und die selbst nichtmal erBingt werden konnten. respekt, ich hoffe dass ich sowas in meinem alter auch noch dazulernen werde. *les*

ich werde deine lösung direkt ausprobieren rubberman. sachen die evtl anzupassen wären, kann ich wohl auch mit meinem kenntnisstand so grad oben rauslesen


@SuperMari0
mit punkt 5 war gemeint, dass die bilddatei mit beliebigem format (habe mal die geläufigsten genommen), in das verzeichnis mit verschoben wird, und danach aber umbenannt wird in "folder.jpg" ... bzw mit ihrer endung, hauptsache folder. das ganze hat den sinn, weil die bilddateien QR-Codes mit einem verkürzten Inhalt der hauptdatei sind, die von außen (verzeichnis darüber, bzw programmform) ermöglicht ne vorschau zu geben - sozusagen wie ein cover in einem musikalbum.





//edit
ok in meinem versuch macht die batch nicht ganz das, was sie soll, aber das ist schon welten besser, als alles per hand, denn:
die hauptdatei mit dem gleichen namen und ort, wie die bilddatei, wird nicht mit ins zielverzeichnis verschoben.
die bilddatei wird nicht umbenannt. aber dafür wird einwandfrei das verzeichnis angelegt und das bild dorthin verschoben.

selbst wenn es nochimmer gefühlte tausende sind, kann ich jetzt leicht die hauptdatei ins gleichnamige (automatisch erstellte) verzeichnis schieben und per windows suche alle bilder finden und umbenennen. DANKE!
Bitte warten ..
Mitglied: rubberman
15.07.2009 um 09:10 Uhr
@peiker
Ist doch eigentlich kein Problem das noch gerade zu biegen. Gib mir doch einfach mal die Dateiendung der Hauptdatei(en).
Bitte warten ..
Mitglied: peiker
15.07.2009 um 09:29 Uhr
hallo rubberman,

da sehe ich das problemchen. es gibt keine regelmäßigkeit in der endung. manchmal hat die datei auch gar keine endung, manchmal zufälliges zahlengewirr und ein anderes mal hat die datei eine endung einer video-datei (obwohl es ja keine video dateien sind). deswegen ist die einzige zuordnung der hauptdatei über den namen, der immer gleich der bilddatei ist, bevor diese in folder umbenannt werden soll.

aber wenn das wirklich kein problem ist ... mensch, so leicht will ich auch mal an einen code rangehen können
Bitte warten ..
Mitglied: rubberman
15.07.2009 um 10:25 Uhr
Hab mal nen Schnellschuss gemacht und den Code oben geändert.
Probleme wird es geben, wenn die Datei keine Endung hat. Hab im Moment aber noch keinen Schimmer, wie ich das Problem fixen kann.
Bitte warten ..
Mitglied: peiker
15.07.2009 um 10:33 Uhr
ohne endung werden die wenigsten sein (maximal 500) - sowas geht wirklich per hand, da bin ich anderes gewöhnt.

das war der fehler des vorherigen programmierers, der einen dateinamen für die hauptdatei komplett mit endung beliebig hielt - so heißen die dateien der schreibfaulen nicht selten mal "p7avhn4" oder "powuejh78pz23h4", weil man so mal schnell nen einzigartigen dateinamen zaubern konnte, der durch elegantes, mit flacher hand auf die tastatur stützen, generiert wurde. zum glück haben viele irgendeine endung angegeben, daraus wurde der QR code als bild generiert - und das format des bildes wurde am anfang irgendwann mal vom nutzer bei der ersten benutzung festgelegt (sehr viele mit jpg, aber auch einige png und wenige gif und bmp).

ich werde den neuen code heute abend ausgiebig testen - diese fleißarbeit gehört nämlich nicht zum tagesgeschäft =/
der erste anschein ist aber, dass das funktioniert (habe es mal in einem testverzeichnis mit einem dateipaar laufen lassen)

nochmal RIESEN DANK rubberman! so ists perfekt und du hast mir definitiv aus dem chaos rausgeholfen!
Bitte warten ..
Mitglied: rubberman
15.07.2009 um 11:59 Uhr
Gern geschehen. Melde dich einfach nochmal, wenn irgendwas nicht klappt (oder vielleicht auch wenns klappt ).

Nur mal eben zu meiner Methode: Gehe rückwärts an die Sache ran.
- Zuerst werden die Bilddateien im Verzeichnis gesucht (nach Name sortiert).
- für jede gefundene Datei wird geprüft, ob die vorhergehende den gleichen Namen hatte,
    • wenn nicht, wird ein neues Verzeichnis mit dem Dateinamen angelegt und die Datei unter Änderung des
    Dateinamens verschoben
      • wenn ja, wird die Datei in das vorhandene Verzeichnis verschoben und ebenfalls umbenannt
      - jetzt werden in einer 2. Schleife alle verbleibenden Dateien gesucht und geprüft, ob ein Verzeichnis mit dem Namen
      existiert. Falls ja, wird die Datei dort hinein verschoben.

      Der Fehler für Dateien ohne Endung liegt darin begründet, dass, wenn im ersten Durchlauf das Verzeichnis angelegt wird, bereits eine Datei existiert, die exakt so heißt, wie das Verzeichnis benannt werden soll. Der MD Befehl kann in dem Moment nicht unterscheiden, dass es sich dabei um eine Datei handelt und nicht um ein Verzeichnis. Resultat ist, dass kein Verzeichnis angelegt wird und damit alle weiteren Aktionen nicht durchgeführt werden können.

      Vielleicht wissen die Batch-Gurus (wie Biber, Bastla, Miniversum und und und...) eine Lösung.
Bitte warten ..
Mitglied: SchoSeb
15.07.2009 um 20:07 Uhr
Hallo nochmal

ich weiß zwar immer noch net ob alle Dateien im entsprechenden Ordner bearbeitet werden sollen oder nur
einige steh wahrscheinlich etwas aufm Schlauch ^^
Hier jedenfalls meine Lösung mit VBScript.

01.
folder = "C:\test\" 
02.
 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
Set fsoFolder = fso.GetFolder(folder) 
05.
For Each fsoFile In fsoFolder.Files 
06.
	 
07.
	on error resume next 
08.
		 
09.
	' Filename ohne Endung in Variable schreiben 
10.
	filename = fso.getBaseName(fsoFile) 
11.
	' Endung in Variable speichern 
12.
	ext = fso.GetExtensionName(fsoFile) 
13.
		 
14.
	' Datei umbennen, da sonst bei Dateien ohne Endung kein  
15.
	' Ordner erstellt werden kann 
16.
	fsoFile.name = "folder." + ext 
17.
	 
18.
	' Falls der Ordner noch nicht vorhanden ist wird er erstellt 
19.
	if not fso.folderExists(folder & filename) then 
20.
		fso.CreateFolder(folder & filename) 
21.
	End If 
22.
	 
23.
	' Datei in den Ordner verschieben 
24.
	dest_path = folder & filename & "\" 
25.
	fso.MoveFile fsoFile, dest_path 
26.
 
27.
Next 
28.
Set fso = Nothing 
29.
Set fsoFolder = Nothing
Das Script kommt auch mit Dateien ohne Endung zurecht.
Sollen nur bestimmt Dateitypen bearbeitet werden lässt sich das bestimmt auch noch mittels Abfrage von "ext"
umsetzen.

Probiers mal aus vielleicht hilft es dir ja weiter.

Gruß Sebastian
Bitte warten ..
Mitglied: peiker
15.07.2009 um 20:24 Uhr
guten abend auch

und danke für deine mühe. ich sehe grad dein beitrag ist von 20:07h
um exakt 19:48 habe ich mit der batch festgestellt, dass mit der überarbeiteten batch von rubberman ausnahmslos alle(!!!) dateien bis auf 3, die kein bild hatten, korrekt in die eigenen, neuen verzeichnisse geschoben und umbenannt wurden. die batch lief wegen der menge an daten ca. 2 minuten lang, aber das ergebnis ist das, wie ich es mit der hand nur in monatelanger fleißarbeit hinbekommen konnte :D

sorry SuperMari0 ich hab somit keine daten mehr, die ich verarbeiten muss :D
Bitte warten ..
Mitglied: SchoSeb
15.07.2009 um 22:02 Uhr
Auch noch ma guten Abend ^^

kein Stress hauptsache es funktioniert.
Ich hab jedenfalls wieder was in VBScript gelernt, des is doch auch was

Also dann schönen Abend noch
Mit freundlichen Grüßen Sebastian
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

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

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

Frage von Haures zum Thema Windows Server ...