Windows - Fájlműveletek scriptek-ből

Windows Scripting Host 6. rész

forráskód letöltése
Sorozatunk jelen részében azt tanuljuk meg, hogy a WSH milyen támogatást nyújt az alapvető fájlműveletek elvégzésében. VBScript-ek segítségével fájlokat és könyvtárakat fogunk másolni, mozgatni, törölni. Továbbá megnézzük még könyvtárak létrehozását és annak ellenőrzését, hogy az adott fájl vagy könyvtár létezik-e. Cikkünkhöz mellékelve megtalálhatók a példákban szereplő szkriptek a következőket megvalósítva:

"FolderCreate.vbs" - Leellenőrzi a "c:\proba" mappa meglétét, ha nem talál ilyet létrehozza.
"CopyFolder.vbs" - Másolatot készít a "c:\proba" mappáról és tartalmáról "c:\proba2" néven.
"DeleteFolder.vbs" - Törli a "c:\proba" mappát a teljes tartalmával együtt.
"CopyFile.vbs" - Átmásolja a "c:\winnt\winnt256.bmp" fájlt a "c:\" gyökérkönyvtárba.
"DeleteFile.vbs" - Törli a "c:\winnt256.bmp" nevű fájlt.

A szkriptekben szereplő elérési utak feltételezik a Windows 2000 "c:\winnt" helyre történő telepítését. Ettől eltérő esetben módosításokra lehet szükség a forráskódban.

A fájlokkal végzett műveleteket a FileSystemObject (FSO) nevű objektumom keresztül lehet elvégezni. Teljeskörű szolgáltatást nyújt a fájlok és könyvtárak létrehozására, másolására és átmozgatására.

Első lépésben létre kell hozni egy objektum változót, ennek minden FileSystemObject-et használó szkriptben szerepelnie kell.
Dim FSO
Set FSO = CreateObject("Scripting. FileSystemObject ")

Fájlok másolását a CopyFile metódussal hajthatjuk végre a "CopyFile forrás, cél" szintaxis szerint, ahol a két paraméter (forrás, cél) egy-egy karakterlánc. Így a hagyományos sztringműveletekkel módosítható (pl.: "c:\winnt" + "\system32" = "c:\winnt\system32").
Másoljuk ki a c:\winnt mappából a "winnt256.bmp" fájlt a c:\ gyökérkönyvtárba ugyanolyan néven:
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject ")
FSO.CopyFile "c:\winnt\winnt256.cmp", "c:\"
Ha a másolatnak más nevet akarunk adni, a célnál csak meg kell adnunk az új nevet:
FSO.CopyFile "c:\winnt\winnt256.cmp", "c:\újnév.bmp"
Bővítsük ki a kódot úgy, hogy vizsgálja meg a cél létezését és csak akkor hajtsa végre a másolást, ha nem létezik. A "FileExists (fálnév)" metódust fogjuk erre használni:
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
    if (FSO.FileExists ("c:\winnt256.bmp")) then
      MsgBox "Ilyen nevű fájl már van."
    else
     FSO.CopyFile "c:\winnt\winnt256.bmp", "c:\"
    end if
A fájlok átmozgatása a "MoveFile (forrás, cél)" metódussal lehetséges.

Mappák létrehozása és meglétének ellenőrzése:

A mappák meglétét a "FolderExists(mappanév)" függvénnyel lehet ellenőrizni, ha a "mappanév" paraméterben megadott könyvtár létezik, akkor a visszatérési értéke: TRUE.
Létrehozni a "CreateFolder (mappanév)" metódussal lehet, ilyenkor azonban nem történik ellenőrzés, ha már van egy olyan mappa amit létre akarunk hozni, akkor egyszerűen egy "Hiba: A fájl már létezik" hibaüzenettel leáll a szkript. Ezért a két eljárás kombinációját célszerű használni.
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
    if (FSO.FolderExists ("c:\proba")) then
      MsgBox "Ilyen nevű mappa már van."
    else
      FSO.CreateFolder "c:\proba"
    end if

Következik a mappák és tartalmuk - beleértve az almappákat is - másolása:

A parancs szintaxisa hasonló a fájlmásoláséhoz: "CopyFolder forrásmappa, célmappa"
A teljes kód:
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
CopyFolder "c:\proba", "c:\proba2"
Átmozgatni is lehet a mappákat, ehhez a "MoveFolder (forrás, cél)" metódust kell alkalmazni.

Végül lássuk a törlő parancsokat:

Fájlok törlésére szolgáló parancs a "DeleteFile (fájlnév, force)". Ahol a "fájlnév" a törlendő fájl neve elérési úttal együtt, a "force" pedig nem kötelezően megadandó paraméter, ha értéke TRUE, akkor abban az esetben is végrehajtódik a törlés, ha írásvédett fájlról van szó. FALSE értéknél nem. Amikor nem adjuk meg ezt a paramétert, akkor a FALSE szerint fog működni.
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile ("c:\winnt256.bmp")

Könyvtárakat így törölhetünk:
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFolder ("c:\proba")
Ahol a DeleteFolder metódusra ugyanaz vonatkozik, mint a DeleteFile-ra. Fontos, hogy a kijelölt könyvtárat az alkönyvtáraival és fájljaival együtt törli.
A következő részben a FileSystemObject-en belüli további metódusokkal ismerkedünk meg.





Windows Scripting Host cikksorozat