Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
Beste tweakers,

Ik zit met een probleem. Mijn doel is een mkdir te doen waarbij de naam van die dir dynamisch wordt aangemaakt aan de hand van de huidige datum. Zoiets als dit:
>mkdir %DATE%


Probleem is dat wel dat %DATE% illegale characters inhoudt voor een dir naam.
>echo %DATE%
zo 08/06/2008


Nu kan ik de string omvormen door te pipen naar het tr commando:
>echo %DATE% | tr -d "/"
zo 08062008


Maar ik kan deze dingen niet combineren:
>mkdir echo %DATE% | tr -d "/"
The syntax of the command is incorrect.

>mkdir %DATE% | tr -d "/"
The syntax of the command is incorrect.


Omsluiten met allerhande haakjes gaat ook niet:
>mkdir (echo %DATE% | tr -d "/")
The syntax of the command is incorrect.


Dus (, [, {, % gaat allemaal niet als omsluiting.

Misschien doe ik het gewoon volkomen verkeerd door er een pipe te gebruiken, maar ik weet niet hoe ik het anders zou moeten doen.

Of zijn variabelen een uitkomst?

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

"tr" is geen standaard DOS commando, ik zou eerder zoiets doen:
for /f "tokens=2,3,4 delims=-/., " %i in ("%DATE%") do @mkdir %i%j%k

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

Heb je
code:
1
>mkdir (%DATE% | tr -d "/")
ook geprobeerd?

Hoe gebruik jij trouwens dat tr commando? Want bij mij werkt dat niet.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • FireWood
  • Registratie: Augustus 2003
  • Laatst online: 12:33
Even een hele andere oplossing:

Als je de systeem instelling wijzigt van de datum notatie(onder regioinstellingen o.i.d.), veranderd de datum notatie ook in cmd-prompt.

Kun je BTW ook alles veranderen, zoals ook het verwijderen van de dag afkorting enz.

Zie ook:
Procedure: Datum-, tijd, getal- en valutaweergave wijzigen in Windows XP

En ook dit werkt:
http://talk.bmc.com/blogs...ips/view?searchterm=batch

[ Voor 41% gewijzigd door FireWood op 08-06-2008 12:34 ]

Noobs don't use "F1", Pro's do, but they can't find the information they needed


Acties:
  • 0 Henk 'm!

Verwijderd

md & mkdir zijn volgens mij idd XP commands. Vista herkent ze niet. Of TS heeft een oudere Windows versie die dat wel ondersteund. Mkdir of MD werkt hier namelijk ook niet.

Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
tr heb ik (waarschijnlijk) uit het cygwin repertoire, net als grep en cat en dergelijke.

Die iteratie manier van elevator lijkt mij nog leuk, zal ik even mee spelen. :)

Bedankt voor de snelle antwoorden!

edit: h.edink heeft blijkbaar ook iets leuks, ook mee spelen.
Haan schreef op zondag 08 juni 2008 @ 12:22:
Heb je
code:
1
>mkdir (%DATE% | tr -d "/")
ook geprobeerd?

Hoe gebruik jij trouwens dat tr commando? Want bij mij werkt dat niet.
Heb ik eveneens geprobeerd ja, werkt evenmin. Voor dat tr commando, zie bovenaan in deze post. ;)

Ik gebruik trouwens Windows XP waarop de scripts uitgevoerd moeten worden, om verwarring te voorkomen.

[ Voor 58% gewijzigd door RuddyMysterious op 08-06-2008 12:42 ]


Acties:
  • 0 Henk 'm!

  • Teun_2
  • Registratie: Oktober 2003
  • Laatst online: 15-09 19:29
en een aparte variabele aanmaken?
dus iets als:
$date_file = %DATE% | tr -d "/";
mkdir $date_file;

Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
Als ik nu een file wil maken gebaseerd op de datum ipv een dir, zou ik eerst willen checken of die file al bestaat of niet. Daarvoor zou ik de %DATE% string moeten omvormen en in een variabele steken, denk ik.

for /f "tokens=1,2,3,4 delims=-/., " %i in ("%DATE%") do @set datumvar=%l%k%j%i
touch %datumvar%.txt
if exist %datumvar%.txt echo file gevonden

werkt blijkbaar.

Bedankt om me even te verlichten in de stof. ;)

Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
Nog een vraagje: is het mogelijke gepipete output te schrijven naar een variabele?

