sk1412
Goto Top

Kopieren - bei doppelten Dateinamen - umbenennen

Liebe Admin-Freunde face-smile

ich habe folgende Frage , bei der ich keine Lösung im Archiv gefunden habe.
Ich erstelle Aufnahmen mit dem Handy, die als .amr Dateien gespeichert werden.
Dieser erhalten automatisch einen Datei-Namen mit einer fortlaufenden Nummer
z.B. clip000.amr , clip001.amr clip002.amr usw
auf den Handy änder ich die Dateinamen teilweise mit Ergänzungen
z.B. clip000 dies ist ein test.amr
teilweise änder ich aber nichts.
Wenn ich die Dateien auf meinen PC kopiert habe (ich erstelle dafür immer
ein neues Verzeichnis) z.B. mit Datum
d:\20111001 für alle Dateien, die bis zum 01.10.2011 erstellt wurden
d:\20111009 für alle Dateien vom 2.10.2011 bis 09.10.2011
tauchen natürlich "doppelte" Dateinamen in den beiden Verzeichnissen auf
z.B. die nicht umbenannte Datei clip003.amr

Jetzt möchte ich ALLE Dateien aus ALLEN Verzeichnissen
in ein separates Verzeichnis kopieren.
Beim Kopieren sollen, wenn ein Dateiname doppelt vorhanden ist
z.B. clip003.amr
diese Datei umbenannt werden und beispielweise eine
Leerzeichen und eine Zahl
ergänzt werden
clip003 1.amr
Falls noch einmal eine Datei aus einem anderen Verzeichnis
mit dem Namen clip003.amr vorkommt
soll dieser Dateiname mit einer neuen Ergänzung
z.B. clip003 2.amr
geändert und dann kopiert werden.
Was ergänzt werden soll, ist mir eigentlich egal. Vielleicht gibt es Sinn,
z.B. das Erstellungsdatum in der Form JJJMMTT hhmmss zu ergänzen
(dann ist der Dateiname ja EINDEUTIG)
clip003 201110902 120503.amr

Ich hoffe, meine Problem klar dargestellt zu haben
und freu mich auf einen Tip, wie man so etwas lösen kann.

Besten Gruß
Stefan

Content-Key: 174465

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: min6zeichen
min6zeichen 11.10.2011 um 13:22:09 Uhr
Goto Top
Vielleicht ist meine Lösung zu einfach gedacht:
Windows 7 fragt nach, ob es eine Datei ersetzen soll, oder ein "(2)" dranhängen soll.
Um alle Dateien in allen Verzeichnissen auszuwählen benutze ich immer die Windows Suche im Explorer Fenster. oben rechts. Gibt man dort ein Sternchen ein, bekommt man alle Dateien in allen Ordnern angezeigt.
Zusammen ergibt das:
per Windows Explorer auf D:\ gehen
oben rechts nach * suchen
strg-a
strg-c
Zielordner wählen
strg-v
auswählen, dass man die Entscheidung für alle weiteren Dateien auch nehmen will und das "beide dateien behalten" anklicken.
Mitglied: sk1412
sk1412 11.10.2011 um 13:27:52 Uhr
Goto Top
Hallo
Danke für den Lösungsansatz!
Nur was macht Windows 7, wenn die Datei ein 2. oder ein drittes Mal vorhanden ist.
Dann müsste die (2) durch eine (3) usw ersetzt werden.
Macht das Windows7 auch so ?
Habe leider hier nur einen Rechner mit WindowsXP, und dort würden die Dateien überschrieben face-sad
Und das will ich auf keinen Fall !
Gruß

Zitat von @min6zeichen:
Vielleicht ist meine Lösung zu einfach gedacht:
Windows 7 fragt nach, ob es eine Datei ersetzen soll, oder ein "(2)" dranhängen soll.
Um alle Dateien in allen Verzeichnissen auszuwählen benutze ich immer die Windows Suche im Explorer Fenster. oben rechts.
Gibt man dort ein Sternchen ein, bekommt man alle Dateien in allen Ordnern angezeigt.
Zusammen ergibt das:
per Windows Explorer auf D:\ gehen
oben rechts nach * suchen
strg-a
strg-c
Zielordner wählen
strg-v
auswählen, dass man die Entscheidung für alle weiteren Dateien auch nehmen will und das "beide dateien
behalten" anklicken.

Mitglied: Skyemugen
Skyemugen 11.10.2011 um 13:43:00 Uhr
Goto Top
Zitat von @sk1412:
Hallo
Danke für den Lösungsansatz!
Nur was macht Windows 7, wenn die Datei ein 2. oder ein drittes Mal vorhanden ist.
Dann müsste die (2) durch eine (3) usw ersetzt werden.
Macht das Windows7 auch so ?

Jupp, allerdings weiß ich nicht, ob das auch per batch geschehen würde face-wink

Anyway, ich habe derzeit keine Luft für Batchskripteleien aber unsere Suchfunktion sollte dir so ziemlich alles bieten, was du dafür benötigst, wobei die Abfrage ob schon existiert + Abfrage, ob rename schon existiert + Abfrage ... halbe Endlosschleife in der Abhandlung face-wink unschön aber machbar und durchaus nicht zum ersten Mal hier genutzt.

