Discussion:
Dateien per Batch umbenennen Quelle eine Textdatei
(zu alt für eine Antwort)
Heiko Rompel
2010-06-03 13:30:17 UTC
Permalink
Moin,

in einer Textdatei steht folgendes:

Dateiname Info1|Info2|Info3|Info4

Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende
Datei "Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis
Info4 ohne "|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.

Geht so etwas mittels Batch?

MfG
Heiko
Jens Fittig
2010-06-03 14:26:58 UTC
Permalink
Post by Heiko Rompel
Dateiname Info1|Info2|Info3|Info4
Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende
Datei "Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis
Info4 ohne "|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.
Geht so etwas mittels Batch?
Nur mit extremen Klimmzügen und zusätzlichen Tools

Da schreibst du leichter ein VBS.
Matthias Tacke
2010-06-03 16:15:17 UTC
Permalink
Post by Jens Fittig
Post by Heiko Rompel
Dateiname Info1|Info2|Info3|Info4
Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende
Datei "Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis
Info4 ohne "|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.
Geht so etwas mittels Batch?
Nur mit extremen Klimmzügen und zusätzlichen Tools
Da schreibst du leichter ein VBS.
Sorry Jens,
das ist Lötzinn.

Ich gehe mal von CMD.exe in einem neueren Windows aus.

Wenn Dateiname keine Leer- oder Sonderzeichen &|<> enthält und
es exakt vier Infofelder sind, reicht dieser Einzeiler (Umbrüche
durch das Mailprogramm bitte reparieren )

for /f "tokens=1-5 delims=| " %A in (textdatei.txt) do @For %F in
(%A.*) Do @Echo Ren %F "%B%C%D%E%~xF"

Der Befehl enthält ein Echo und zeigt die Ren-Befehle nur an,
zum "Scharfmachen" bitte das Echo entfernen.


HTH

Gruß
Matthias
Dirk Wolfgang Glomp
2010-06-30 05:57:38 UTC
Permalink
Post by Matthias Tacke
Post by Jens Fittig
Post by Heiko Rompel
Dateiname Info1|Info2|Info3|Info4
Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende
Datei "Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis
Info4 ohne "|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.
Geht so etwas mittels Batch?
Nur mit extremen Klimmzügen und zusätzlichen Tools
Da schreibst du leichter ein VBS.
Sorry Jens,
das ist Lötzinn.
Ich gehe mal von CMD.exe in einem neueren Windows aus.
Wenn Dateiname keine Leer- oder Sonderzeichen &|<> enthält und
es exakt vier Infofelder sind, reicht dieser Einzeiler (Umbrüche
durch das Mailprogramm bitte reparieren )
Der Befehl enthält ein Echo und zeigt die Ren-Befehle nur an,
zum "Scharfmachen" bitte das Echo entfernen.
Aber auch mit einem älteren DOS mit Command.com kann man in einer
Batchdatei passende Opcodes eintragen die eine temporäre Com-Datei erzeugt
die dann angesprungen wird und alles erledigt, ganz ohne zusätzliche Tools.
Herbert Kleebauer hat es gezeigt wie es geht. Alternativ kann man aber auch
debug.exe verwenden und entsprechende Mnemonics aus der Batchdatei
übergeben und von debug.exe eine vergleichbare Com-Datei erzeugen lassen.
Alles mit Boardmitteln.

Dirk
Stefan Reuther
2010-06-03 16:37:55 UTC
Permalink
Post by Heiko Rompel
Dateiname Info1|Info2|Info3|Info4
Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende
Datei "Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis
Info4 ohne "|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.
Geht so etwas mittels Batch?
Falls es sich nicht um MS-DOS, sondern Windows NT handelt, ja.
@echo off
for /f "tokens=1,*" %%i in (textdatei.txt) do call :doit "%%i" "%%j"
goto :eof

:doit
set oldname="%~1"
set newname="%~2"
for %%A in (%oldname%.*) do ren "%%A" %newname:|= %%%~xA

C:\> dir
[...]
03.06.2010 18:34 60 textdatei.txt
03.06.2010 18:34 203 batch.bat
03.06.2010 18:35 0 dateiname.foo
03.06.2010 18:35 0 dateiname.bar
03.06.2010 18:35 0 wasanderes.txt

C:\> type textdatei.txt
dateiname info1|info2|info3|info4
wasanderes egal|auch egal

C:\> batch

C:\> dir
[...]
03.06.2010 18:34 60 textdatei.txt
03.06.2010 18:34 203 batch.bat
03.06.2010 18:35 0 egal auch egal.txt
03.06.2010 18:35 0 info1 info2 info3 info4.foo
03.06.2010 18:35 0 info1 info2 info3 info4.bar


Unter echtem DOS geht das nicht ohne externe Tools (allerdings bekommst
du da auch nicht "info1 info2 info3 info4" in einen Dateinamen).


