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
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
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