zbyszek
Goto Top

Batch script Zähler Dateinamen

Hallo zusammen.
Nach ca 8 Std probieren bin ich am Ende

Ich ziehe täglich mit einem Batch-Script per ftp eine Datei vom Server in einen Logfiles-ordner (kein Problem soweit).

Die Logfiles sollen nicht überschrieben werden.

D.h.: Die erste Datei Log.txt soll in Alt_Log1.txt umbenannt werden.
Am nächsten Tag kommt erneut eine Log.txt da rein.
Die Alt_Log1.txt soll nun ins Alt_Log2.txt umbenannt werden und die Log.txt ins Alt_Log1.txt
oder wäre es nicht einfacher die neue Log.txt sofort ins Alt_log2.txt usw.?

Habe es bereits mit Abfragen:

if exists Alt_log1.txt ren Log.txt Alt_log2.txt probiert

aber da ist kein zähler / variable für Alt_log2.txt in ....log3.txt usw.

Wie kann ich also abfragen welche Datei (höhste Zahl) ist, damit ich die täglich neue Log.txt in Alt_log_xxx+1 ändern kann?

ich hoffe es ist verständlich erklärt.

Danke und VG
Kommentar vom Moderator Biber am Jun 01, 2011 um 04:33:22 Uhr
Verschoben von "Entwicklung" nach "Batch & Shell".

Content-Key: 167293

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

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

Member: bastla
bastla May 31, 2011 at 20:12:09 (UTC)
Goto Top
Hallo zbyszek und willkommen im Forum!

Eigentlich sollte es ja genügen, die neueste Datei zu suchen:
for /f "delims=" %%i in ('dir /b /a-d /od Alt_log_*.txt') do set "Neueste=%%i"
Wie Du dann an die Nummer kommst, scheinst Du ja schon zu wissen ...

Grüße
bastla
Member: Clijsters
Clijsters May 31, 2011 at 20:16:11 (UTC)
Goto Top
Kurz und knackig:
for /L %%X in (0,1,100) DO echo %%X
Ausgabe:
0
1
2
3
...
100
REM Oder:

Set Hatzelknatzel=1
Set /A hatzelknatzel=%hatzelknatzel%+1
Auch hier wird hochgezählt. Aus dem Dateinamen kannst du theoretisch die Zahl herausziehen und dann %Zahlenname%+1 rechnen.

Ist das ungefähr nach deinen Vorstellungen?
Ich denke, das Einbauen in dein jetziges Batch ist nicht allzu schwierig...

Gruß
Dominique

[EDIT]
Zitat von @bastla:
Hallo zbyszek und willkommen im Forum!

Eigentlich sollte es ja genügen, die neueste Datei zu suchen:
for /f "delims=" %%i in ('dir /b /a-d /od Alt_log_*.txt') do set
> "Neueste=%%i"
> 
Wie Du dann an die Nummer kommst, scheinst Du ja schon zu wissen ...

Grüße
bastla
Da macht man sich mal gemütlich auf den Pott und schon kommt wieder jemand, der einem zeigt, dass man eigentlich nichts kann face-sad

Naja, man gibt sein Bestes
Member: mathe172
mathe172 May 31, 2011 at 20:18:17 (UTC)
Goto Top
Hallo,

versuchs mal hiermit:
setlocal enabledelayedexpansion
pushd "C:/Logs/"  
for /f "tokens=2 delims=g." %%A in ('dir /b /o:d "Alt_Log*.txt"') do if not defined LastFile set "LastFile=%%A"  
for /l %%A in (%LastFile%,-1,1) do (
set /a "FileNumber=%%A + 1"  
ren Alt_Log%%A.txt Alt_Log!FileNumber!.txt
)
ren Log.txt Alt_Log.txt
popd
-Ungetestet

MfG,
Mathe172
[Edit: War wohl etwas spät...]
Member: zbyszek
zbyszek Jun 01, 2011 at 08:09:03 (UTC)
Goto Top
Danke erstmal für die schnellen Vorschläge.
Leider funktioniert das immer noch nicht
"Der angegeben Pfad kann nicht gefunden werden" und "Dateiname existiert bereits oder die Datei kann nicht gefunden werden"
Member: zbyszek
zbyszek Jun 01, 2011 at 08:20:00 (UTC)
Goto Top
leider auch nicht

ich blicke jetzt noch weniger durch als vorher. Wie bekomme ich aus dem dateinamen die "Zahl" raus: für "Daten_alt_4.txt" wäre das die 4

Im Ordner habe ich jetzt: Daten_Alt_1.txt bis ...4.txt und die Daten.txt.
Für diese Daten.txt soll jetzt die 4 als Zahl gezogen werden und beim Umbenennen der Daten.txt in Daten_Alt_5.txt verwendet werden "(4+1)"

@echo off

If exist c:\Test\Zahler\*alt*.txt goto alt

:neu

echo neue ist da

for /f "delims=" %%i in ('dir D* /b /a-d /od Daten.txt') do set "neue=%%i"

set a=2

echo %neue% ist die neue

set /A a=a+1

rem ren %neue% Daten_Alt_%a%.txt

goto ende

:alt

echo alte ist daaaa

REm for /f "skip=1

for /f "delims=" %%i in ('dir /b /a-d /od Daten_Alt*.txt') do set "alte=%%i"

echo %alte% ist die alte

If exist C:\Test\Zahler\Daten.txt goto neu

goto ende

:ende

REM echo die neue %neue% ist jetzt %alte%
Member: zbyszek
zbyszek Jun 01, 2011 at 09:09:30 (UTC)
Goto Top
nicht so wirklich

probiere gerade so:

set a=1

for /f .....................

set /A a=a+1

ren %Neueste% Alt_log_%a%

oder so...?????????????
Member: mathe172
mathe172 Jun 01, 2011 at 11:28:19 (UTC)
Goto Top
Hallo,

meinst du meinen Code? - Wenn ja, hast du in Zeile 2 den Pfad angepasst?

MfG,
Mathe172