Inhoud 2 tekstbestanden naast elkaar zetten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Marlibica
  • Registratie: Augustus 2002
  • Laatst online: 31-07 09:00

Marlibica

Tijd voor een ondertitel.

Topicstarter
Ik ben bezig met een recoveryprocedure voor een database te automatiseren. De commando's daarvoor weet ik en werken ook, maar de inhoud van een tekstfile moet variabel zijn.

Ik ben geen programmeerheld, ik wil het met een batchfile doen, daar kan ik nog wel wat mee.

Ik moet telkens 2 logbackups inlezen, die iedere keer een andere extensie hebben. Ze zijn genummerd en hebben als extensie
log.001
log.002
etc.
Er staan iedere keer maar 2 van die bestanden in de directory, ik wil ze verplaatsen na de procedure.
Het inlezen van de recovery gaat dmv een command (dbmcli) die een tekstfile inleest. Een deel van die tekstfile moet er zo uitzien:
code:
1
2
recover_start log LOG <lognummer>
recover_replace log LOG <volgende lognummer>


Nu heb ik het al voor elkaar om die lognummers uit te lezen op de volgende manier:
code:
1
2
3
4
5
6
7
cd c:\backup
dir c:\backup\log.* /b >test.txt

FOR /F "tokens=1,2 delims=. " %%a in (test.txt) DO (

echo %%b>lognumber.%%b
)

Nu heb ik dan dus 2 bestanden met 2 nummers als inhoud. Staan er bijv 2 bestanden in die dir, bijv. log.003 en log.004, dan krijg ik 2 tekstbestanden, lognumber.003 en lognumber.004 waarin 003 resp. 004 als tekst staat.

Nu heb ik dus een tekstbestand waarin de recovercommando's staan, maar er moet dus automatisch die lognummers achterkomen. Daar wringt de schoen. Ik krijg het wel voor elkaar om er een vaste tekst achter te krijgen, maar geen variabele.

Welke held helpt mij verder?

Sign here against sigs


Acties:
  • 0 Henk 'm!

Verwijderd

ik heb je post nou drie keer doorgelezen, maar ik snap werkelijk niet wat je precies bedoelt.

maarrem, als ik het goed begrijp wil je uiteindelijk 1 groot batch-bestand hebben dat al die commando's uitvoert?
ik zou zeggen: maak er even eentje in excel => zonder programmeren op alle mogelijke manieren vaste en variabele strings laten oplopen en aan elkaar plakken...

vervolgens copypasten naar notepad en opslaan maar :P

Acties:
  • 0 Henk 'm!

  • Marlibica
  • Registratie: Augustus 2002
  • Laatst online: 31-07 09:00

Marlibica

Tijd voor een ondertitel.

Topicstarter
Ik had aan anderen ook al wat moeite het te omschrijven :)

Situatie: Ik heb 2 databases. De één moet een schaduwkopie van de andere worden. Ik heb al iets geschreven dat om de zoveel tijd automatisch een backup maakt. Die genereert dan ook (zo werkt dat systeem nou eenmaal) die logbestanden met variabele extensie. Nu moet ik dus iets schrijven die die logbestanden automatisch restored in de schaduwdatabase. Uiteindelijk wil ik inderdaad één groot batchbestand die een backup trekt van de ene en die restored in de andere.

Sign here against sigs


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02:49

.oisyn

Moderator Devschuur®

Demotivational Speaker

Leg eens gewoon met een klein voorbeeldje uit welke stappen precies genomen moeten worden. Dus niet het hoe, maar het wat. Dus wat je zou precies doen als je het met de hand aan zou pakken bijvoorbeeld.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Marlibica
  • Registratie: Augustus 2002
  • Laatst online: 31-07 09:00

Marlibica

Tijd voor een ondertitel.

Topicstarter
Allright :)

Ik pak gewoon de commando's er bij.
Als eerste: Dabatase logbackup:
code:
1
dbmcli -u dbm,dbm -d <dbnaam> db_backup log LOG 0

