Sziasztok,
VBScriptel kapcsolatban szeretnék segítséget kérni.
Olyan VBScriptet szeretnék csinálni amely megnézi egy adott fájl aktuális méretét és a legutolsó módosításának a dátumát és ezt kiiratnám egy html felületre.
Ha ez megvan akkor kibővíteném úgy, hogy egy adott mappába megnézném, hogy melyik belső mappa a legfrissebb.
Mivel kezdő vagyok a témában, eddig működő verziót nem sikerült létrehoznom és a neten sem találtam semmi használható megoldást erre.
Köszönöm a segítséget.
- 466 megtekintés
Hozzászólások
Miért épp vbscriptet szeretnél csinálni erre? Hol akadtál el?
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
azért vbscriptet, mert már van egy nagyobb működő lekérdezés csoport amihez szeretném majd hozzárakni ezeket.
jelenleg itt tartok:
Dim fso:Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Dim oFolder:Set oFolder = fso.GetFile( "file elérési út")
Wscript.Echo "Fájl neve "& oFolder.Name & " : " & round(oFolder.Size/1024/1024,2)&" MB"
ez működik szépen kiírja a file méretét, de a dátumát nemtom hogy kell.
- A hozzászóláshoz be kell jelentkezni
Wscript.Echo "Fájl utolsó módosítás : " & (oFolder.DateLastModified)
Érdemes olvasni a lentebb linkelt doksit: https://ss64.com/vb/filesystemobject.html
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
köszi így sikerült kiírja a dátumot is szépen.
viszont azzal a hibával szembesültem, hogy ha egymás után több fájlnak az adatait akarom kiiratni mindig csak a "sorban" utolsót írja ki. mit csinálok rosszul?
//az "strbody5" el egy html felületre iratom ki.
Dim objFS, objFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile("\\fájl elérési út\fájl")
strBody5= "<hr> "& objFile.Name & " utolso modositasanak datuma: "& objFile.DateLastModified &"<hr> "& objFile.Name & " merete: " & round(objFile.Size/1024/1024,2)&" MB"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile("\\fájl elérési út\fájl2")
strBody5= "<hr> "& objFile.Name & " utolso modositasanak datuma: "& objFile.DateLastModified &"<hr> "& objFile.Name & " merete: " & round(objFile.Size/1024/1024,2)&" MB"
- A hozzászóláshoz be kell jelentkezni
Az utolsó sor strBody5= akármi utasítása felülírja akármivel a strBody5 változó eddigi tartalmát, ahelyett, hogy hozzáfűzné a korábbihoz. Inkább így legyen:
strBody5= strBody5 & akármi
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
így sikerült köszönöm :)
és szerinted azt, hogy adott mappába megnézném, hogy melyik belső mappa a legfrissebb azt hogyan érdemes megcsinálni?
gondoltam először végigmegyek az adott mappák módosítási dátumán egy "foreach-el".
- A hozzászóláshoz be kell jelentkezni
igen pontosítom bocsi.
Azt szeretném vizsgálni, hogy van egy mappa amibe naponta generálódik sok, DATA... kezdőnevű mappa és ezek közül szeretném azt kiiratni, amelyik a script futtatásának idejéhez képest a legutóbb jött létre. Vagyis melyik a legkésőbb létrejött DATA% kezdőnevű mappa.
A mappák nevei úgy generálódnak, hogy data+időpont, ezért arra gondoltam, hogy valami if-es vizsgálattal megnézem DATA% és utána a létrejöttének az időpontját vizsgálom valahogy, de itt el is akadtam :D
- A hozzászóláshoz be kell jelentkezni
Ebben pontosan mi okoz nehézséget? Vannak rá kész példák, megtalálod. Ha vannak/lesznek/lehetnek a könyvtárban nem DATA*
nevű könyvtárak is, akkor elhelyezel egy ezt vizsgáló feltételes utasítást. Ha nem tudod, hogyan kell karakterláncot vizsgálni, rákeresel, megérted, alkalmazod. Te is leírtad, mit kellene csinálni ("foreach", "if"), szóval jó lenne tudni, mi akadályoz meg abban, hogy csináld? Nem egyértelmű a nyelv szintaktikája, vagy hol akad el a folyamat?
:)
- A hozzászóláshoz be kell jelentkezni
közben találtam rá megoldást lejjebb írtam, hogy ott akadtam meg, hogy csak a DATA kezdetű mappákat vizsgáljam.
- A hozzászóláshoz be kell jelentkezni
találtam egy ilyen scriptet:
és ez le is fut szépen csak azt nemtom, hogy hogyan pontosítsam, hogy csak a DATA kezdőnevűeket irassa ki.
Erre esetleg van ötleted?
Function GetRecentFolder(path)
Dim fso, folder
Set fso = CreateObject("Scripting.FileSystemObject")
Set GetRecentFolder = Nothing
For Each folder in fso.GetFolder(path).SubFolders
If GetRecentFolder is Nothing Then
Set GetRecentFolder = folder
ElseIf folder.DateLastModified > GetRecentFolder.DateLastModified Then
Set GetRecentFolder = folder
End If
Next
End Function
Dim recentFile
Set recentFile = GetRecentFolder("c:\Elérési út")
If recentFile is Nothing Then
WScript.Echo "No recent files found"
Else
WScript.Echo "Recent file is " & recentFile.Name & " " & recentFile.DateLastModified
End If
- A hozzászóláshoz be kell jelentkezni
Szerintem a FileSystemObject elérhető VBscript-re is.
- A hozzászóláshoz be kell jelentkezni
Nagyon ugy tunik. A felsorolas mogott van pelda is.
Udv.
- A hozzászóláshoz be kell jelentkezni
Sikerült megcsinálni a scriptet, itt van hátha más is tudja hasznosítani:
Function GetRecentFolder(path)
Dim fso, folder
Set fso = CreateObject("Scripting.FileSystemObject")
Set GetRecentFolder = Nothing
For Each folder in fso.GetFolder(path).SubFolders
If GetRecentFolder is Nothing Then
Set GetRecentFolder = folder
ElseIf folder.DateLastModified > GetRecentFolder.DateLastModified AND instr (folder.Name, "DATA") Then
Set GetRecentFolder = folder
End If
Next
End Function
- A hozzászóláshoz be kell jelentkezni
Hibás eredményt adhat, mert az összehasonlításból nincs kizárva a DATA
karakterláncot nem tartalmazó könyvtárnevek vizsgálata. Az instr
-t vidd a feltételes utasításon kívülre.
Ha valóban csak könyvtárnév eleji egyezést szeretnél, az instr(...) = 1
formát használd.
Ha azt szeretnéd, hogy ne számítson a kis/nagybetű, használd az Option Compare
utasítást, vagy a compare
paramétert: instr(1, folder.Name, "DATA", 1)
.
Csak név eleji egyezés + kis/nagybetű nem számít:
Function GetRecentDATAFolder(path)
Dim fso, folder
Set fso = CreateObject("Scripting.FileSystemObject")
Set GetRecentDATAFolder = Nothing
For Each folder In fso.GetFolder(path).SubFolders
If InStr(1, folder.Name, "DATA", 1) = 1 Then
If GetRecentDATAFolder Is Nothing Then
Set GetRecentDATAFolder = folder
ElseIf folder.DateLastModified > GetRecentDATAFolder.DateLastModified Then
Set GetRecentDATAFolder = folder
End If
End If
Next
End Function
(Nálam jelenleg elég hanyag a HUP vbscript-formázása.)
:)
- A hozzászóláshoz be kell jelentkezni
Olyan scriptet szeretnék még létrehozni ami egy adott szerveren megnézi a belépett usereket, kiírja aki bevan jelentkezve.
Eddig ezt találtam de nem működik.
Így néz ki a script:
strComputer = "."
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSessions = objWMI.ExecQuery _
("Select * from Win32_LogonSession Where LogonType = 10")
If colSessions.Count = 0 Then
Wscript.Echo "No interactive users found"
Else
WScript.Echo "RDP Sessions:"
For Each objSession in colSessions
Set colList = objWMI.ExecQuery("Associators of " _
& "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
& "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )
For Each objItem in colList
WScript.Echo "Username: " & objItem.Name & " FullName: " & objItem.FullName
Next
Next
End If
valakinek van ötlete, hogy mi leheta probléma?
- A hozzászóláshoz be kell jelentkezni
lefutás után csak a "No interactive users found" adja vissza, pedig van bejelentkezett felhasználó.
Több szerveren és gépen is teszteltem.
- A hozzászóláshoz be kell jelentkezni