Stefan
Dirk Wolfgang Glomp
2010-06-30 06:00:31 UTC
Permalink
Unter echtem DOS geht das nicht ohne externe Tools.
Natürlich geht es auch mit einem echtem DOS ganz ohne externe Tools.
Siehe dazu Herbert Kleebauers Batchdateien und den darin enthaltenen
Opcodes.

Dirk
Stefan Reuther
2010-06-30 17:16:51 UTC
Permalink
Post by Dirk Wolfgang Glomp
Unter echtem DOS geht das nicht ohne externe Tools.
Natürlich geht es auch mit einem echtem DOS ganz ohne externe Tools.
Siehe dazu Herbert Kleebauers Batchdateien und den darin enthaltenen
Opcodes.
Natürlich kommt man auch "mit einem Schweizer Messer" über den großen
Teich nach Amerika. Man muss nur einen Baum umsägen, daraus ein Boot
schnitzen, ein Segel dran befestigen und etwas Glück mit dem Wetter haben.

Nur würde ich das nicht ausdrücken als "man kommt mit einem Schweizer
Messer über den Ozean".


Stefan
Dirk Wolfgang Glomp
2010-07-03 05:31:38 UTC
Permalink
Post by Stefan Reuther
Post by Dirk Wolfgang Glomp
Unter echtem DOS geht das nicht ohne externe Tools.
Natürlich geht es auch mit einem echtem DOS ganz ohne externe Tools.
Siehe dazu Herbert Kleebauers Batchdateien und den darin enthaltenen
Opcodes.
Natürlich kommt man auch "mit einem Schweizer Messer" über den großen
Teich nach Amerika. Man muss nur einen Baum umsägen, daraus ein Boot
schnitzen, ein Segel dran befestigen und etwas Glück mit dem Wetter haben.
Nur würde ich das nicht ausdrücken als "man kommt mit einem Schweizer
Messer über den Ozean".
Kapitän, die Manschafft erzählt Seemansgarn und meutert. Beim
Klabautermann diese Landratten wissen nicht das auf unserer Werft auch
hochseetaugliche Schnellboote gebaut werden können mit denen man jeden
Ozean überqueren kann. Leinen los wir gehen auf große Fahrt. Ahoi Kapitän.

Dirk

Ludwig M
2010-06-30 00:23:38 UTC
Permalink
Hallo Heiko,
Post by Heiko Rompel
Dateiname Info1|Info2|Info3|Info4
Ich möchte jetzt die im gleichen Verzeichnis wie die Textdatei liegende Datei
"Dateiname" umbenennen und zwar soll der neue Name aus Info1 bis Info4 ohne
"|" bestehen.
Die Endung der Datei (die nicht in Dateiname) enthalten ist, soll gleich
bleiben.
Zwar nicht ganz das Gesuchte, aber IMO lesbarer als die genannten
Win-NT-Skripte könnte ein Turbo-Pascal Programm sein:

PROGRAM Heiko;
const separator ='|';
VAR
control_file: TEXT;
new_fname, control_string, old_fname, rest, next: STRING;
separator_pos, space_pos, i: byte;
BEGIN
reset(control_file, paramstr(1)); (* Name von Kommandozeile *)
read(control_file, control_string);
space_pos := pos(' ', control_string);
old_filename:=copy(control_string, 1, space_pos-1);
new_fname := '';
rest:= copy(control_string, space_pos+1, length(control_string));
FOR I:= 1 TO 3 DO
BEGIN
separator_pos:= pos(separator, rest);
next:= copy(rest, 1, separator_pos - 1);
rest:= copy(rest, separator_pos + 1, length(rest));
concat(new_fname, next)
END;
concat(new_fname, rest);
rename(old_fname, new_fname)
END.

Hier ist aber die Dateiendung noch nicht berücksichtigt. Wenn man in
Turbo-Pascal direkt DOS-Befehle absetzen kann (?), müsste auch das
lösbar sein mit wildcards beim Umbenennen.
Schwieriger wird es, wenn der Name der umzubenennenden Datei
Leerzeichen enthält => mit pos() das letzte Leerzeichen suchen in einer
While-Schleife.
Der Entwurf ist doch etwas lang geraten. Eine Funktion zum Aufspalten
von Zeichenketten in einen linken und rechten Teil um ein Trennzeichen
kann helfen.
Ich gehe davon aus, daß das control_file selbst von einem Programm
erstellt wird, sonst würdest Du ja von Hand umbenennen.
Evt. ist es einfacher, dieses Programm unter die Lupe zu nehmen und zu
ergänzen.
Der Abend war lang, und ich bin schon etwas aus der Übung gekommen -
verbessert mich nötigenfalls bitte.
Ein awk-Hase wäre wohl auch schneller fertig.

Viele Grüße, Ludwig
Heiko Rompel
2010-06-30 04:49:13 UTC
Permalink
Danke,

für Eure Tipps.
Ich habe das Problem jetzt mit einem delphi-Programm gelöst.

Gruß Heiko
Lesen Sie weiter auf narkive:
Loading...