schmiddy
Goto Top

Laufender Tag im Jahr und Zähler.

Hallo zusammen,

habe folgende Problemchen...

Habe eine Datei mit dem Namen "kkkA5xxxva520.pm"
kkk steht für den Laufenden Tag im Jahr. Heute für den 20.07.2005 wäre das "201".

Wie mache ich es, dass ich den laufenden Tag bekomme, und Ihn in den Dateinamen einfügen kann?
Gibt es da schon Konvertierungsfunktionen oder muss man sich das alles selbst zusammen basteln?

Wie programmiere ich denn in Batch einen Zähler?
Den Wert des Zählers muß bei jeder Datei inkrementiert werden.
xxx können genutzt werden für den Zähler.
Dachte mir das so, dass man in den Systemvariablen den Wert auf 1 setzt und das bei jedem neuen Tag. Wie mache ich das aber bei einem Neustart?

Bei Neustart kein Zählerreset.
Bei Datumswechsel Zählerreset.

Wäre sehr dankbar für Eure Hilfe!

Content-Key: 13378

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

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

Member: Schmiddy
Schmiddy Jul 20, 2005 at 12:30:27 (UTC)
Goto Top
[code]
d = CDate(date())
Set fs = CreateObject("Scripting.FileSystemObject")
IF fs.FileExists("c:\test1.txt")THEN
fs.DeleteFile "c:\test1.txt", true
End IF
Set txtfile = fs.createTextFile("c:\test1.txt", ForWriting, false)
txtfile.WriteLine datepart("y",d)
txtfile.Close
[/code]

Also das habe ich eben mit VBS hinbekommen.
Gibt mir also den Tag aus. Nun muss ich en Wert aus der c:\test1.txt in den dateinamen schreiben wie mache ich denn das am besten?

LG Schmiddy
Member: Biber
Biber Jul 20, 2005 at 19:23:40 (UTC)
Goto Top
Moin, Schmiddy,

nur aus sportlichen Gründen mal eine reine Batchlösung.
Unterstellt: dieser Batch wird aufgerufen, um eine vorhandene Datei umzubenennen.
--> also <font color=green>kkkxxxRename.bat Dateiname </font>
Lässt sich aber natürlich auch umstricken zu
--> SetzeNächstenDateinamen.bat (ohne Parameter)

:: -------Beispiel kkkxxxRename.bat
@echo off
::- unterstellt: Parameter [LW:][Pfad\]Dateiname zum Umbenennen nötig
::wenn nur eine Variable gesetzt werden soll, die nächsten beiden Zeilen auskommentieren
If (%1)==() echo Aufruf: %~n0 [LW:][Pfad\]Dateiname zum Umbenennen
If (%1)==() goto PanicExit

if not defined OldDate set OldDate=%date%
if defined kkk  if %OldDate%==%date% goto kkkHabIch
set Monat=%date:~3,2%
set Tach=%date:~0,2%
IF %Monat%==01 Set /a TageVorbei = 0
IF %Monat%==02 Set /a TageVorbei = 31                     
IF %Monat%==03 Set /a TageVorbei = 31 +28
IF %Monat%==04 Set /a TageVorbei = 31 +28 +31
IF %Monat%==05 Set /a TageVorbei = 31 +28 +31 + 30
IF %Monat%==06 Set /a TageVorbei = 31 +28 +31 + 30 + 31
IF %Monat%==07 Set /a TageVorbei = 31 +28 +31 + 30 + 31 +30 
IF %Monat%==08 Set /a TageVorbei = 31 +28 +31 + 30 + 31 +30 +31
:: etc..lies selber vom Kalender ab *gg

Set /a kkk=%TageVorbei% + %Tach%

:kkkHabIch  

if not exist %temp%\%kkk%.txt echo 1000>%temp%\%kkk%.txt
set /p nxxx=&lt%temp%\%kkk%.txt
set /a nxxx= %nxxx% + 1
set cxxx=%nxxx:~1,3%
echo Alter Dateiname: %1  neuer Dateiname: %kkk%%~n1%cxxx%.%~x1
:: hier dann vielleicht ein Rename oder ein copy oder whatever
:: Beispiel rename %1 %kkk%%~n1%cxxx%.%~x1 ....... oder rename %1 %kkk%A5%cxxx%va520.~x1 
:: ergibt z.B rename v:\data\test.xyz 201data003.xyz ...oder rename v:\data\test.xyz 201A5003va520.xyz
:: oder eben Set NaechsterDateiname=%kkk%A5%cxxx%va520
:: und dann Zähler hochsetzen in der Datei, wenn nichts gescheitert ist:
if errorlevel 0 echo %nxxx%>%temp%\%kkk%.txt
For %%i in (nxxx cxxx Tach Monat) do set %%i=
:PanicExit
::-------Beispiel kkkxxxRename.bat

Sollte auch resistent gegen zwischenzeitliches Booten sein und auch gegen Arbeiten über die Mitternachtsgrenze hinweg.
Dafür die %OldDate%-Zeilen.

Hope It Helps

Frank / der Biber aus Bremen
Member: Schmiddy
Schmiddy Jul 22, 2005 at 10:56:34 (UTC)
Goto Top
Danke schön klappt wirklich super!!!!!

LG Schmiddy
Member: Schmiddy
Schmiddy Jul 22, 2005 at 10:56:44 (UTC)
Goto Top
Member: Biber
Biber Jul 22, 2005 at 11:57:45 (UTC)
Goto Top
Freut mich, Schmiddy,

als bekennender Perfektionist noch der Hinweis:
ich würde auch die kkk-Variable grundsätzlich auf drei Stellen formatieren (falls 2006 das Bätchelchen immer noch im Einsatz ist *gg), also:

Set /a kkk=%TageVorbei% + %Tach% ......ändern in

Set /a kkk=1000+%TageVorbei% + %Tach%
Set kkk=%kkk:~1,3%


Schönes und vor allem baldiges Wochenende
Frank / der Biber aus Bremen