elektroluke
Goto Top

Automatisches Umbenennen von Dateien beim Kopieren in einen bestimmten Ordner

Hallo Liebe Forenmitglieder,

ich habe mal wieder ein kleines "Problem", welches ich aus eigener Kraft und mit Hilfe von Suchmaschinen nicht gelöst bekomme.

Folgende Ausgangssituation:


Ich habe einen Ordner in dem ich gelegentlich einige JPEG-Dateien hineinkopiere. Da die Dateien die unterschiedlichsten Namen haben und ich etwas Struktur in die Sache bringen möchte, habe ich die kopierten Dateien immer per Hand umbenannt ( 1.JPEG, 2.JPEG, ... N.JPEG).


Meine Wunschvorstellung:


Am liebsten wäre mir ein Tool, dass die Umbenennung automatisch durchführt, sobald eine neue Datei in den besagten Ordner hinein Kopiert wurde. (Die Bilder werden per Drag and Drop in die Ordner geschoben ;))
Dabei soll die vorherigen Nummerierung/Umbenennung beachtet und weitergeführt werden.
(Sprich: ich möchte vermeiden, dass ich jeden Tag wieder bei 1.JPEG anfange)

Ich habe erst daran gedacht mein Ziel mit Hilfe eines Scriptes zu realisieren, aber da die Quellverzeichnisse der Dateien immer unterschiedlich sind und ich nicht erst Bilder in das passende Verzeichnis schieben will, bevor ich das Script aufrufe, hatte ich gehofft, dass ihr mir vielleicht ein Tool empfehlen könnt, welches meinen Anforderungen erfüllt.

Wenn ihr eine Möglichkeit kennt, das auch per Script zu realisieren, bin ich natürlich für alle Vorschläge offen.


Zusätzliche Informationen:

Ich nutze ein Windows XP Pro. SP3


edit:

Wie ihr euch denken könnt, möchte ich damit bezwecken, dass man auf Anhieb erkennt in welcher Reihenfolge die Dateien in diesen Ordner hinein Kopiert wurden.

Wenn noch Unklarheiten bestehen, dann bitte ich um Meldung.

MfG

E-Luke
Kommentar vom Moderator Biber am Jun 24, 2009 um 15:20:39 Uhr
<OT>
Automatisches Umbennen von Dateien beim Kopieren in einen bestimmten Ordner
Running gag counter auf #403 gesetzt
</OT>

Content-Key: 118947

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

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

Mitglied: 77559
77559 Jun 24, 2009 at 12:58:06 (UTC)
Goto Top
Hallo E-Luke,

wie du schon gemerkt hast, ist vermutlich Aufgrund deiner "Anspruchshaltung" noch niemand angesprungen.

Ich tu's auch nicht.
Schau dir doch stattdessen mal diese Tool an joe aka winrename

Gruß
LotPings
Mitglied: 60730
60730 Jun 24, 2009 at 13:25:22 (UTC)
Goto Top
Zitat von @Elektroluke:
Wie ihr euch denken könnt, möchte ich damit bezwecken, dass man auf Anhieb erkennt in welcher Reihenfolge die Dateien in diesen
Ordner hinein Kopiert wurden.

Servus,

dir /TC meinordner\

Liefert dir das ganze - und scripte zum "umbenamsen" ist das das dazugehörige Stichwort für die Suche? - gibts wie Sand am Meer - vorzugsweise von Bastla oder Biber
(die Künstler wurden in Alphabetischer Reihenfolge genannt)

gruß
Member: TsukiSan
TsukiSan Jun 24, 2009 at 15:49:39 (UTC)
Goto Top
Hallo E-Luke,

sicher gibt es Scripte oder Programme dafür.
Aber wie wäre es, sich selber eines zu kreieren?

Ich weiß nicht, wie du dich mit VB6 z.Bsp. auskennst.
Aber deine Thematik "riecht" danach, soetwas mal zu schreiben.

Ich überwache hin und wieder mal einzelne Dateien damit und "backup(e)"
sie so, daß sie eine neue Zahl als Namen bekommen.
Einen Ordner zu überwachen und ggf. neue Dateien nach Datum in die richtige
Reihenfolge umzubennen wäre auch mal eine Idee. Ich denke, daß sich dafür einige User finden ließen.

Gruß
Member: pieh-ejdsch
pieh-ejdsch Jun 24, 2009 at 19:00:13 (UTC)
Goto Top
@ @Elektroluke