Ik wil via netstat -e weten hoeveel netwerktraffiek de bak al heeft gehad. Dit moet worden gelogd door naar de file met die datum geschreven te worden.

Dit doe ik zo:
>netstat -e | grep -i "bytes"


Vrij primitief ja, ik weet het. De bedoeling is dan wel om die volledige string naar een variabele te schrijven om die dan verder te bewerken. Of is dat op een andere manier mogelijk?

[ Voor 9% gewijzigd door RuddyMysterious op 08-06-2008 13:07 ]


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Eerst touch je de file, en daarna kijk je of die bestaat? Ligt dan aan mij, of is dat raar? :)

Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
Ik weet het, was even een probeersel dat ik had gecopypastet.

Hier is wat ik ongeveer wil bekomen:
@echo off
cls

:start
for /f "tokens=1,2,3,4 delims=-/., " %i in ("%DATE%") do @set datumvar=%l%k%j%i
if exist %datumvar%.txt goto schrijffile else echo Received      Sent > %datumvar%.txt
:schrijffile
netstat -e | grep -i "bytes" > %datumvar%.txt
sleep 600
goto start


Ik zou voor elke regel wel de tijd willen schrijven, wat analoog moet zijn aan het steken van datum in een variabele volgens mijn eigen keuze qua formatting. Dat moet ik nog toevoegen maar is niet veel werk.

Maar kan ik gegrepte output in een variabele steken?

[ Voor 4% gewijzigd door RuddyMysterious op 08-06-2008 13:16 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

DevilsProphet schreef op zondag 08 juni 2008 @ 13:15:
Ik zou voor elke regel wel de tijd willen schrijven, wat analoog moet zijn aan het steken van datum in een variabele volgens mijn eigen keuze qua formatting. Dat moet ik nog toevoegen maar is niet veel werk.

Maar kan ik gegrepte output in een variabele steken?
Ja hoor, dan krijg je zoiets:
for /f "tokens=*" %i in ('netstat -e ^| findstr -i bytes') do @echo %TIME% %i

Ik snap overigens echt niet waarom je steeds die cygwin tools er bij haalt als er een goed Windows alternatief is - dat maakt het echt niet sneller en in ieder geval ontzettend niet-portable naar andere Windows machines :)

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online
Verwijderd schreef op zondag 08 juni 2008 @ 12:23:
md & mkdir zijn volgens mij idd XP commands. Vista herkent ze niet. Of TS heeft een oudere Windows versie die dat wel ondersteund. Mkdir of MD werkt hier namelijk ook niet.
Sorry?
Hier onder Vista Business staat dat wel degelijk aan hoor.
Dat zit al tijden in cmd.exe verwerkt - ook in XP.
elevator schreef op zondag 08 juni 2008 @ 13:32:
Ik snap overigens echt niet waarom je steeds die cygwin tools er bij haalt als er een goed Windows alternatief is - dat maakt het echt niet sneller en in ieder geval ontzettend niet-portable naar andere Windows machines :)
^^
Eensch is.
Als je dan toch portable wil werken, dan zou je desnoods nog naar VBScript kunnen kijken, omdat time/date bewerkingen onder batch veel afhankelijker zijn van landinstellingen en taalconfiguraties.
Onder VBscript kun je met Win32_LocalTime en WMI date-time berekeningen al heel snel die directories aan laten maken (waarbij je met UTC sowieso al het voordeel hebt dat je in een 200409070130.000000 string formaat je datum terugkrijgt).

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
Infeite vond ik het gewoon leuk om wat linux tools te gebruiken in windows, maar dat het het veel minder geschikt maakt om op om het even welke windows machine te gebruiken is waar, ja. Dus zal ik uiteindelijk inderdaad de standaard windows tools gebruiken.

