Batchdatei - Rename

Hallo,

ich benenne in einer Batchdatei umständlich täglich eine Datei um mit:
ren datei datei.1
ren datei datei.2
usw. bis 100 und dann muss ich immer aufpassen, wenn die Zahl 100 erreicht ist, dass ich diese dann wieder mit einer anderen Endung sichere.
Ich möchte aber den Batchbefehl ändern und zwar so, dass die Folgenummer
sich unendlich von selbst erhöht.
Wer kann mir da den erlösenden Tipp geben.
Vielen Dank im voraus.
Gruß Klaus

Wonach sortierst du denn die Dateien oder ist das egal?

Folgendes kann man machen:

set counter=0
for /R ./ %%f in (\*.\*) do 
(
 set counter=%counter%+1
 ren %%f %%f.%counter%
)

Damit sollte es möglich sein, alle Dateien in einem Verzeichnis zu numerieren. Nicht getestet, also keine Garantie!

Gruss, Omar Abo-Namous

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Klaus,

Ich möchte aber den Batchbefehl ändern und zwar so, dass die
Folgenummer sich unendlich von selbst erhöht.

Das sind ein paar Zeilen in Perl, wenn ich Dein
Anliegen richtig verstanden habe. Hier passiert
Folgendes:

  1. Programmaufruf mit Verzeichnis und Basisnamen

    C:\> perl autonum.pl c:\daten datensatz

  2. das Programm durchsucht „c:\daten“ nach Dateien
    mit dem Muster „.ZAHL“ und bestimmt die höchste Zahl

  3. Das Programm nennt datensatz um in datensatz.ZAHL
    und verabschiedet sich.

        • -8#perl -w
          use strict;
          my $indir =„c:\temp“; # Vorgabe: verzeichnis
          my $infile=„datei“; # Vorgabe: dateiname

Argument-Namen annehmen ( c:\> progname dirname basisname )

($indir, $infile) = ($ARGV[0], $ARGV[1]) if defined $ARGV[1];
$indir = $indir."\" if ($indir !~ /\$/); # \ anhängen

Verzeichnis oeffnen und einlesen (nur bei „Zahl“)

opendir(DIR, $indir) or die „verzeichnisfehler“;
my @flist = grep { /\d$/ } readdir(DIR);

zahlen $z rausziehen und maximum ermitteln

