/ Forside/ Teknologi / Udvikling / VB Scripts / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB Scripts
#NavnPoint
technet 385
MouseKeep.. 300
Dark_Magi.. 250
natmaden 200
Harlekin 200
AntonV 200
EXTERMINA.. 200
gandalf 160
smorch 139
10  strarup 110
Script til opgavestyring i Windows 7
Fra : ThomasCSR
Vist : 1134 gange
100 point
Dato : 23-02-13 10:17

Jeg har ved hjælp af diverse exempler fundet på nettet skrevet en rutine, der exekveres hver 5. minut via "Opgavestyring".
Nu vil jeg gerne udbygge denne rutine, så den kun exekveres, hvis en given mappe er tom.
Jeg har forestillet mig noget i denne retning:

Din s As String
s = Dir("sti til mappen", vbNormal Or vbDirectory)
If s <> "." And s <> ".." Then Else
'Her kommer så den rutine, jeg allerede har til at virke.
End If

Det er noget jeg har forsøgt at skrabe ud af en funktion fundet på nettet.
Jeg aner ikke om "Dir", "vbNormal" m.v er brugbare, men ser det rigtigt ud?

 
 
Kommentar
Fra : ThomasCSR


Dato : 23-02-13 18:13

Okay. Der er ikke kommet nogle svar, så here goes:
Jeg har en Emit-server kørende på min PC. Med den kan jeg streame mine film til mine venner (og mig selv, når jeg ikke er hjemme). Wake op er beskrevet mange steder, men at lukke PCen igen, er lidt sværere.
Nu er det jo ikke smart at lukke PCen, mens nogen bruger serveren, så derfor må shutdown-rutinen tjekke, om den er aktiv. Det er heller ikke smart, hvis der lukkes ned i samme øjeblik nogen vil se en anden film, men blot lige skal have den startet. Derfor er det bedst at vente lidt med evt nedlukning.
Jeg har bakset med et skript, der kører i baggrunden (startet med opgavestyringen og som gennemløbes hver 5. minut). Skripter leder efter en fil i en dropboxmappe eller som i mit tilfælde i en mappe på min NAS ftp-server. Findes denne fil, lukkes PCen, men ikke hvis nogen streamer film via Emit. Hvis det er tilfældet, ofrettes en "hold-fil", der får rutinen til at vente "en omgang" med nedlukningen. Rutinen er skrevet til Windows 7. Jeg ved ikke, om den kører på andre versioner, f.ex kan stierne være anderledes. Men her er den:

Dim fl2
Set fl2 = CreateObject("Scripting.FileSystemObject")
Dim fl1
Set fl1 = CreateObject("Scripting.FileSystemObject")
Dim objFSO, objFolder
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("c:\Users\<Brugers navn her>\AppData\Local\Temp\Emit\")
Dim oShell
Set oShell = CreateObject("WScript.Shell")
Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (fl2.FileExists("c:\Users\<Brugers navn her>\AppData\Local\Temp\Emit\Hold.txt")) then
   fl2.DeleteFile("c:\Users\<Brugers navn her>\AppData\Local\Temp\Emit\Hold.txt")
Else
   If (objFolder.Files.Count = 0 And objFolder.SubFolders.Count = 0) Then
      If (fl1.FileExists("<Dropbox eller NAS mappe, hvor du remote kan placere en fil>\<fil, du vil lukke computeren med>")) Then
         fl1.DeleteFile("<Dropbox eller NAS mappe, hvor du remote kan placere en fil>\<fil, du vil lukke computeren med>")) ")
         oShell.Run "%comspec% /c shutdown /s /t 5 /f", , TRUE
      End If
   Else
      If (fl2.FileExists("c:\Users\<sti til der, hvor du gemmer en tom fil med navnet: Hold.txt>\Hold.txt")) Then
         objFSO.CopyFile "c:\Users\<sti til der, hvor du gemmer en tom fil med navnet: Hold.txt>\Hold.txt", "c:\Users\<Brugers navn her>\AppData\Local\Temp\Emit\Hold.txt", OverwriteExisting
      End If
   End If
End If