Dank je, elevator, om dat weer even te doen. Blijkbaar valt in batch scripting alles op te lossen met iteraties. :p

Sorry, -NMe-, dat deze topic blijkbaar verkeerd stond. Ik heb die topic daarnet al gelezen, maar ik was voorbij gegaan aan het idee dat dit clientside scripting is. Ik dacht met het lezen van clientside scripting, tesamen met die webdevelopment aan javascript en niks meer dan dat. Blijkbaar dus wel.

VBScript, daar ben ik helemaal niet thuis in, dus dat zou ik dan weer moeten aanleren. Niet getreurd, het moet er ooit eens van komen. Maar nu zou ik mij voor simpelheid willen beperken tot batch.

Acties:
  • 0 Henk 'm!

Verwijderd

alt-92 schreef op zondag 08 juni 2008 @ 13:47:
[...]

Sorry?
Hier onder Vista Business staat dat wel degelijk aan hoor.
Dat zit al tijden in cmd.exe verwerkt - ook in XP.
offtopic:
Vista Ultimate 32-bit... Voerde het uit voor m'n post. Gaf op beide commands dat het niet bestond .. en nu wel .. :?

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Als het toch maar voor jezelf is, zou ik eerder Powershell leren dan VBscrip voor het moment :)

Acties:
  • 0 Henk 'm!

  • RuddyMysterious
  • Registratie: Maart 2003
  • Laatst online: 28-07 22:08

RuddyMysterious

a smorgasbord of waywardness

Topicstarter
Heb het script kunnen afwerken. Ik zal het hier even posten:
@echo off
echo NIET AFZETTEN, IS TRAFFIC EN FREE VOLUME SPACE MONITOR!!!

set /a traffiekteller=0
set /a volumeteller=0

:start


REM dit steekt de datum in een var volgens gewenste formatting
for /f "tokens=1,2,3,4 delims=-/., " %%i in ("%DATE%") do @set datumvar=%%l-%%k-%%j%%i

REM dit steekt de tijd in een var volgens gewenste formatting
REM enige delimiter een komma, zodat alles voor de komma wordt genomen
for /f "tokens=1 delims=," %%i in ("%TIME%") do @set tijdvarmet=%%i
if "%tijdvarmet:~0,1%" == " " set tijdvarmet=0%tijdvarmet:~1%

REM dit steekt trafiek via netstat -e in een var (enkel bepaalde regel met totale trafiek)
for /f "tokens=*" %%i in ('netstat -e ^| findstr -i bytes') do @set trafiekvar=%%i
set trafiekvar=%trafiekvar:~19%

REM dit steekt volumeinformation via dir in een var (enkel bepaalde regel met totale trafiek)
for /f "tokens=2 delims=)" %%i in ('dir d: ^| findstr /C:"bytes free"') do @set volumeinformationvar=%%i
set volumeinformationvar=%volumeinformationvar:~0,16%

:checktrafiekdirs
if not exist trafiek (mkdir trafiek)
if exist trafiek\%datumvar:~0,7% (goto :checktrafiekfile) else (mkdir trafiek\%datumvar:~0,7%)
:checktrafiekfile
if exist trafiek\%datumvar:~0,7%\%datumvar%.txt (goto :schrijftrafiekfile) else (echo.    Time        Received            Sent> trafiek\%datumvar:~0,7%\%datumvar%.txt)
:schrijftrafiekfile
if not exist trafiek\%datumvar:~0,7%\%datumvar%.txt (set /a traffiekteller=0) else (set /a traffiekteller+=1)
echo %tijdvarmet%%trafiekvar%  ^(%traffiekteller%^) >> trafiek/%datumvar:~0,7%/%datumvar%.txt

