Windows bat txt Dateien in Reihenfolge?
Ich möchte dass immer wenn ich die bat Datei start,e eine txt Datei sich erstellt mit der dazugehörigen Zahl: Test1.txt, Test2.txt, Test3.txt usw.
3 Antworten
Hier noch mal prinzipiell der gleiche Code wie in deiner anderen Frage, nur etwas auf deine anderen Anforderungen angepasst:
:main
call createUniqueName Test.txt
echo.Dein restlicher Code...
pause&exit
:createUniqueName <File>
set "return=%~f1"
if not exist "%~f1" exit /B 0
set /a i=0
:_createUniqueName
set /a i+=1
set "return=%~dpn1%i%%~x1"
if exist "%return%" goto _createUniqueName
exit /b %i%
Im Prinzip einfach : dir /b "test*.txt" listet alle Dateien dieses Musters . Leider würde auch testsinnlos.txt in das Schema passen.
Also entferne ich die Endung .TXT und den Wortteil "test". Übrig bleibt eine Zahl oder "sinnlos" etc.
Einfach noch testen ob es eine Zahl ist.
Wenn ja die bisher größte Zahl aussieben... um 1 erhöhen und an "test" anhängen und wieder .TXT dran fertig ist der neue Dateiname....
@echo off
setlocal EnableDelayedExpansion
set "lastnum=0"
for /f "tokens=*" %%a in ('dir /b "test*.txt"') do (
echo gefunden: %%~na
set "fName=%%~na"
rem test aus Namen entfernen, was übrig bleibt sollte eine Zahl sein.
set "diffName=!fname:test=!"
rem test wirklich Zahl?
set /a "zahl=!diffName!*1" 2>nul
if "!zahl!"=="diffName" (
if !zahl! gtr !lastnum! (
rem die größte Zahl in test*.txt finden...
set "lastnum=!Zahl!"
)
)
echo bisher hoechste Nummer ist !lastnum!
)
:erhoehe
set /a "newNum=%lastNum%+1"
rem neuen Dateinamen zusammensetzen.
set "newTestText="test%newNum%.txt"
echo Rumspinat ...blubb...hick > "%newBkupText%"
pause
Das ist wirklich ganz tief aus der Hüfte programmiert...
Sollte eigentlich klappen, aber ich kann es leider nicht testen. (Handy und Krankenhaus...)
Welche dazugehörige Zahl? Eine fortlaufende?
Das sollte mit einer Schleife funktionieren und einem IF exists Test.
/
Alternativ eine Hilfsdatei mit der Zahl drin, die ausgelesen wird. Dann sparst du dir die Testschleife und musst den Inhalt dieser Datei immer nur +1 erhöhen