________________
Det ser rodet ud, men kopier teksten ind i notepad eller lignende. Så burde det være læseligt.
(Efter alle de fejl, jeg har laver under prøvekørslen, tror jeg ikke, at der er noget, der kan gå galt, men nogen garanti kan jeg ikke give.)
Det mellem < og > er her du selv skal skrive noget.
Nu oploader du bare din "shutdownfil" remote, og så lukkes der ned. Skripter virker også, selv om du ikke bruger Emit. Det kan jo være, du sidder på Mallorca og tænker: fik jeg nu slukket for PCen? Så kan du gøre det med dette skript.


Kommentar
Fra : ThomasCSR


Dato : 23-02-13 18:16

Herefter tillader jeg mig at annulere spørgsmålet, selv om jeg kan forstå, at det ikke er populært at gøre.

Kommentar
Fra : EXTERMINATOR


Dato : 23-02-13 18:22

1. Du mener naturligvis Dim s As String
2. s = Dir("sti til mappen", vbNormal Or vbDirectory) ?????? Du har glemt at give os funktionen Dir, uden koden til funktionen Dir er det jo lidt svært at udtale sig om.

Jeg ville istedet for tælle filer og mapper i den angivne mappe og hvis antallet af filer er 0 så er den tom
Jeg ville også lige teste om mappen eksisterer inden jeg begynder, for at undgå fejl.

Kode
Dim FSO, TMappe
Set FSO = CreateObject("Scripting.FileSystemObject")
Mappe = "d:\intel1\"
If FSO.FolderExists(Mappe) Then
Set TMappe = FSO.GetFolder(Mappe)
If TMappe.Files.Count = 0 And TMappe.SubFolders.Count = 0 Then
MsgBox "Mappen er tom"
Else
MsgBox "Mappen er ikke tom"
End If
Else
MsgBox "Mappen " & Mappe & " Findes ikke"
End If


Kommentar
Fra : EXTERMINATOR


Dato : 23-02-13 18:25

Citat
Herefter tillader jeg mig at annulere spørgsmålet, selv om jeg kan forstå, at det ikke er populært at gøre.


Kommentar
Fra : ThomasCSR


Dato : 23-02-13 18:26

Tak skal du have. Jeg ANER som sagt INTET om VB, så det var blot noget jeg havde pelset på nettet. Som du ser, har jeg ikke ligget på den lade side her til eftermiddag. Skripter, jeg har oploadet er bugget udelukkende af stumper, jeg har fundet på netter (og så min fortid i programmering i Pascal, der dog har ligheder med VB).

Accepteret svar
Fra : EXTERMINATOR

Modtaget 100 point
Dato : 23-02-13 21:30

Jeg var ved at skrive en hel masse men har i stedet pyntet lidt på dit script

Kode
Dim objFSO, objFolder, oShell ' Saml dine Dim statements
Const OverwriteExisting = True ' Put dine konstanter øverst i scriptet så det er nemmere at se hvad du har defineret
'***************************************
Mappe1 = "d:\intel1" 'Definer stien til emit et sted så der ikke skal rettes flere steder i scriptet
LukFil = "d:\intel2\Hold.txt" ' Din dropboks eller nas
HoldFil = "d:\intel1\Hold.txt" 'Igen, definer filen et sted så der ikke er flere steder der skal rettes
'***************************************

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Mappe1)
Set oShell = CreateObject("WScript.Shell")

If objFSO.FileExists(HoldFil) then
objFSO.DeleteFile(HoldFil)
Else
If objFolder.Files.Count = 0 And objFolder.SubFolders.Count = 0 Then
If objFSO.FileExists(LukFil) Then
objFSO.DeleteFile(LukFil)
       MsgBox "Vi lukker og slukker" ' Til test laver vi en msgbox i stedet for at slukke
'oShell.Run "%comspec% /c shutdown /s /t 5 /f", , TRUE
End If
Else
ObjFso.CreateTextFile HoldFil, True ' Vi opretter filen, ingen grund til at kopiere en tom fil ;)
End If
End If


Citat
Det ser rodet ud, men kopier teksten ind i notepad eller lignende.

Jeg vil på det kraftigste anbefale Notepad++ http://notepad-plus-plus.org/ istedet for notesblok da den har syntaks highlighting

Godkendelse af svar
Fra : ThomasCSR


Dato : 24-02-13 19:42

Tak for svaret EXTERMINATOR.

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407825
Brugere : 218875

Månedens bedste
Årets bedste
Sidste års bedste