2017-08-15 1 views
1

Ich schreibe ein VBScript, um den Datum/Uhrzeit-Wert (insbesondere vor 2:00 Uhr, um den letzten Tag Wert zu erhalten). Gibt es eine Feinabstimmung, anstatt den Wert an einen anderen Stapel zu übergeben und den Batch1 zum Aufruf von VBScript und dann den Batch2 (in VBScript erstellt) zu verwenden? Vielen DankFeinabstimmung VBScript

dim dateMonth, dateDay, dateYear, dateYY, dateMMM, MM, pDateDay 
'Check Time 
if hour(now) < 2 then 'Before 2AM, count as last working day 
    dateMonth = Month(dateadd("d",-1,now)) 
    dateDay  = Day(dateadd("d",-1,now)) 
    dateYear = Year(dateadd("d",-1,now)) 
    dateYY  = right(year(dateadd("d",-1,now)),2) 
    TimeHH  = Hour(now) 
    TimeMM  = Minute(now) 
else 
    dateMonth = Month(now) 
    dateDay  = Day(now) 
    dateYear = Year(now) 
    dateYY  = right(year(now),2) 
    TimeHH  = Hour(now) 
    TimeMM  = Minute(now) 
end if 

MM = Array("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") 
dateMMM = mm(dateMonth) 
if dateMonth < 10 then 
    dateMonth = "0" & dateMonth 
end if 
If dateDay < 10 then 
    dateDay = "0" & dateDay 
End if 
If TimeHH < 10 then 
    TimeHH = "0" & TimeHH 
End if 
If TimeMM < 10 then 
    TimeMM = "0" & TimeMM 
End if 


Set objFSO=CreateObject("Scripting.FileSystemObject") 

' Create Log file 
Dim oFSO, oTxtFile, curDir 
Set oFSO = CreateObject("Scripting.FileSystemObject")  
curDir = oFSO.GetAbsolutePathName(".") 
strFile = "\datetime.bat" 
If oFSO.FileExists(curDir & strFile) then 
     oFSO.DeleteFile curDir & strFile 
end if 

strValue = "SET Date_MMDD=" & dateMonth & dateDay 
strValue = strValue & vbcrlf & "SET Date_MM=" & dateMonth 
strValue = strValue & vbcrlf & "SET Date_MMM=" & dateMMM 
strValue = strValue & vbcrlf & "SET Date_DD=" & dateDay 
strValue = strValue & vbcrlf & "SET Date_HHMM=" & TimeHH & TimeMM 
strValue = strValue & vbcrlf & "SET Time_HH=" & TimeHH 
strValue = strValue & vbcrlf & "SET Time_MM=" & TimeMM 


Set oTxtFile = oFSO.CreateTextFile(curDir & strFile) 
oTxtFile.writeline(strValue) 

wscript.echo strValue 

set oTxtFile = nothing 
set oFSO = nothing 
+1

Was Sie in der Batch-Skripte tun tun müssen das können Sie nicht direkt in VBScript tun? – BoffinbraiN

Antwort

0

Ich bin mir nicht sicher, ob Sie eine Batch-Skript direkt von VBScript ausführen mögen, aber falls diese Option verfügbar ist, brauchen Sie nicht eine Datei überhaupt zu erzeugen, zu schreiben - Sie kann das Datum und andere Informationen mithilfe von Befehlszeilenparametern übergeben.

Im folgenden Beispiel habe ich Ihren Datumscode vereinfacht und dann einige Felder in eine Batchdatei übergeben, die sie in VBScript zurückmeldet, um sie in einem Meldungsfeld anzuzeigen. Sie können sich an Ihre Bedürfnisse anpassen.

test.vbs:

Option Explicit 

Dim runDate : runDate = Now() 
If Hour(runDate) < 2 Then runDate = DateAdd("d", -1, runDate) 

Dim runYear : runYear = Year(runDate) 
Dim runMonth : runMonth = MonthName(Month(runDate), True) 
Dim runDay : runDay = Day(runDate) 
' Etc... 

Dim parameters : parameters = Join(Array(runYear, runMonth, runDay), " ") 

' See https://stackoverflow.com/a/45284140/534406 for the below code 

Const WshRunning = 0 
Const WshFinished = 1 
Const WshFailed = 2 

Dim shell : Set shell = CreateObject("WScript.Shell") 
Dim exec : Set exec = shell.Exec("test.bat " & parameters) 

While exec.Status = WshRunning 
    WScript.Sleep 50 
Wend 

Dim output 

If exec.Status = WshFailed Then 
    output = exec.StdErr.ReadAll 
Else 
    output = exec.StdOut.ReadAll 
End If 

WScript.Echo output 

test.bat

@echo off 
set Year=%1 
set Month=%2 
set Day=%3 
echo Year %Year% Month %Month% Day %Day% 

Ausgang (für heute, nach 02.00 Uhr):

Year 2017 Month Aug Day 15 
+1

Vermeiden Sie [das Rad neu erfinden] (https://msdn.microsoft.com/en-us/library/58f13257). –

+0

@AnsgarWiechers Danke. Ich bin angenehm überrascht, dass VBS sogar eine solche Funktion hat, da es in anderen Bereichen wie Formatierungstermine fehlt! – BoffinbraiN

+0

Da gab es einige Old-School-Batch (Commandline Batch), die ich nicht ändern möchte. Daher brauche ich ein zusätzliches Skript, um den Tag zu berechnen. In der Vergangenheit verwendete das Skript Batch (.bat), um mehrere Operationen zu verarbeiten, und jetzt wird der Job bis 00:00 übergeben, daher wird der Tageswert geändert, aber wir brauchen den letzten Arbeitstag (oder letzten Tag) Tageswert. – Raymond

Verwandte Themen