my $z;
foreach (@flist) {$z=(split /./)[1] if ($z- - - - -8

Hallo,
vorab ein großes Dankeschön.
Kann leider erst heute antworten, war gestern den ganzen Tag unterwegs.
Mit Perl kann ich nichts anfangen. Ich wüßte nicht, wie ich was zu machen hätte, deshalb scheint mir die kleine Batchdatei von Omar Abo-Namous nachvollziehbar. Obwohl ich auch hier keinen Erfolg hatte.
Nach der Zeile „for“ erscheint Syntaxfehler nach der nächsten Zeile "Befehl oder Dateiname nicht gefúnden. Bei „ren“ Datei nicht gefunden - %F . Und nach der nächsten Zeile Befehl nicht gefunden. Beim Testen habe ich einmal die umzubenennende Datei „Datei“, „Datei.1“, „F“ und „F.1“ aufgerufen. Aber keine hat etwas gebracht bezw. immer diese Fehlermeldungen. Ich habe auch beim Aufruf der Batchdatei jeweils die Testdatei mit aufgerufen. (im Dos-Fenster) Dann ist noch zu bedenken, dass nicht alle Dateien im Verzeichnis umzubenennen sind, sondern nur die aktuelle Datei ohne Endung in *.1 oder bis *.999.
Was ist daran noch falsch?
Grüße Klaus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

Mit Perl kann ich nichts anfangen. Ich wüßte nicht, wie ich
was zu machen hätte,

  1. Perl installieren (Link im vorigen Posting, linke Spalte, Win-MSI)

  2. Das Perl-Programm in eine Datei ‚autoname.pl‘ reinschreiben
    und im Verzeichnis der Batchdatei unterbringen,

  3. in Deine Batchdatei folgendes reinschreiben:

perl autoname.pl c:\meinverzeichnis meinedatei

  1. Batchdatei starten

Das funktioniert, wenn Deine Daten in c:\meinverzeichnis liegen
und die Dateien meinedatei.1 meinedatei.2 … meinedatei.xyz heissen

deshalb scheint mir die kleine Batchdatei
von Omar Abo-Namous nachvollziehbar. Obwohl
ich auch hier keinen Erfolg hatte.

Die Batchdatei Omars ist zwar richtig, macht
aber etwas anderes, sie nennt alle Dateien,
die keine Endung haben in Dateien mit .nummer um …

Also: Perl installieren und zurücklehnen :wink:

Grüße

CMБ

Hallo,
Danke für den Hinweis, Aber ich will ja genau dieses. Nämlich die Datei ohne Endung in eine Datei mit Endung 1-999.
Ich möchte nicht unhöflich sein, aber eine einfache Konstruktion wie von Omar (auch wenn sie noch nicht funktioniert) erscheint mir plausibler, trotzdem versuche ich in der Zwischenzeit Perl zu installieren.
Grüß von Klaus

Hallo

Mit Perl kann ich nichts anfangen. Ich wüßte nicht, wie ich
was zu machen hätte,

  1. Perl installieren (Link im vorigen Posting, linke Spalte,
    Win-MSI)

  2. Das Perl-Programm in eine Datei ‚autoname.pl‘ reinschreiben
    und im Verzeichnis der Batchdatei unterbringen,

  3. in Deine Batchdatei folgendes reinschreiben:

perl autoname.pl c:\meinverzeichnis meinedatei

  1. Batchdatei starten

Das funktioniert, wenn Deine Daten in c:\meinverzeichnis
liegen
und die Dateien meinedatei.1 meinedatei.2 … meinedatei.xyz
heissen

deshalb scheint mir die kleine Batchdatei
von Omar Abo-Namous nachvollziehbar. Obwohl
ich auch hier keinen Erfolg hatte.

Die Batchdatei Omars ist zwar richtig, macht
aber etwas andere

haben in Dateien mit .nummer um …

Also: Perl installieren und zurücklehnen :wink:

Grüße

CMБ

Hallo,

deshalb scheint mir die kleine Batchdatei
von Omar Abo-Namous nachvollziehbar. Obwohl
ich auch hier keinen Erfolg hatte.

Die Batchdatei Omars ist zwar richtig, macht
aber etwas anderes, sie nennt alle Dateien,
die keine Endung haben in Dateien mit .nummer um …

Das stimmt tatsächlich, ich hatte dich missverstanden. Ich kann heute abend mit einer richtigen Batch-Datei dienen.

Also: Perl installieren und zurücklehnen :wink:

Ich weiss nicht, warum diese Programmiersprache so beliebt ist. Sie ist zwar mächtig, aber die Syntax kann man vergessen…

Gruss, Omar Abo-Namous

Hallo Omar,

Also: Perl installieren und zurücklehnen :wink:

Ich weiss nicht, warum diese Programmiersprache so beliebt
ist. Sie ist zwar mächtig, aber die Syntax kann man
vergessen…

Ja, Perl ist so beliebt wie die Atombombe.

Keiner mag sie besonders, doch aber ohne
sie würde die Welt, so wie wir sie heute
kennen, nicht existieren.

Und - wer sie in den Händen hält, der
gewinnt eine ontologische Omnipotenz …

Es ist recht simpel; bei A und P gilt:

Es gibt Leute/Mächte die über sie ver-
fügen und welche die nicht über sie
verfügen :wink:

Grüße

CMБ

Hallo Klaus,

Danke für den Hinweis, Aber ich will ja genau dieses. Nämlich
die Datei ohne Endung in eine Datei mit Endung 1-999.
Ich möchte nicht unhöflich sein, aber eine einfache
Konstruktion wie von Omar (auch wenn sie noch nicht
funktioniert) erscheint mir plausibler,

Sorry, wenn ich aufdringlich wirkte, aber eine
Aufgabe, wie Du sie geschildert hast, ist etwas
zu komplex für eine einfache Batchdatei. Sicher,
man kann das mit einer Batchdatei lösen,
diese ist jedoch dann alles andere als „einfach“.

trotzdem versuche ich in der Zwischenzeit Perl
zu installieren.

Wie gesagt, es war nur ein Vorschlag von mir,
Du könntest bei dieser Gelegenheit auch relativ
leicht eintragen, was mit Dateien über .100
passieren soll etc.

Perl deshalb, weil man nur ein Paket einmal
installieren muss - und dann geht schon relativ
viel. Man könnte natürlich auch andere Tools
nehmen, z.B. Python oder sogar VBA :wink:

Grüße

CMБ

Hallo CMБ

Bitte, bitte, bitte um Himmelswillen, jede Hilfe, die ich bekommen kann, ist doch durchaus willkommen. Das kann man auch nicht aufdringlich empfinden. Ich habe mich doch gefreut, dass sich überhaupt jemand für mich als Hilfe anbietet. Ich weiss nur das es ein einfacher Befehl sein muss, den ich suche.
Also ich habe täglich eine Datei ohne Endung, welche in eine Datei mit der nächsten freien Endung 1-999 umgenannt werden muß. Also wenn die Endung 22 schon belegt ist, beißt die nächste Endung 23 usw.
und da ich diese Batch aus einer anderen Batch-Datei aufrufe hatte ich mir eine Batch-Datei gebastelt mit 50 Zeilen also von 1-50.
Ich benutze Win98Se.
Freundliche Grüße von Klaus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo klaus,

Also ich habe täglich eine Datei ohne Endung, welche in eine
Datei mit der nächsten freien Endung 1-999 umgenannt werden
muß. Also wenn die Endung 22 schon belegt ist, beißt die
nächste Endung 23 usw.
und da ich diese Batch aus einer anderen Batch-Datei aufrufe
hatte ich mir eine Batch-Datei gebastelt mit 50 Zeilen also
von 1-50.

Ist schon klar. Also zunächst muss
das Verzeichnis nach freien Nummern
durchsucht werden und dann wird
die Datei umbenannt.

Ich benutze Win98Se.

Falls Du wirklich Perl nehmen
würdest, bräuchtest Du zuerst
(wegen Win98) den MSI-Installer:
http://downloads.activestate.com/contrib/Microsoft/M…
und dann das Perl:
http://downloads.activestate.com/ActivePerl/Windows/…

Ich werde aber selber nochmal versuchen, das
mit einer reinen BATCH-Lösung zu schaffen.

Wie dem auch sei: perl ist hier imho einfacher :wink:

Grüße

CMБ

Hallo CMБ
die Batch soll nicht danach suchen, nach dieser Datei, ich editiere sie selbst und weiss wie diese Datei heißt. Ich könnte also die Batch aufrufen mit Parameter Dateiname.
Gruß Klaus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Mahlzeit,

mit einer Batchdatei kannst du das in etwa so lösen:

 @echo off
 for /l %%i in (1, 1, 999) do call :mv %1 %%i%
 set abb=
 goto :eof

 :mv
 if "%abb%"=="TRUE" goto :eof

 set neuername=%~n1%
 set ext=%2%
 set neuername=%neuername%.
 set neuername=%neuername%%ext%
 
 ren %1 %neuername% 2\>nul
 if errorlevel 1 goto :eof

 :weiter
 echo Datei %~dpnx1 wurde zu Datei %neuername% umbenannt
 set abb=TRUE

Was ich allerdings nicht weiß, ist ob Win98se auch diese Variante des Befehls for kennt. Bei Win2000 und XP tut das einwandfrei.

Gruß

Sancho

D a n k e Re^2: Batch
Halle Sancho,
das hat auf Anhieb geklappt. Nochmals vielen Dank.
Gruß Klaus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Sancho,

@echo off
for /l %%i in (1, 1, 999) do call :mv %1 %%i%
set abb=
goto :eof

:mv
if „%abb%“==„TRUE“ goto :eof

set neuername=%~n1%
set ext=%2%
set neuername=%neuername%.
set neuername=%neuername%%ext%

ren %1 %neuername% 2>nul
if errorlevel 1 goto :eof

:weiter
echo Datei %~dpnx1 wurde zu Datei %neuername% umbenannt
set abb=TRUE

Respekt!

Muss ich mir gleich mal abspeichern … :wink:

(Wie lange hast Du daran gefummelt?)

Grüße

CMБ

Mahlzeit,

Respekt!

Danke :smile:

(Wie lange hast Du daran gefummelt?)

15 Minuten - das meiste dafür, eine Abbruchbedingung zu finden. Ich hab aufgegeben (die Batch läuft immer bis 999 durch, auch wenn „abb=TRUE“. Keine Ahnung, wie ich das sonst machen soll :smile:

Gruß

Sancho
der ähnliche Dinge oft machen muß