Dit genereert een logbackup bestand, bijvoorbeeld log.004. Dit komt in c:\backup terecht. Daar staat al de vorige backup, log.003

Het systeem vereist dat eerst de laatste backup wordt ingelezen met:
code:
1
dbmcli -u dbm,dbm -d <dbnaam> recover_start log LOG 003

en vervolgens de net gemaakte backup
code:
1
dbmcli -u dbm,dbm -d <dbnaam> recover_replace log LOG 004

Dit is dus een ander commando.
Zou ik dit willen automatiseren, dan zou ik een tekstbestand moeten maken (bijv restore.txt) met daarin:
code:
1
2
recover_start log LOG 003
recover_replace log LOG 004


en vervolgens uitvoeren met:
code:
1
dbmcli -u dbm,dbm -d <dbnaam> -i restore.txt


Het gaat dus er om wat er in restore.txt terecht komt. Dit moet variabel zijn. Nu staat er 003 en 004, maar bij de volgende backup moet het 004 en 005 zijn. Dit moet aangepast worden in restore.txt.

Sign here against sigs


Acties:
  • 0 Henk 'm!

Verwijderd

ik snap het eerlijk gezegd nog niet :P

waar moet de nieuwe restore.txt dan vandaan komen? en hoe ga je die iedere keer vervangen? ook automatisch?


overigens zijn er 100 makkelijkere manieren om een db te backuppen, maar dat zal je zelf ook wel weten :P

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02:49

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik snap het nu wel :P. Wil je dat laatste commando ook nog in een batchfile hebben trouwens, of wil je dat verder met de hand uitvoeren? En zo'n recover_replace, verwijdert dat ook de vorige backup (003 in je voorbeeld), of blijft die bestaan?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Marlibica
  • Registratie: Augustus 2002
  • Laatst online: 31-07 09:00

Marlibica

Tijd voor een ondertitel.

Topicstarter
Nee, dat is mijn volgende uitdaging :) Eerst dit maar eens...

Dat laatste komt idd in een batchfile en wordt periodiek uitgevoerd, samen met (of na uiteraard) de backup procedure.

Ik weet dat er tig manieren zijn om te backuppen, maar niet om te restoren, althans niet automatisch.

Dit heet trouwens log shipping.

[ Voor 27% gewijzigd door Marlibica op 14-11-2008 16:59 ]

Sign here against sigs


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02:49

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die tussentijdse test.txt is trouwens niet echt nodig. Met for /F kun je ook een commando uitvoeren:
code:
1
for /f %%f in ('dir logs.* /b /o') do echo %%~xf

Dit geeft je alle extensies van de files die voldoen aan logs.* (ik gebruik de /o switch om de resultaten te sorteren - dit is impliciet op NTFS, maar bv. niet op FAT). %%f is de hele filename, maar %%~xf geeft je alleen de extensie.

Door variabelen bij te houden kun je dus steeds de voorlaatste en de laatste krijgen:
code:
1
2
3
4
5
6
7
for /f %%f in ('dir logs.* /b /o') do (
    set prev=!cur!
    set cur=%%~xf
)

echo %prev%
echo %cur%

Dit zou in jouw voorbeeld 003 en 004 moeten printen. Vanaf daar lijkt het me niet zo moeilijk om de rest te doen :)

[ Voor 4% gewijzigd door .oisyn op 14-11-2008 17:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

verhip .oisyn, nou snap ik het ook :P

ik zat totaal in de verkeerde hoek te denken... TS, succes ermee.

Acties:
  • 0 Henk 'm!

  • Marlibica
  • Registratie: Augustus 2002
  • Laatst online: 31-07 09:00

Marlibica

Tijd voor een ondertitel.

Topicstarter
Dit opent inderdaad wel perspectieven :) Echter zet hij een puntje voor de variabele.. Ik weet nog niet waarom. Alvast super bedankt, ga nu naar huis :)

Sign here against sigs

Pagina: 1