Windows Skript für Dateiumbenennung

Hallo,

Ich hoffe hier bin ich richtig.
Ich habe die letzten Jahre Linux verwendet und benutze nun wieder Windows. Meine Linuxumgebung habe ich mir schön mit Shell-Scripten eingerichtet und nun weiß ich nicht mehr weiter.
Im Internet hab ich selbst nach wirklich intensiver Recherche keine gute Anleitung für den Umgang mit Windows cmd-Befehlen gefunden.

Mir geht es zunächst um eine einfache Umbenennung von Dateien mit regelmäßigem Dateinamenspräfix:

aus „ab#xyz.doc“ wird z.B. „Peter Müller#xyz.doc“ oder
aus „ac#def.doc“ wird z.B. „def.doc“

In Unix ging das mit einer einfachen for-Schleife…und wie geht das nun in Windows???

Danke für Eure Hilfe,
Martin

P.S: Für eine gute Anleitung im Netz, die ich nicht gefunden habe wäre ich ebnefalls sehr dankbar!

aus „ac#def.doc“ wird z.B. „def.doc“

In Unix ging das mit einer einfachen for-Schleife…

In UNIX sieht das ganze dann übrigens so aus:

for i in ac#*; do mv „$i“ „${i/ac#/}“; done

Hallo Martin,

Mir geht es zunächst um eine einfache Umbenennung von Dateien
mit regelmäßigem Dateinamenspräfix:

aus „ab#xyz.doc“ wird z.B. „Peter Müller#xyz.doc“ oder
aus „ac#def.doc“ wird z.B. „def.doc“

In Unix ging das mit einer einfachen for-Schleife…und wie
geht das nun in Windows???

da geht das auch. Und aus
„ab#xyz.doc“ „Peter Müller#xyz.doc“ zu machen und aus
„ac#def.doc“ „Peter Müller#def.doc“ zu machen geht.

Es geht auch aus
„ab#xyz.doc“ „xyz.doc“ zu machen und aus
„ac#def.doc“ „def.doc“ zu machen.

Nur, woher weiß der Code wie jetzt zu handeln ist? Mir noch sehr unklar.

Gruß
Reinhard

Hallo Reinhard,

da geht das auch. Und aus
„ab#xyz.doc“ „Peter Müller#xyz.doc“ zu machen und aus
„ac#def.doc“ „Peter Müller#def.doc“ zu machen geht.

Es geht auch aus
„ab#xyz.doc“ „xyz.doc“ zu machen und aus
„ac#def.doc“ „def.doc“ zu machen.

Entschuldigung, aa hab ich mich zu unpräzise ausgedrückt. Ich möchte entweder die eine Variante machen ODER die andere, also 2 unterschiedliche Skripte.
Die wichtigere Variante ist allerdings aus
„ab#xyz.doc“ „xyz.doc“ zu machen und aus
„ac#def.doc“ „def.doc“ zu machen und so weiter.

Vielen Dank,
Martin

Hallo Martin,

Mir geht es zunächst um eine einfache Umbenennung von Dateien
mit regelmäßigem Dateinamenspräfix:

wie
geht das nun in Windows???

Ant Renamer ist ein Windows-Tool, das solche Sachen kann und das auch über die Kommandozeile ansteuerbar ist.
http://www.antp.be/software/renamer
http://ant-renamer.software.informer.com/
Um Details musst Du dich aber selbst kümmern, ich bin Linux-User und kann dir zu Batch-Dateien nicht viel sagen.
Höchstens, daß es awk und sed auch für Windows gibt, die könntest Du mit deinen Linux-Kenntnissen also auch für solche Aufgaben benutzen.

Viele Grüße
Marvin

Hallo

„ab#xyz.doc“ „xyz.doc“ zu machen und aus
„ac#def.doc“ „def.doc“ zu machen und so weiter.

for /F "tokens=1\* delims=#" %%i in ('dir /B') do mv "%%i#%%j" "%%j" 

Benennt alle Dateien im Ordner in dem die bat ausgeführt wird, die die Form abc#test in test um, dh. alles was nach dem ersten Rautezeichen steht ist der neue Dateiname. Wenn du die Zeile direkt in cmd eingeben willst nur einfache % Zeichen verwenden, also %i statt %%i.
Liebe Grüße.
Alex

Hallo Alex,

for /F „tokens=1* delims=#“ %%i in (‚dir /B‘) do mv
„%%i#%%j“ „%%j“

Benennt alle Dateien im Ordner in dem die bat ausgeführt wird,
die die Form abc#test in test um, dh. alles was nach dem
ersten Rautezeichen steht ist der neue Dateiname. Wenn du die
Zeile direkt in cmd eingeben willst nur einfache % Zeichen
verwenden, also %i statt %%i.

Ich dreh hier noch durch…
Das geht leider nicht. Ich hab mir schon im Netz die Syntax der For-Schleife und etliche Dateiumbenennungsskripte angeguckt und nichts klappt. Leider auch dein Skript nicht.

Vielleicht liegt es auch an mir und ich mach irgendetwas falsch!

Also meine Vorgehensweise:

Ich erstelle mit einem beliebigen Editor ein Textdokument, welches als Dateiendung etweder .cmd oder .bat hat.
Der Inhalt ist schlicht

for /F "tokens=1\* delims=#" %%i in ('dir /B') do mv
"%%i#%%j" "%%j" 

