Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

491 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

27 april 2024, 21:25:22

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: Batch file  (gelezen 11254 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMP

  • Forumheld
  • *****
  • Berichten: 14.666
    • NL Computer Forum
Batch file
« Gepost op: 9 november 2009, 19:54:16 »
Bericht 1 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:quattroDatum:21-03-2006
 Aan:AllenMsgID:2855.1
 Onderwerp:Batch fileForum:ws-nlcomputer
Ik wil in een batch file al mijn files met extensie .log kopiëren naar een folder welke dynamisch wordt aangemaakt volgens het formaat:  yyyymmdd
Hoe realiseer ik dit?
xcopy *.log <gecreëerde directory>


Bericht 2 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Ruud (Sysop)Datum:21-03-2006
 Aan:quattroMsgID:2855.2
 Onderwerp:Batch fileForum:ws-nlcomputer
quattro,

>>Ik wil in een batch file al mijn files met extensie .log kopiëren naar een folder welke dynamisch wordt aangemaakt volgens het formaat:  yyyymmdd<<

Je kunt dit simpel voor elkaar krijgen door gebruik te maken van een variabele waarde wanneer de batchfile wordt aangeroepen. Bijvoorbeeld kopielog.bat:

rem **start batchfile**
if exist c:\%1 goto fout
md c:\%1
xcopy *.log c:\%1
goto eind

: fout
cls
echo Opgegeven map bestaat al!

:eind
rem **Einde batchfile**

Als je de batchfile kopielog.bat opstart, geef je direct de naam van de nieuwe map in bv:

kopielog 20060321

In dit geval wordt eerst gekeken of de map c:\20060321 bestaat. Is dat het geval dan volgt een foutmelding anders wordt de map aangemaakt en de logfiles gekopieerd. Voor c:\ kun je een ander path opgeven. Wil je de bron én doel opgeven dan kun je variabele %2 gebruiken bv

xcopy %2\*.log c:\%1

De batchfile roep je dan aan met: kopielog c:\windows 20060321


------------------------
Groeten,
Ruud de Wit (NL Computer)



Bericht 3 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:quattroDatum:21-03-2006
 Aan:Ruud (Sysop)MsgID:2855.3
 Onderwerp:Batch fileForum:ws-nlcomputer
Dat gaat inderdaad wel werken, echter ik wil dit iedere dag geautomatiseerd laten uitvoeren. Op deze manier worden dan alle log files per dag in een unieke folder gekopieerd.
 
thanx,
Jilles.


Bericht 4 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Michel Uphoff (Sysop)Datum:21-03-2006
 Aan:quattroMsgID:2855.4
 Onderwerp:Batch fileForum:ws-nlcomputer
Hoi Jilles,
Met een batch bestandje is dat zo simpel nog niet, maar het zou moeten kunnen. Onderstaand voorbeeldje doet het, maar heeft enige beperkingen:
Omdat je met Xcopy alle mappen doorloopt, en dus ook de map waarin de log bestanden opgeslagen staan, zou je een cyclische fout creëren. Ik heb dit even simpel opgelost door de logs op een andere drive te laten plaatsen. Verder zal Xcopy natuurlijk ook de mapnamen meenemen, maar ik neem aan dat dit de bedoeling ook is (logs kunnen dezelfde naam hebben). Verder zal het alleen onder NT smaakjes van Windows werken (NT/2000/XP/2003), en als je een andere taalversie van Windows dan NL hebt, moet de parsing aangepast worden voor het juiste datumformaat.
De automatische mapnaam wordt via parsing van het commando date /t opgebouwd. Verder zullen log bestanden in gebruik ook een error veroorzaken en de werking afbreken, dat voorkom je met de /C achter Xcopy.
@ECHO OFF
cls
rem Datum parsen in formaat YYYYMMDD
For /f "tokens=1-3 delims=- " %%a in ('date /t') do (set datum=%%c%%b%%a)
rem Als map al bestaat dan einde batch
if exist D:\%datum% goto error
rem maak mapnaam
MD D:\%datum%
rem Xcopy alle .log bestanden naar de andere disk
xcopy /C /S C:\*.log D:\%datum%
goto end
:error
Echo de mapnaam bestaat reeds.
pause
:end
exit

Michel Uphoff (Nlcomputer Forum)
Homepage

Gewijzigd 21/03/2006 17:48 CET door Michel Uphoff (Sysop)


Bericht 5 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:22-03-2006
 Aan:quattroMsgID:2855.5
 Onderwerp:Batch fileForum:ws-nlcomputer
hoi quattro,

>>k wil in een batch file al mijn files met extensie .log kopiëren naar een folder welke dynamisch wordt aangemaakt volgens het formaat:  yyyymmdd<<

Probeer het eens met Karen's Replicator


Groeten, Peter



Bericht 6 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Stefan de Best (Sysop)Datum:26-03-2006
 Aan:Ruud (Sysop)MsgID:2855.6
 Onderwerp:Batch fileForum:ws-nlcomputer
Hoi Ruud,
>> Je kunt dit simpel voor elkaar krijgen door gebruik te maken van een variabele waarde wanneer de batchfile wordt aangeroepen. <<
Bedankt! Dat was net wat ik nodig had, want met mijn batchbestand (zie 2842.1) moest ik achteraf nog het versienummer veranderen. Het batchbestand start ik nu via Start --> Uitvoeren, zodat ik het versienummer kan meegeven als parameter aan het batchbestand of is daar een nóg makkelijkere manier voor?

Stefan

    Overzicht van 150 oude en minder bekende zwemslagen
    http://tinyurl.com/yuojv[/]

 


Bericht 7 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Ruud (Sysop)Datum:27-03-2006
 Aan:Stefan de Best (Sysop)MsgID:2855.7
 Onderwerp:Batch fileForum:ws-nlcomputer
Stefan,

>>of is daar een nóg makkelijkere manier voor?<<

Ik weet niet of die versienummers *altijd* opvolgend zijn maar met %1 kun je invullen wat je wilt bv, v10.0.1 en daarna v10.0.3 of zoiets. Met be.exe kun je ook laten vragen welke versienummer je wilt gebruiken tijdens het starten van een batchfile dat moet je zelf even kijken, Michel heeft daar goede voorbeelden van gegeven om waardes te verhogen. Overigens kun je %1 t/m %9 als variabele in een batchfile gebruiken.

------------------------
Groeten,
Ruud de Wit (NL Computer)



Bericht 8 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Michel Uphoff (Sysop)Datum:27-03-2006
 Aan:Stefan de Best (Sysop)MsgID:2855.8
 Onderwerp:Batch fileForum:ws-nlcomputer
Hoi Stefan,
>> is daar een nóg makkelijkere manier voor? <<
Je zou een automatische counter kunnen maken, die de huidige versie uit version.txt leest (formaat major.minor), en vervolgens de minor ophoogt met 1 en weer opslaat in version.txt.
Hier is een testbestandje om mee te spelen. De for opdracht parsed de inhoud van version.txt en splitst het deel voor de punt (het eerste token) en het deel erna (het tweede token), en slaat ze op in de variabelen major en minor. Vervolgens wordt alleen minor met 1 opgehoogd. Je zou zo ook het major deel kunnen ophogen als minor een bepaalde grens overschijdt, maar daar kom je denk ik nu wel uit:
@ECHO OFF
cls
if not exist Version.txt echo 0.0 > Version.txt
:Loop
for /f "tokens=1* delims=. " %%a in (Version.txt) do (set major=%%a)
for /f "tokens=2* delims=. " %%b in (Version.txt) do (set minor=%%b)
SET /A minor=minor+1
echo %major%.%minor%
echo %major%.%minor% > Version.txt
pause > nul
goto Loop
/Edit: O ja, SET /A is XP-only (type set /? in cmd voor meer opties)

Michel Uphoff (Nlcomputer Forum)
Homepage

Gewijzigd 27/03/2006 14:25 CET door Michel Uphoff (Sysop)


Bericht 9 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Michel Uphoff (Sysop)Datum:27-03-2006
 Aan:Stefan de Best (Sysop)MsgID:2855.9
 Onderwerp:Batch fileForum:ws-nlcomputer
Hoi Stefan,
Toch maar even die overloop naar major er in gebouwd, en de batch iets korter gemaakt:
@ECHO OFF
cls
if not exist Version.txt echo 0.0 > Version.txt
:Loop
for /f "tokens=1-2* delims=. " %%a in (Version.txt) do (Set major=%%a) & Set /A minor=%%b
Set /A minor=minor+1
if %minor%==100 Set /A major=major+1 & Set /A minor=0
echo Versie opgehoogd naar: %major%.%minor%
echo %major%.%minor% > Version.txt
pause > nul
goto Loop

Michel Uphoff (Nlcomputer Forum)
Homepage

Gewijzigd 27/03/2006 15:22 CET door Michel Uphoff (Sysop)


Bericht 10 van 10

NL Computer Forum ~ SQL & Programmeren
 Van:Stefan de Best (Sysop)Datum:27-03-2006
 Aan:Michel Uphoff (Sysop)MsgID:2855.10
 Onderwerp:Batch fileForum:ws-nlcomputer
Hoi Michel,
Hartelijk dank voor de moeite! Vanavond heb ik echter een programmaatje geschreven die met een klik op een knop de versie-info uit de desbetreffende exe haalt (die zet ik wel altijd goed namelijk).
Met een andere knop die het bestaande batchbestand aanroept, wordt het hele zaakje gecompileerd tot een distributieversie mét de juiste versienummer. :-)
Als ik morgen tijd heb dan plaats ik dat programmaatje wel in de bestandenbieb, maar dan zonder die tweede knop; dat is alleen voor mij van belang namelijk, maar die versie-info is wel interessant in sommige gevallen. ;-)  Al gaat dat wellicht makkelijker via Verkenner en dan de Eigenschappen van de exe of dll.
Bedankt IAC voor de moeite.

>Stefan

    Overzicht van 150 oude en minder bekende zwemslagen
    http://tinyurl.com/yuojv[/]