greetz André
Mitglied: der-blob
der-blob 11.10.2011 um 14:32:23 Uhr
Goto Top
tagchen

ist zwar keine elgante lösung.... ich weis es gibt _BESSERE_ lösung aber auf die schnelle hab ich das hier.. - es klatscht bei jeder datei das Erstellungsdatum hinten dran.


@echo off
set "Folder=D:\dummys\rename"  
set dateiende=vbs
pushd "%Folder%"  
for /f "eol=~ tokens=1* delims=~" %%i in ('dir /b /s *.%dateiende%') do call :arbeite "%%i"  
popd
goto :eof
:arbeite
set "datei=%~dp1%~n1"  
echo bin bei datei: %~dp1%~n1
for /f "delims= " %%p in ('dir %datei%.%dateiende% /t:c^|findstr /i /l "%~n1.%dateiende%"') do rename "%datei%.%dateiende%"  "%~n1_%%p.%dateiende%"  
€: letzte zeile gibts bei google ;)


dann entweder per suche / copy alles zusammen klatschen, oder nen copy/xcopy/robocopy hinterher jage.


Gruß Blob
Mitglied: bastla
bastla 11.10.2011, aktualisiert am 27.07.2015 um 00:06:21 Uhr
Goto Top
... und um Skyes Ansatz etwas zu konkretisieren:
@echo off & setlocal
set "Ziel=D:\Zusammenfassung"  

md "%Ziel%" 2>nul  
for /d %%i in (D:\20*) do for /f "delims=" %%a in ('dir /s /b "%%i\*.amr"') do call :ProcessFile "%%a"  
goto :eof

:ProcessFile
set "Zusatz="  
set /a Nr=2
:Loop
if not exist "%Ziel%\%~n1%Zusatz%%~x1" copy %1 "%Ziel%\%~n1%Zusatz%%~x1">nul & goto :eof  
set "Zusatz= %Nr%"  
set /a Nr+=1
goto :Loop
Mit der hier verwendeten Zeile 13 sollte (ist nämlich ziemlich ungetestet face-wink) bei Bedarf als Zusatz ein Leerzeichen + eine laufende Nummer angefügt werden (wobei die Nummer 1 nicht vergeben wird, also im Fall des Falles die Dateien "clip003.amr", clip003 2.amr", clip003 3.amr" etc entstehen würden).

Um das Schema des Zusatzes zu variieren, könnte dieser zB per
set "Zusatz=(%Nr%)"
in Klammern angefügt werden (Leerzeichen davor nach Wunsch ergänzen) oder auch etwa mit
:ProcessFile
set "Zusatz="  
set /a Nr=10002
:Loop
if not exist "%Ziel%\%~n1%Zusatz%%~x1" copy %1 "%Ziel%\%~n1%Zusatz%%~x1">nul & goto :eof  
set "Zusatz=_%Nr:~-3%"  
set /a Nr+=1
goto :Loop
immer als dreistellige Zahl (mit führenden Nullen) nach einem "_" hinzugefügt werden ...

Zu beachten wäre noch, dass wegen der Maske "20*" alle Ordner in "D:\", deren Name mit "20" beginnt (sowie deren ev Unterordner), als Quellen erfasst werden (und daher der Zielordner, falls er ebenfalls in "D:\" liegen sollte, keinesfalls ebenfalls mit "20..." benannt werden sollte).

Grüße
bastla
Mitglied: bastla
bastla 11.10.2011 um 21:24:11 Uhr
Goto Top
@der-blob
Da es vermutlich auch das Änderungsdatum tun würde (und dieses wahrscheinlich auch aussagekräftiger als das Erstellungsdatum, das ja nur den Zeitpunkt der Kopie auf den Rechner widerspiegelt, wäre), könntest Du das über "%~t1" erhalten (müsstest aber zumindest noch den ":" aus der Uhrzeit eliminieren, oder besser, eine Umformung auf zB "JJJJ-MM-TT_HHMM" vornehmen) ...
set "datei=%~dp1%~n1"
ließe sich auch noch zu
set "datei=%~dpn1"
komprimieren

Grüße
bastla
Mitglied: der-blob
der-blob 12.10.2011 um 00:22:04 Uhr
Goto Top
Morgen / abend/ Nacht, was auch immer ;)


Das mit der erstellung auf den Rechner stimmt, habe ich in diesem moment garnicht dran gedacht. Aber dürfe theoretisch kein problem darstellen, da die daten schon "teilweise" strukturiert sind in den entsprechenden ordnern, und ich denke mal es immer zu den entsprechenden Daten "aktualisiert" wurde. Aber am aussagekräftigsten ist natürlich Bearbeitungs Datum / Zeit
.

Aber ich sagte ja es gibt eine elegantere / bessere lösung.

Und für meine begriffe bin ich mit meiner "dirty" lösung zufrieden ;) bin ja auch kein Batch Crack wie man anderer hier ;)

so und nun Adee mein Urlaub hat vor 20 Minuten begonnen :D