Das ganze wird dann in dem Ordner abgespeichert, in dem es auch ausgeführt werden soll.
Doppelklick drauf und nichts passiert (es sind natürlich solche umzubenennende Dateien vorhanden!).

Wenn ich diesen Befehl in der PowerShell ausführe kommt übrigends folgende Fehlermeldung:

PS C:\Users\Martin> cd C:\Users\Martin\Documents\test
for /F „tokens=1* delims=#“ %%i in (‚dir /B‘) do mv „%%i#%%j“ „%%j“
Missing opening ‚(‘ after keyword ‚for‘.
At line:2 char:5

Missing closing ‚)‘ after expression in ‚for‘ statement.
At line:2 char:68

Missing statement body in for loop.
At line:2 char:68

Vielen Dank schonmal,
Martin

for /F „tokens=1* delims=#“ %%i in (‚dir /B‘) do mv
„%%i#%%j“ „%%j“

Das geht leider nicht. Ich hab mir schon im Netz die Syntax
der For-Schleife und etliche Dateiumbenennungsskripte
angeguckt und nichts klappt. Leider auch dein Skript nicht.

Hallo Martin,

speichere das Nachfolgende per Texteditor in eine Datei mit der Endung .vbs und stelle sie in das entsprechende Verzeichnis und rufe sie dort auf.
Vorher im Code noch den Pfad anpassen.

Dim fso, files, file
Set fso = CreateObject("scripting.FileSystemObject")
Set files = fso.getFolder("C:\Test").files
For Each file In files
 If file.Name Like "\*.doc" Then
 file.Name = Mid(file.Name, InStr(file.Name, "#")+1)
 End If
Next file

Gruß
Reinhard

Hallo Reinhard,

Dim fso, files, file
Set fso = CreateObject(„scripting.FileSystemObject“)
Set files = fso.getFolder(„C:\Test“).files
For Each file In files
If file.Name Like „*.doc“ Then
file.Name = Mid(file.Name, InStr(file.Name, „#“)+1)
End If
Next file

Auch das funktioniert leider nicht!
Es öffnet sich eine Fehlermeldung, die Folgendes beinhaltet:

Windows Script Host
Skript: C:(und dann der Pfad zum Skript)
Zeile: 8
Zeichen: 6
Fehler: Anweisungsende erwartet
Code: 800A0401
Quelle: Kompilierungsfehler in Microsoft VBScript

Gruß,
Martin

Auch das funktioniert leider nicht!
Es öffnet sich eine Fehlermeldung, die Folgendes beinhaltet:

Hallo Martin,

sorry, bin in VBS sehr neu, vieles etwas anders als in Vba.
VBS mag kein
Next Variable
es lnagt ihm ein
Next.
Like kennt VBS auch nicht.

Probiers mal wie nachfolgend.
Problem ist noch, wenn der neue dateiname dort schon existiert kommt eine Fehlermeldung deshalb.

Vielleicht dazu dann noch eine If-Anweisung in die andere reinschreiben, so etwa

if dir(„C:\Test“ & Mid(…)) = „“ then

oder

if not fileexists(Mid(…)) Then

Dim fso, files, file
Set fso = CreateObject("scripting.FileSystemObject")
Set files = fso.getFolder("C:\Test").files
For Each file In files
 if right(file.name,4) = ".doc" then
 file.name = Mid(file.Name, InStr(file.Name, "#")+1)
 end if
Next

Gruß
Reinhard

Hallo,

Dim fso, files, file
Set fso = CreateObject(„scripting.FileSystemObject“)
Set files = fso.getFolder(„C:\Test“).files
For Each file In files
if right(file.name,4) = „.doc“ then
file.name = Mid(file.Name, InStr(file.Name, „#“)+1)
end if
Next

Jetzt kommt keine Fehlermeldung mehr, aber die Dateien werden auch nicht umbenannt…

Gruß,
Martin

Jetzt kommt keine Fehlermeldung mehr, aber die Dateien werden
auch nicht umbenannt…

Hallo Martin,

ich habe jetzt das fileexists eingebaut. Bei mir wird umbenannt.
Steht die vbs auch im richtigen Verzeichnis?

Dim fso, files, file
Set fso = CreateObject("scripting.FileSystemObject")
Set files = fso.getFolder("C:\Test").files
For Each file In files
 if right(file.name,4) = ".doc" then
 if not fso.fileexists( "c:\Test\" & Mid(file.Name, InStr(file.Name, "#")+1)) then
 file.name = Mid(file.Name, InStr(file.Name, "#")+1)
 end if 
 end if
Next

Gruß
Reinhard

Hallo,

werden immernoch nicht umbenannt…

Weißt du zufällig, ob es eine Möglichkeit gibt, Unix Bash Shell Scripts unter Vista Home Premium zum Laufen zu bekommen?

Gruß,
Martin

Hallo.

werden immernoch nicht umbenannt…

Weißt du zufällig, ob es eine Möglichkeit gibt, Unix Bash
Shell Scripts unter Vista Home Premium zum Laufen zu bekommen?

Du kannst dir cygwin (http://www.cygwin.com/) installieren, dann hast du eine bash mit allen möglichen Tools. Da sollten auch die Skripte laufen.

Sebastian.

Hallo,

for /f „tokens=2 delims=#“ %a in (‚dir /b ac#*.*‘) do ren
ac#%a %a

funktioniert!

Vielen Dank an alle,
Martin