kasimodo
Goto Top

Dateiname bestimmter Dateien eines Ordners mit Zähler erweitern

Ich möchte die Namen aller Dateien (Typ) in einem Ordner durch einen Zähler erweitern!

Eine Lösung habe ich nach langen basteln. Geht dies auch etwas eleganter?
Die Nummerierung soll 0001 -000x sein. Diese sollte man dann vor oder nach den Dateinamen einfügen können!
(durch Anpassen vom Script)

DANKE kasimodo

@echo on & setlocal
setlocal EnableDelayedExpansion
set Verz=%1
set datTyp=%2
rem zum testen festes verzeichnis .\test und dateityp tif
set "Verz=.\test"  
set "datTyp=tif"  
rem Anzahl datei in einem verzeichnis
for /f %%i in ('dir %Verz%\*.%datTyp% ^|find "Datei(en)"') do Set DATANZ=%%i  
if  %DATANZ%!==! goto noFiles

for /l %%i in (1, 1, %DATANZ%) do (
	set /A Zaehler=%%i+10000
	set erw=!zaehler:~1!
	call :make %Verz%\*.%datTyp% !erw!
)
ren %Verz%\*. *.%datTyp%
goto ende

rem ========== make ================
:make
set ext=%2
set neuername=%~n1%
set neuername=%neuername%_%ext%
ren %1 %neuername% 2>nul
goto :eof
rem ======== Ende make =============

:noFiles
echo noFiles
:ende
pause

Content-Key: 115804

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

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 77559
77559 May 11, 2009 at 17:13:26 (UTC)
Goto Top
Hallo kasimodo,

du willst die Anzahl der Dateien eines Typs an den Namen aller dieser Dateien anhängen?

Die Variable ext in der Sub make sollte dann doch besser Count heißen?

Die Bedeutung der For /L Schleife erschließt sich mir nicht so ganz, wenn die mit Zähler 1 durchgelaufen ist, gibt es doch keine Dateien mit der Erweiterung %datTyp% mehr?

Die Zählung kannst du einfacher und von der Sprache unabhängig haben:
for /f %%i in ('dir /B /A-D "%Verz%\*.%datTyp%" ^|find /V /C "" ') do Set DATANZ=%%i

Gruß
LotPings
Member: kasimodo
kasimodo May 11, 2009 at 20:10:20 (UTC)
Goto Top
hallo LotPings

du willst die Anzahl der Dateien eines Typs an den Namen aller dieser Dateien anhängen?

Nein, so war es nicht gedacht. da hab ich mich wohl nicht richtig ausgedrückt. Ich möchte folgendes erreichen:

ab.tif -> ab_0001.tif
cad.tif ->cad_0002.tif
fab.tif -> fab_0003.tif

usw. bis alle TIF im Ordner umbenannt sind!

Die Anzahl der TIF (DATZAHL) aus der ersten FOR-Schleife -> um den Lauf der zweiten FOR-Schleife zu begrenzen.

Mein "TRICK" ->
Nach jedem Durchlauf der zweiten FOR Schleife "verschwindet" eine TIF-Datei (Umbenennen mit anhängen vom Zähler ohne Dateierweiterung) Es wird die nächste (jetzt erste) Datei mit Endung TIF genommen und der Zähler erhöht.
Nachdem alle TIF-Dateien nach dem Lauf der zweiten FOR-Schleife einen Zähler aber dafür keine Erweiterung mehr haben, da werden zu Schluß alle Dateien OHNE Erweiterung nach *.tif umbenannt. (etwas gewagt - es könnten ja auch andere Dateien ohne Endung existieren face-wink )

Da diese "Konstruktion" nicht so elegant ist, darum die Frage wie man es besser lösen könnte. Meine Lösung zum Zähler ist ja auch etwas gewagt -Oder?

Danke im voraus &
vg kasimodo
Mitglied: 77559
77559 May 11, 2009 at 21:02:30 (UTC)
Goto Top
Zitat von @kasimodo:
Da diese "Konstruktion" nicht so elegant ist, darum die Frage wie man es besser lösen könnte. Meine Lösung um Zähler ist ja auch etwas gewagt -Oder?

Was heißt gewagt, unnötig kompliziert.

So einfach kann es sein:
:: AppendCounter.cmd ::::::::::::::::::::::::::::::::::::::::::::::::
@echo off&setlocal
set Verz=%1
set datTyp=%2
Pushd "%Verz%"  
For /f "Tokens=1,* Delims=:" %%i in (  
  'dir /B /A-D "*.%datTyp%" ^|findstr /N "." '  
    ) do Echo Ren "%%~fj" "%%~nj_%%i%%~xj"  
Popd
:: AppendCounter.cmd ::::::::::::::::::::::::::::::::::::::::::::::::

Solange das Echo vor dem Ren steht, wird nur angezeigt was umbenannt würde.

Gruß
LotPings
Member: kasimodo
kasimodo May 11, 2009 at 21:59:35 (UTC)
Goto Top
@77559

Ich habe einen kleinen Moment gebraucht - dann deinen Code verstanden.
Der ist wirklich um einiges einfacher!! face-smile

!! DANKE!!

Darf ich bescheiden noch nachfragen wie man den Zähler (%%i) in eine Ausgabe als vierstelliges Format bekommt. (z.B 0001, 0002 .... 0015 ...0157). Dies ich für mich wichtig. Ich brauche es wegen einer Übergabe der Dateien an ein anders Programm.

Danke im voraus
kasimodo
Mitglied: 77559
77559 May 11, 2009 at 22:25:27 (UTC)
Goto Top
Fast genauso wie bei deiner Version face-wink
:: AppendCounter.cmd ::::::::::::::::::::::::::::::::::::::::::::::::
@echo off&setlocal EnableDelayedExpansion
set Verz=%1
set datTyp=%2
Pushd "%Verz%"  
For /f "Tokens=1,* Delims=:" %%i in (  
  'dir /B /A-D "*.%datTyp%" ^|findstr /N "." '  
    ) do Set /A "Z=10000+%%i"&Echo Ren "%%~fj" "%%~nj_!Z:~-4!%%~xj"  
Popd
:: AppendCounter.cmd ::::::::::::::::::::::::::::::::::::::::::::::::

Gute Nacht!
Member: kasimodo
kasimodo May 11, 2009 at 22:45:04 (UTC)
Goto Top
@77559

Genau so! Sieht doch viel besser aus als meine Lösung!!!!
Und wieder etwas gelernt!

Vielen DANK!

vg kasimodo