werde ich vllt in die "NumberMe" mit einbauen!
Automatische Fortsetzung einer gefundenen Nummerierung.

Das ist im Prinzip möglich mit den umbenamsen und einem Zähler.
das eigentliche Problem ist wieviele Bilder kommen denn maximal in den Ordner hinein?

Hintergrund ist:
benötigst Du Vornullen? wenn die n-Stelligkeit der Zahl überschritten wird, dann bekommt die nächste Zahl eine 1 am anfang und das geht bis zur nächsten n-Stelligkeit gut. danach wird wieder eine 1 am anfang der Zahl gesetzt und so weiter.

Anzeige im Explorer oder anderen Auflistungen:
1. so
01
02
...
10
...
99
100
102
103
...


2. oder möchtest Du so?
001
002
...
099
100
...


3. oder doch so
1
2
...
10
...
99
100

[Reklame]
NumberMe nummeriert Texte mit automatischen Vornullen oder ohne Vornullen.
[/Reklame]

Variante 3. ist

JPG im Angegebenen Ordner nach Erstellungsdatum Erstellungszeit sortieren fortlaufend Nummerieren und bei Neuhinzugefügten jpg mit späteren Erstellungsdatum Zeit die Nummerierung fortsetzen .bat
@echo off
set /p Verz=Bitte Verzeichnis der jpg angeben
if not "%Verz%"=="" if not "%Verz:~-1%"=="\" set "Verz=%Verz%\"  
for /f "tokens=1,*" %%i in ('dir /b /a:-d /t:c /o:d "%Verz%*.jpg"') do call :rename "%%~i" "%%~j"  
goto :eof
:rename
set /a nr + = 1
if "%nr%"=="%~n1" goto :eof  
if "%2"=="" (ren ""%Verz%%1" "%nr% %1") else ren ""%Verz%%1 %2" "%nr% %1 %~2"  
goto :eof
Member: Elektroluke
Elektroluke Jun 25, 2009 at 14:05:32 (UTC)
Goto Top
Hallo,

erstmal danke für eure Antworten.


@ LotPings

Vielen Dank für die Empfehlung.
Ich schaue es mir mal an.


@ Timo


"Umbenamsen" - also danach habe ich wirklich nicht gesucht.
Werde ich gleich nach holen, Danke.


@tsuki San


Zitat von @TsukiSan:
Hallo E-Luke,

sicher gibt es Scripte oder Programme dafür.
Aber wie wäre es, sich selber eines zu kreieren?

Ich bin für alles offen.
Doch über die Herangehensweise war ich mir nicht so im klaren (Mit anderen Worten: Ich hab's manchmal nicht so mit der Logik ;))

Mit VB6 kenne ich mich allerdings gar nicht aus. Aber was nicht ist, kann ja noch werden ;)


@ pieh-ejdsch


Darüber habe ich mir gar keine Gedanken gemacht!
Aber die Vornullen sind eine sehr gute Idee. Ich denke dass man mit 3 Vornullen auf der sicheren Seite ist.

Deine Abfrage nach dem Verzeichnis funktioniert übrigens.
Jetzt muss ich es nur noch hinbekommen, dass er die Dateien auch in das richtige Verzeichnis kopiert und umbenennt.
Aber da forsche ich erst ein mal selber, bevor ich um Rat frage.

Allerdings ist diese Variante nicht ganz so "automatisch", wie ich mir das vorgestellt habe. (aber eventuell eine Alternative)

Dennoch, Vielen Dank!
Member: Elektroluke
Elektroluke Jun 26, 2009 at 11:56:08 (UTC)
Goto Top
So. Ich habe beschlossen, das ganze Schritt für Schritt zu lösen.

Ich habe hier im Forum ein schönes Script von "Bastla" gefunden, welches beim Aufrufen Dateien in einem bestimmten Ordner umbenennt.


Dieses habe ich ein wenig angepasst:
"
echo off & setlocal

set Ordner=D:\test

set "AltTyp=JPEG"

set "NeuTyp=JPEG"

set "NeuName=0"

set /a Nr=1000000

for /f "delims=" %%i in ('dir /b /od "%Ordner%\*.%AltTyp%"') do call :ProcessFile "%Ordner%\%%i"
pause

goto :eof

:ProcessFile

set /a Nr+=1

set "N=%NeuName%%Nr:~-3%.%NeuTyp%"

if exist "%Ordner%\%N%" goto :ProcessFile

echo ren %1 "%N%"

goto :eof

"

Das ganze habe ich als Batch-Datei abgespeichert.
Sobald ich das Script aufrufe bekomme ich folgendes über die Konsole ausgegeben:

"D:\Dokumente und Einstellungen\lukas\Desktop>echo off & setlocal
ren "D:\test\test1.JPEG" "0001.JPEG"
ren "D:\test\test2.JPEG" "0002.JPEG"
Drücken Sie eine beliebige Taste . . ."


Die Dateien werden jedoch nicht umbenannt..

Vielleicht erkennt ihr ja den Fehler auf Anhieb..
Andernfalls werde ich mit meinem Problem mal in eine andere Abteilung vorbeischauen.

Gruß und Dank


edit:

Wenn ich
ren "D:\ie8\test1.jpeg" "0001.JPEG"
manuell in die Konsole eingebe, werden die Dateien umbenannt..
Mitglied: 77559
77559 Jun 26, 2009 at 12:29:14 (UTC)
Goto Top
Hallo Elektroluke.

In der Zeile
Echo off&setlocal
fehlt am anfang das @ um diese Ausgabe zu unterdrücken.

Bastla hat bestimmt einen Hinweis in seiner Batch, das man das "Echo" vor ren entfernen möge wenn die Ausgabe korrekt erscheint. So wird der Befehl nur angezeigt und nicht ausgeführt.

Gruß
LotPings
Member: Elektroluke
Elektroluke Jun 26, 2009 at 12:46:38 (UTC)
Goto Top
Hallo LotPings,


Ja, hat er.
<beschämt auf den Boden schaut>

Vielen Dank, jetzt funktioniert es, wie vorgestellt.


Ich halte auch auf dem laufenden.

Grüße

E-Luke
Member: Elektroluke
Elektroluke Jun 26, 2009 at 17:07:15 (UTC)
Goto Top
Zwischenstand:

Ich habe das ganze jetzt versucht mit einer Endlosschleife zu lösen.

Problem dabei ist natürlich, dass jedes mal wenn die Schleife durchläuft, die bereits umbenannten Dateien erneut umbenannt werden. Also dachte ich mir, es wäre sinnvoll, die umbenannten Dateien in ein Unterverzeichnis zu schieben.

Das Script sieht nun wie folgt aus:


@echo off & setlocal

:marke1

set Ordner=D:\test

set "AltTyp=JPEG"

set "NeuTyp=JPEG"

set "NeuName=0"

set /a Nr=1000000

for /f "delims=" %%i in ('dir /b /od "%Ordner%\*.%AltTyp%"') do call :ProcessFile "%Ordner%\%%i"


:ProcessFile

set /a Nr+=1

set "N=%NeuName%%Nr:~-3%.%NeuTyp%"

if exist "%Ordner%\%N%" goto :ProcessFile

ren %1 "%N%"

move "%Ordner%\%N%" "%Ordner%\test3

#das ist sicherlich nicht die schönste Variante eine kleine Pause zu erzeugen, aber sie erfüllt ihren Zweck#

ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL
ping 127.0.0.1 -n 2 -w 1000 > NUL


goto marke1


Jetzt besteht natürlich ein neues Problem:


Der Zähler startet jedes mal wieder bei 1.


Soll heißen.. Wurde eine umbenannte Datei verschoben (BSP: 001.JPEG) wird die nächste Datei im "Überwachten" Ordner ebenfalls wieder 001.JPEG umbenannt. Wird diese Datei verschoben, überschreibt es die gleichnamige Datei, die bereits zu vor vom Script bearbeitet wurde.


Nun suche ich nach einer Möglichkeit, dem Script klar zu machen, dass er die Nummerierung fortsetzen soll..
Oder gibt es eine Möglichkeit anzugeben, dass alle JPEG-Dateien umbenannt werden sollen, bis auf die dessen Dateiname bereits mit "00" anfangen?
Das würde einiges vereinfachen.

Naja, sobald ich das herausgefunden habe (bzw. es mich jmd heraus finden lässt ;D), soll das Script per Taskplaner bei der Benutzeranmeldung aufgerufen werden.
Kennt jemand den Parameter den ich angeben muss, um das Script im Hintergrund laufen zu lassen?
Meine Suchanfragen waren bisher nicht von erfolg gekrönt.

Gruß

E-Luke
Member: Biber
Biber Jun 26, 2009 at 18:43:04 (UTC)
Goto Top
Moin Elektroluke,

suche mal im Forum nach "batch minimiert" oder "RunABatMinimized".

Da solltest Du schnell of einen der möglichen Oneliner stoßen.

Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Jun 26, 2009 at 19:33:26 (UTC)
Goto Top
das hab ich schon im Code gesehen das deine Dateien erneut umbenannt werden.

Nun suche ich nach einer Möglichkeit, dem Script klar zu machen, dass er die Nummerierung fortsetzen soll..


genau das macht doch meine Version!!

Der Überwachte ordner ist der welcher die neuen jpgs bekommt und nur die neuen werden umbenannt und zwar an der Stelle weiter wo die letzte Nummerierung aufgehört hat. und die anderen bleiben alle in diesem Ordner. sonst bräuchtest Du eine Log, wenn Du die jpgs wieder aus diesem Ordner ziehst oder Du musst noch einen Anderen Ordner zusätzlich Überwachen.

zum minimiert laufen machst Du eine Verknüpfung zur Batch, gibst in den Eigenschaften Ausführen in: Minimiert
an und startes per Taskplaner die Batch.LNK

JPG im Angegebenen Ordner nach Erstellungsdatum Erstellungszeit sortieren fortlaufend Nummerieren und bei Neuhinzugefügten jpg mit späteren ErstellungsdatumZeit die Nummerierung fortsetzen vierstellig zählt aber nur bis 9999 kann aber nochj eingestellt werden .Bat

@echo off
::gib hier Deinen JPG Ordner an welcher umbeziffert werden soll
set "Verz=D:\test"  
::Die umzubenennenden JPGs sollten keine gleiche Nummerierung und Stellenanzahl haben.
::Achtung1 stelle hier mit der Anzahl der "Nullen" Deine Maximale Stellenanzahl ein welche mit Achtung2 auch übereinstimmen muss 
set "nr=10000"  
::die nächste Zeile ist nur relavant für set /p kann aber auch so gelassen werden
if not "%Verz%"=="" if not "%Verz:~-1%"=="\" set "Verz=%Verz%\"  
for /f "tokens=1,*" %%i in ('dir /b /a:-d /t:c /o:d "%Verz%*.jpg"') do call :rename "%%~i" "%%~j"  
goto :eof
:rename
::Achtung2 stelle hier mit der Anzahl der "Neunen" Deine Maximale Stellenanzahl ein was bei Achtung3 auch gemacht werden muss 
if %nr%==19999 exit /b 1
set /a nr + = 1
if %nr:~-4%"=="%~n1" goto :eof  
::Achtung3 Ersetze alle    %nr:~-4%    mit    "%nr:~-Deine Maximale Stellenanzahl%    ein. 
if "%2"=="" (ren "%Verz%%~1" "%nr:~-4%%~x1") else ren "%Verz%%~1%~2" "%nr:~-4%%~x2"  
goto :eof
Member: pieh-ejdsch
pieh-ejdsch Jun 27, 2009 at 13:14:54 (UTC)
Goto Top
Hier ist nochmal die Berichtigte Version

@echo off
::gib hier Deinen Ordner an welcher umbeziffert werden soll
set "Verz=D:\CMD Befehle\0001\"  

::gib Hier den Dateity an welcher umbeziffert werden soll
set "ext=jpg"  
::Die umzubenennenden Dateien sollten keine gleiche Nummerierung und Stellenanzahl haben.

::ACHTUNG-1 stelle hier mindestens soviele "Nullen" ein wie Du unter Achtung3 als Maximale Stellenanzahl eingetragen hast 
set "nr=10000"  
::die nächste Zeile ist nur relavant für set /p kann aber auch so gelassen werden
if not "%Verz:~-1%"=="\" set "Verz=%Verz%\"  
for /f "tokens=1,*" %%i in ('dir /b /a:-d /t:c /o:d "%Verz%*.%ext%"') do call :rename "%%~i" "%%~j"  
goto :eof
:rename

::ACHTUNG-2 die Anzahl der "Neunen" muss mit der Anzahl der "Nullen" unter ACHTUNG-1 Übereinstimmen 
if %nr%==19999 exit /b 1
set /a nr + = 1

::ACHTUNG-3 Ersetze alle    %nr:~-4%    mit    "%nr:~-Deine Maximale Stellenanzahl%    . 
if "%nr:~-4%"=="%~n1" goto :eof  
if "%~2"=="" (ren "%Verz%%~1" "%nr:~-4%.%ext%") else ren "%Verz%%~1 %~2.%ext%" "%nr:~-4%.%ext%"  
goto :eof
Member: Elektroluke
Elektroluke Jun 29, 2009 at 09:04:56 (UTC)
Goto Top
Ich weiß gar nciht, warum ich das Script vorher übersehen habe..
Ich werde es mal testen.
Vielen Dank!

@ Biber.

Danke für den Tipp.
Member: Elektroluke
Elektroluke Jun 29, 2009 at 12:05:03 (UTC)
Goto Top
Noch mal Hallo pieh-ejdsch,

ich habe versucht in das Script eine Endlosschleife einzubauen.

Das Umbenennen funktioniert mit deinem Script wunderbar!
Nun habe ich versucht eine Endlosschleife einzubauen, um das Script den ganzen Tag laufen zu lassen.

Ich als Amateur stell mir das natürlich ganz einfach vor, in dem ich am Anfang des Scriptes ein Label setze und nach Abarbeitung einen Verweis dorthin setze.

Das sieht dann bei mir so aus:

@echo off

:Anfang

<restlicher Teil deines Scriptes>

goto :Anfang

Tja, zu früh gefreut. Das Script beendet sich sobald es durch gelaufen ist.

Ist mein Ansatz falsch oder habe ich das Label vielleicht nur an die falsche stelle gesetzt?

Wenn ich das Script über Konsole starte erhalte ich keinerlei Fehlermeldungen oder Hinweise.


Wohin verweist eigentlich das "goto :eof" ?

Ich vermute fast, dass sich die ganzen "goto"s gegenseitig in Gehege kommen.

Naja, ich werde fleißig weiter testen und komme vielleicht selber hinter das Problem.

Bis dahin: Alles Gute


Gruß E-Luke
Mitglied: 60730
60730 Jun 29, 2009 at 12:20:12 (UTC)
Goto Top
Moin,

wenn

  • "@echo off" als erste Zeile steht - dann ist es mit dem Testen nichts mehr...
  • ein Sprung mit goto :Anfang eingeleitet werden soll - dann muß das Sprungziel auch ::Anfang so deklariert werden.

Ergo:
goto Anfang

Gruß
Member: Elektroluke
Elektroluke Jun 29, 2009 at 12:37:16 (UTC)
Goto Top
Schwere Geburt.

Aber letztendlich ist sie doch noch geglückt. Alles funktioniert jetzt wie gewünscht!

Ich danke allen Beteiligten für ihre Mühen und Geduld und verabschiede mich mit einem großen DANKE SCHÖN!

Beste Grüße

ElektroLuke
Member: pieh-ejdsch
pieh-ejdsch Jun 29, 2009, updated at Oct 18, 2012 at 16:38:32 (UTC)
Goto Top
Ich vermute fast, dass sich die ganzen "goto"s gegenseitig in Gehege kommen.
wie kommst Du denn auf sowas?
Du wirst lediglich den Aufruf der Sprungmarke Anfang
goto :Anfang
an die Falsche Stelle gesetzt haben
schau mal hier Subroutinen Batch How To

@ TimoBeil
•ein Sprung mit goto :Anfang eingeleitet werden soll - dann muß das Sprungziel auch ::Anfang so deklariert werden
diese Weisheit - stimmt so nicht.
goto :1
:::1
echo ich bin bei 3 mal doppelpunkt
pause
{{comment_single_line_remark:1}}
echo ich bin bei 2 mal doppelpunkt
pause
:1
echo ich bin bei 1 mal doppelpunkt
pause
zum Vergleich kannst Du es am Anfang mit goto 1
oder goto ::1
ausprobieren
Sprungmarken :Marke
diese muss um am Zeilenbeginn als Sprungmarke erkannt zu werden immer mit einem Doppelpunkt beginnen ansonsten wird die Zeile als Befehl Eingelesen oder bei mindestens zwei Doppelpunkten Ignoriert.
Im Gegensatz dazu kann man den Doppelpunkt hinter GOTO weglassen.
dieser ist nicht unbedingt erforderlich aber wird meistens der Übersichtlichkeit halber in der Batch hinter GOTO gesetzt.

Gruß Phil
Mitglied: 77559
77559 Jun 29, 2009 at 16:09:26 (UTC)
Goto Top
Hallo Phil,

wenn sogar Elektroluke großzügig über Timos versehentlich reingerutschtes überzählige Doppelpünktchen hinwegsehen kann,
kannst du das doch bestimmt auch face-smile

Gruß
LotPings