Ovládáme (nejen) windows pomocí visual basic script 4. díl

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline
Kontakt:

Ovládáme (nejen) windows pomocí visual basic script 4. díl

Příspěvekod ITCrowd » 24 čer 2021 10:11

Přístup k souborům a složkám
VBS lze dobře použít ke kontrole souborů a složek, jejich mazání, přesouvání a kopírování. Stejně tak umí pracovat s textovými soubory, jakož i se soubory MSOffice. A samozřejmě lze pomocí skriptu spouštět programy.
Kontrola přítomnosti disku:

Kód: Vybrat vše

On Error Resume Next
Set fso = CreateObject("Scripting.FilesystemObject")
   drive = "D"
   If (Not fso.DriveExists(drive)) Then
     WScript.Echo "Jednotka " & drive & ": neexistuje"
   End If
Set oDrive = fso.GetDrive(drive)
   If (Not (oDrive.IsReady)) Then
     WScript.Echo "Jednotka " & drive & ": není připravena"
   End If
On Error GoTo 0
Set fso = Nothing

Všimněte si:
- Klíčové slovo On Error Resume Next říká, že skript bude pokračovat dál, i pokud bude vyvolána chyba. V takovém případě skript nevypíše chybovou hlášku, ale pokračuje na dalším řádku.
- Klíčové slovo On Error GoTo 0 říká, že od tohoto příkazu případná chyba způsobí zastavení skriptu s chybovou hláškou.
Vyzkoušejte si sami - stačí odmazat, nebo zakomentovat řádek s On Error Resume Next. V takovém případě, pokud testovaný disk neexistuje, skript skončí chybou.
- Metoda .DriveExists kontroluje, zda je disk přítomen
- Metoda .IsReady kontroluje, zda je disk připraven
Proč tomu tak je? U pevných disků, nebo flash disků lze metodu .IsReady vynechat. Je celkem logické, že pokud tento disk existuje, lze k němu přistupovat (za předpokladu, že není vadný a je naformátován). Ale pokud bychom testovali např. CD mechaniku, pak tato v systému přítomna je, ale pokud není vloženo medium, přistoupit k ní nelze. A k tomu právě slouží metoda .IsReady.
Kontrola přítomnosti adresáře - pokud neexistuje, vytvoř ho

Kód: Vybrat vše

Set fso = CreateObject("Scripting.FilesystemObject")
cesta = "D:\Zalohy\"
If (Not fso.FolderExists(cesta)) Then fso.CreateFolder(cesta)
Set fso = Nothing

Kontrola přítomnosti souboru:

Kód: Vybrat vše

Set fso = CreateObject("Scripting.FilesystemObject")
Const file = "C:\pagefile.sys"
If Not fso.FileExists(file) Then
   WScript.Echo "Soubor neexistuje"
Else
   WScript.Echo "Soubor existuje"
End If
Set fso = Nothing

Výpis složek:

Kód: Vybrat vše

Const path = "u:\Clanek\Testy\"

Text = "Složky" & vbCrLf & vbCrLf
Title = "Výpis složek - příklad"

