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.
Hozzászólások
Miért épp vbscriptet szeretnél csinálni erre? Hol akadtál el?
Üdv,
Marci
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.
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
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"
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
í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".
Hogyan definiálod azt, hogy legfrissebb mappa?
Üdv,
Marci
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
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?:)
közben találtam rá megoldást lejjebb írtam, hogy ott akadtam meg, hogy csak a DATA kezdetű mappákat vizsgáljam.
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/left-function
:)
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
Szerintem a FileSystemObject elérhető VBscript-re is.
Nagyon ugy tunik. A felsorolas mogott van pelda is.
Udv.
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
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. Azinstr
-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 acompare
paramétert:instr(1, folder.Name, "DATA", 1)
.Csak név eleji egyezés + kis/nagybetű nem számít:
(Nálam jelenleg elég hanyag a HUP vbscript-formázása.)
:)
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:
valakinek van ötlete, hogy mi leheta probléma?
És mi a hibajelenség, mi működik és mi nem?
Üdv,
Marci
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.
LogonType?
:)