:checkvolumeinformationdirs
if not exist volumeinformation (mkdir volumeinformation)
if exist volumeinformation\%datumvar:~0,7% (goto :checkvolumeinformationfile) else (mkdir volumeinformation\%datumvar:~0,7%)
:checkvolumeinformationfile
if exist volumeinformation\%datumvar:~0,7%\%datumvar%.txt (goto :schrijfvolumeinformationfile) else (echo.    Time      Free Space> volumeinformation/%datumvar:~0,7%/%datumvar%.txt)
:schrijfvolumeinformationfile
if not exist volumeinformation\%datumvar:~0,7%\%datumvar%.txt (set /a volumeteller=0) else (set /a volumeteller+=1)
echo %tijdvarmet%%volumeinformationvar%  ^(%volumeteller%^) >> volumeinformation/%datumvar:~0,7%/%datumvar%.txt
echo.    Time      Free Space> currentfreespace.txt
echo %tijdvarmet%%volumeinformationvar%  ^(%volumeteller%^) >> currentfreespace.txt

sleep 60
goto start


Maakt dus dirs aan van trafiek en volumeinformation. Daarin worden dirs gemaakt per jaar en maand. In die dirs zitten voor elke dag een file met daarin de informatie, dus totale traffiek op dat moment en vrije schijfruimte op dat moment. Dit is in een directory die verbonden is met een account op een ftp server op dezelfde machine waardoor ik via het internet kan monitoren hoeveel ruimte er vrij is en hoeveel er verbruikt is. Vrij primitief ja. Ik zou eventueel kunnen schrijven naar een html bestand en dan een webserver installeren op de machine, maar hij is vrij traag qua hardware en enkel daarvoor een webserver is maar onnozel, dus dat weet ik zo nog niet.

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online
leuke vingeroefening in ieder geval :)
Ele kan je vast wel een voorbeeldje geven hoe dat met Powershell nog sneller te doen is, maar om je een voorbeeldje in VBscript te geven:

Dit script leest de aangesloten harddisken op mijn thuisservers uit en stopt dat in een database (in dit geval een accessDB, maar kan net zogoed in een echte DBMS natuurlijk...).
Loopt via een scheduled task, en kost nauwelijks cpu.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
On Error Resume Next
Const HARD_DISK = 3
Const adOpenStatic = 3
Const adLockOptimistic = 3

strNamespace = "root\cimv2"
strDomain = "alt-92"

strDate = FormatDateTime(Now(), 2)
strTime = FormatDateTime(Now(), 4)
Set objNetwork = CreateObject("Wscript.Network")
'strComputer = "bozeman"
arrComputers = Array("defiant","enterprise","excelsior","bozeman")

For Each strComputer In arrComputers
' =====================================================================
' =====================================================================
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colDisks = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_LogicalDisk Where DriveType = " & HARD_DISK & "",,48)

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = d:\scripts\diskspace_database.mdb" 


objRecordSet.Open "SELECT * FROM tbldiskspace" , _
    objConnection, adOpenStatic, adLockOptimistic


For Each objDisk in colDisks
    objRecordSet.AddNew
      
      objRecordSet("server") = strComputer
      objRecordSet("domain") = strDomain
      objRecordSet("disk") = objDisk.VolumeName
      objRecordSet("totalspace") = round(objDisk.Size /1024/1024,2)
      objRecordSet("freespace") = round(objDisk.FreeSpace /1024/1024,2)
      objRecordSet("percentage") = (objDisk.Freespace /objDisk.Size)*100
      objRecordSet("date") = strDate
      objRecordSet("time") = strTime


    objRecordSet.Update
     
Next
Next

objRecordSet.Close
objConnection.Close

'MsgBox ("Database updated!")

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device

Pagina: 1