peiker
Goto Top

Batch um Dateien mit unregelmäßigen Namen und dazu zweite Datei mit nur anderer Endung in neues Verzeichnis zu verschieben

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 face-smile

Content-Key: 120472

Url: https://administrator.de/contentid/120472

Printed on: April 18, 2024 at 00:04 o'clock

Member: rubberman
rubberman Jul 14, 2009 at 22:44:14 (UTC)
Goto Top
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.
@echo off &setlocal

:: Dein Verzeichnis (anpassen):
set folder=c:\test

pushd "%folder%" 2>nul  

if errorlevel 1 (
 pause>nul|set /p "=Pfad nicht gefunden "  
 goto :eof
)

for /f "tokens=*" %%i in ('dir /a-d /b /on *.jpg *.bmp *.gif *.png') do call :sub "%%i"  
for /f "tokens=*" %%j in ('dir /a-d /b /on') do move "%%j" ".\%%~nj\%%j" 2>nul  
popd
echo.
pause>nul|set /p "=Fertig "  
goto :eof

:sub
if "%before%"=="%~n1" (  
 move %1 ".\%~n1\folder%~x1"  
) else (
 md "%~n1"  
 move %1 ".\%~n1\folder%~x1"  
)
set "before=%~n1"  
goto :eof
Falls die Ausgangsdatei nicht einer der geposteten Bildformate entspricht, bitte vorher noch die Dateiendung in der FOR Schleife hinzufügen.
Member: SchoSeb
SchoSeb Jul 14, 2009 at 23:55:34 (UTC)
Goto Top
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 face-smile
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 ;)

Mfg Sebastian
Member: peiker
peiker Jul 15, 2009 at 06:09:33 (UTC)
Goto Top
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 face-smile


@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!
Member: rubberman
rubberman Jul 15, 2009 at 07:10:40 (UTC)
Goto Top
@peiker
Ist doch eigentlich kein Problem das noch gerade zu biegen. Gib mir doch einfach mal die Dateiendung der Hauptdatei(en).
Member: peiker
peiker Jul 15, 2009 at 07:29:15 (UTC)
Goto Top
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 face-smile
Member: rubberman
rubberman Jul 15, 2009 at 08:25:26 (UTC)
Goto Top
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.
Member: peiker
peiker Jul 15, 2009 at 08:33:08 (UTC)
Goto Top
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! face-smile so ists perfekt und du hast mir definitiv aus dem chaos rausgeholfen! face-smile
Member: rubberman
rubberman Jul 15, 2009 at 09:59:40 (UTC)
Goto Top
Gern geschehen. Melde dich einfach nochmal, wenn irgendwas nicht klappt (oder vielleicht auch wenns klappt face-wink ).

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.
Member: SchoSeb
SchoSeb Jul 15, 2009 at 18:07:38 (UTC)
Goto Top
Hallo nochmal face-smile

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.

folder = "C:\test\"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set fsoFolder = fso.GetFolder(folder)
For Each fsoFile In fsoFolder.Files
	
	on error resume next
		
	' Filename ohne Endung in Variable schreiben  
	filename = fso.getBaseName(fsoFile)
	' Endung in Variable speichern  
	ext = fso.GetExtensionName(fsoFile)
		
	' Datei umbennen, da sonst bei Dateien ohne Endung kein   
	' Ordner erstellt werden kann  
	fsoFile.name = "folder." + ext  
	
	' Falls der Ordner noch nicht vorhanden ist wird er erstellt  
	if not fso.folderExists(folder & filename) then
		fso.CreateFolder(folder & filename)
	End If
	
	' Datei in den Ordner verschieben  
	dest_path = folder & filename & "\"  
	fso.MoveFile fsoFile, dest_path

Next
Set fso = Nothing
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
Member: peiker
peiker Jul 15, 2009 at 18:24:46 (UTC)
Goto Top
guten abend auch face-smile

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 face-smile ich hab somit keine daten mehr, die ich verarbeiten muss :D
Member: SchoSeb
SchoSeb Jul 15, 2009 at 20:02:06 (UTC)
Goto Top
Auch noch ma guten Abend ^^

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

Also dann schönen Abend noch
MfG Sebastian