Set WshShell = WScript.CreateObject("Wscript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

' Získání kolekce složek.
Set oFolders = fso.GetFolder(WshShell.ExpandEnvironmentStrings(path)) 
Set oSubFolders = oFolders.SubFolders

For Each oFolder In oSubFolders     
    Text = Text & oFolder.Name & vbCrLf
Next

MsgBox Text, vbOKOnly + vbInformation, Title

Set WshShell = Nothing
Set fso = Nothing
Set oFolders = Nothing
Set oSubFolders = Nothing
Výpis složek.png
Výpis složek
Výpis složek.png (4.54 KiB) Zobrazeno 1301 x

Podobným způsobem získáme výpis souborů. Jen místo kolekce složek vytváříme kolekci souborů:

Kód: Vybrat vše

Const path = "%WINDIR%\ShellNew"

Text = "Složka "
Title = "Výpis souborů - příklad"

Set WshShell = WScript.CreateObject("WScript.Shell")

' Vytvoření objektu pro přístup k souborům a složkám.
Set fso = CreateObject("Scripting.FileSystemObject")

' Objekt složky.
Set oFolder = fso.GetFolder(WshShell.ExpandEnvironmentStrings(path)) 

Text = Text & oFolder & vbCrLf & vbCrLf
Text = Text & "Název " & vbTab & vbTab & "Velikost " & vbCrLf
Set oFiles = oFolder.Files         ' Kolekce souborů

For Each oFile In oFiles         
    Text = Text & oFile.Name & vbTab
    Text = Text & FormatNumber(oFile.Size, 0) & vbTab
    Text = Text & vbCrLf
Next

MsgBox Text, vbOKOnly + vbInformation, Title

Set WshShell = Nothing
Set fso = Nothing
Set oFolder = Nothing
Set oFiles = Nothing
VypisSouboru.png
Výpis souborů
VypisSouboru.png (5.79 KiB) Zobrazeno 1301 x

Spouštění programů pomocí skriptu:

Kód: Vybrat vše

Const prikaz = "%WINDIR%\notepad.exe"
Set WshShell = WScript.CreateObject("WScript.Shell")
     WshShell.Run prikaz
Set WshShell = Nothing

Skript spustí notepad. Několik rad:
- použití mezer v názvu Pokud zadáváme plnou cestu příkazu i s mezerami, pak musíme i uvozovky dát do uvozovek. Příklad: WshShell.Run """C:\Program Files\Microsoft Office\Office\Excel.exe""", 1, True
- Parametry:
0 – Okno programu poběží skrytě na pozadí (ale bude vidět v procesech)
1 – Okno programu poběží viditelně ve výchozí velikosti (výchozí položka)
2 – Okno programu bude minimalizováno
3 – Okno programu bude maximalizováno
True – skript bude pokračovat v běhu až po skončení programu
False – skript na ukončení programu nečeká a pokračuje dál (výchozí položka)
Vyzkoušejte si - pokud doplníte v předchozím případě parametr "0", pak se notepad spustí, ale skrytě - okno nebude vidět. V běžících procesech ho ale najdete.

Příklad zálohování souboru:

Kód: Vybrat vše

'Konečný skript pro zálohování souboru wb5. fil
'Autor: Etienn@Script
'verze 1.0 19.6.2003
'
'Definice proměnných


Dim Titl
Dim Soubname
Dim Rok
Dim Mesic
Dim Den
Dim Hod
Dim Adrname
Dim WshShell
Dim Prikaz
Dim slozka
Dim zaladr
Dim fso
Dim path

' Přiřazení hodnot

Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FilesystemObject")
Titl = "Kontrolní hlášení"

Hod = Hour(Now())
Den = Day(Now())
Mesic = Month(Now())
Rok = Year(Now())

'  Vztvoření jména souboru

If Den < 10 Then Den = "0" & Den
If Mesic < 10 Then Mesic = "0" & Mesic
If Hod < 10 Then Hod = "0" & Hod
Soubname = Mesic & Den & Hod

'   Zadání adresáře a vytvoření příkazu

zaladr = "D:\zaloha\"
path = zaladr & Rok
Prikaz = "arj a d:\zaloha\" & Rok & "\" & soubname & " c:\winbase\wb5.fil"

'   Kontrolní zprávy - pro zfunkčnění odstraňte apostrofy

'MsgBox "Jméno souboru:  " & vbCrLf & vbCrLf & Soubname & ".arj", vbOKOnly + vbInformation, Titl
'MsgBox "Jméno složky je:   " & vbCrLf & vbCrLf & path, vbOKOnly + vbInformation, Titl
'MsgBox "Bude proveden následující příkaz:" & vbCrLf & vbCrLf & Prikaz, vbOKOnly + vbExclamation, Titl

'  kontrola zda cílový adresář existuje a jeho případné vytvoření

If (Not fso.FolderExists(path)) Then

   If (Not fso.FolderExists(zaladr)) Then _
      fso.CreateFolder(zaladr)

   fso.CreateFolder(path)

End If

'   Provedení příkazu

WshShell.Run Prikaz

'Konec scriptu


Tento skript jsem napsal kdysi dávno pro zálohy databázového souboru. Komprimace byla nutná, nekomprimovaný soubor byl příliš velký. Spouštění bylo zajištěno plánovačem úloh.

Příklad synchronizace složky:

Kód: Vybrat vše

Option Explicit
Dim i, fso, oDrive, strPath, WshShell, prikaz
Const drive = "U:"

' počáteční zpoždění
WScript.Sleep 60000

' Vytvoření FileSystemObjekt pro přístup k souboru
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
On Error Resume Next
If (Not fso.DriveExists(drive)) Then
'WScript.Echo "Jednotka" & drive & "neexistuje"
Else
  Set oDrive = fso.GetDrive(drive)
  If (Not oDrive.IsReady) Then
  Zobraz 10, "Není připojení k U:" & vbCrLf &  "Synchronizace nebude provedena.", 0, "Spouštění synchronizace"
  Else
  'WScript.Echo "OK"
  'Kontrola složky Návody na ploše ntb
  Set WshShell = Wscript.CreateObject("Wscript.Shell")
  strPath = WshShell.SpecialFolders("Desktop")
  strPath = StrPath & "\Návody"
  'WScript.Echo strPath
  If (Not fso.FolderExists(strPath)) Then fso.CreateFolder(strPath)
  'Synchronizace složky Návody se složkou U:\Navody
  prikaz = "ROBOCOPY U:\Navody " & strPath & " /E /MIR /XJ /R:0"
  'WScript.Echo prikaz
  WshShell.Run prikaz, 0
  End If
End If

Set fso = Nothing
Set oDrive = Nothing
Set WshShell = Nothing


'———————————————————————————————————————————————————————————————
' Funkce zobraz na určitý počet sekund
'———————————————————————————————————————————————————————————————
'Příklad zadání: (sekundy, "Zpráva", ikona, "Titulek"
' Zobraz 5, "Toto okno se zavře samo", 64, "Zpráva OK"
 Sub Zobraz(Seconds, Message, Ikona, Titulek)
 Dim objFuncShell
 If IsEmpty(objFuncShell) Then Set objFuncShell = CreateObject("wscript.shell")
 objFuncShell.Popup Message, Seconds, Titulek, Ikona + 4096
 End Sub

Skript synchronizuje složku "Návody" na ploše se složkou "U:\Navody". U: je v tomto případě síťový disk.
Spouštění je zajištěno vždy po přihlášení uživatele.
Jde o notebook, který nemusí být připojen k síti, tedy je nutno kontrolovat připojení síťového disku.
V případě, že je síťový disk připojen, provede synchronizaci pomocí příkazu robocopy.
Všimněte si:
Funkce "Zobraz" - je to funkce, která zobrazí okno se zprávou na určený počet sekund. To je věc, která obvyklým MsgBox (WScript.Echo) nejde.
Objekt WshShell.Run můžeme použít i jako funkci, kdy z návratové proměnné lze odečíst úspěšné či chybné provedení programu. Potom příkaz musí být v závorkách:
prikaz = "ROBOCOPY U:\Navody " & strPath & " /E /MIR /XJ /R:0"
ReturnCode = WshShell.Run(prikaz, 1, True)

Proměnná ReturnCode obsahuje návratovou hodnotu generovanou programem robocopy.
SpecialFolders - to jsou speciální složky windows. Patří mezi ně Plocha (Desktop), Nabídka Start, Po spuštění atd...
jaké jsou speciální složky vašeho systému lze zjistit skriptem:

Kód: Vybrat vše

Text = "Special Folder složky:" & _
    vbCrLf & vbCrLf
Title = "Příklad - výpis speciálních složek"

Set WshShell = WScript.CreateObject("WScript.Shell")

' Cesty ke speciálním složkám.
For Each i In WshShell.SpecialFolders
    Text = Text & i & vbCrLf
Next
Set WshShell = Nothing
WScript.Echo Text


"Poklepání" na link (zástupce):

Kód: Vybrat vše

Set WshShell = Wscript.CreateObject("Wscript.Shell")
' spouštění pravého ovládání
   strPath = WshShell.SpecialFolders("Desktop")
   prikaz = strPath & "\Ovladac.lnk"
   WshShell.Run prikaz
   WScript.Sleep 10500
' spouštění levého ovládání
   ' zástupce pro levý panel existuje?
   Set fso = CreateObject("Scripting.FileSystemObject")   
   prikaz = strPath & "\OvladacLevy.lnk"
   If (fso.FileExists(prikaz)) Then
   WshShell.Run prikaz   
   End If
   Set WshShell =  Nothing
   Set fso = Nothing

Použito pro technologické počítače s dotykovým ovládáním technologií. Zástupci (.lnk) obsahují parametry, zároveň je třeba nastavovat spouštění z určité cesty. Takže jednoduše tohle ošetřit nejde. Navíc existují zjednodušené počítače, které mají pouze jeden monitor. Vyřešeno skriptem tak, že spouští vždy základní instanci na pravém monitoru a ověří existenci levého zástupce. Pokud ho najde, spustí. Pokud chci z normálního stroje udělat zjednodušený, stačí odmazat (přejmenovat) levého zástupce. Analogicky lze použít pro povýšení zjednodušeného stroje na plnohodnotný. Počítače se spouští samy do určeného profilu, skript se startuje po spuštění, takže obsluha nemusí po restartu dělat nic.

Příklady z PC-HELP
Program pro automatické zkopírování složky z pc na flešku
Označení každého xtého řádku... - sloučení dvou textových souborů na základě pravidel
vbs skript pro zazipování 2 složek?
Poraďte mi, prosím, jak zpracovat víceřádkové reguláry
OUTLOOK: zasílání z excel databáze - hromadný e-mail na adresy v excelu

Teď už zvládáte základy práce se soubory a složkami. A příště se podíváme na možnosti VBS při práci se sítí.

Odkazy:
Ovládáme (nejen) windows pomocí visual basic script 1. díl
Ovládáme (nejen) windows pomocí visual basic script 2. díl
Ovládáme (nejen) windows pomocí visual basic script 3. díl
Ovládáme (nejen) windows pomocí visual basic script 4. díl
Ovládáme (nejen) windows pomocí visual basic script 5. díl
Ovládáme (nejen) windows pomocí visual basic script 6. díl
Ovládáme (nejen) windows pomocí visual basic script 7. díl
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Reklama
  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Windows 11 nelze zrušit přihlášení pomocí hesla PIN)
    od nulka » 17 srp 2023 11:08 » v Windows 11, 10, 8...
    9
    3381
    od nulka Zobrazit poslední příspěvek
    17 srp 2023 16:02
  • Windows XP emulátor na Windows 10 Příloha(y)
    od propi » 08 dub 2023 13:56 » v Windows 11, 10, 8...
    6
    2704
    od propi Zobrazit poslední příspěvek
    10 dub 2023 19:47
  • Windows 8.1 CMD
    od Daniel_Jackson » 29 dub 2023 13:33 » v Windows 11, 10, 8...
    4
    1522
    od petr22 Zobrazit poslední příspěvek
    29 dub 2023 14:38
  • Update Windows 10
    od liborek » 01 dub 2023 17:43 » v Windows 11, 10, 8...
    47
    4909
    od liborek Zobrazit poslední příspěvek
    08 dub 2023 11:33
  • Okenko Windows
    od Lebedil » 29 čer 2023 21:10 » v Problémy s hardwarem
    2
    738
    od Lebedil Zobrazit poslední příspěvek
    29 čer 2023 21:39

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti