acznijmy od czegoś łatwego: skryptu, który po prostu podaje listę wszystkich plików w folderze. Skrypt ten podaje nazwy wszystkich plików znalezionych w folderze C:\Scripts:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\Scripts"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Wscript.Echo objFile.Name
Next
Jak widzisz, to naprawdę nic wielkiego. Tworzymy wystąpienie FileSystemObject, a następnie używamy metody GetFolder, by połączyć się z folderem C:\Scripts. Proste. Gdybyśmy chcieli połączyć się z, dajmy na to, folderem Windows, musielibyśmy jedynie odpowiednio zmienić ścieżkę. Robimy to poprzez przypisanie objStartFolder innej wartości:
objStartFolder = "C:\Windows"
Kiedy już połączymy się z folderem, tworzymy odsyłacz do właściwości Pliki (Files), używając tej komendy:
Set colFiles = objFolder.Files
W odpowiedzi otrzymujemy kolekcję, zawierającą wszystkie pliki znalezione w folderze. (Jednakże – i ma to duże znaczenie dla Twojego drugiego pytania – kolekcja ta nie zawiera plików znalezionych w ewentualnych podfolderach C:\Scripts). W tym momencie cała reszta jest dziecinnie prosta: możemy teraz użyć pętli For Each (dla każdego), dzięki której – jeśli zechcemy – będziemy mogli wykonać jakąś operację na każdym z plików kolekcji. Pytałeś, jak uzyskać listę plików w folderze – tworzymy po prostu echo nazwy pliku. Możemy jednak zrobić o wiele więcej, na przykład, możemy uzyskać właściwość DateCreated (data utworzenia) lub właściwość Size (rozmiar). Dokładniejszy opis obiektu FileSystemObject oraz porady dotyczące użytkowania znajdziesz na stronie Script Runtime Primer (j.ang.) w Przewodniku po Skryptach Microsoft Windows 2000 (Microsoft Windows 2000 Scripting Guide). Innymi słowy, uzyskanie listy wszystkich plików w folderze jest trywialnie proste. Uzyskanie listy plików w folderze oraz wszystkich plików w podfolderach może już być trudniejsze. Potrzebujesz do tego skryptu cyklicznego.
Nie będziemy tu wyjaśniać zagadnienia cykliczności; po szczegóły odsyłamy do stosownego rozdziału w Microsoft Windows 2000 Scripting Guide (j.ang.) (fakt, robimy dziś tej książce niezłą reklamę). Ogólnie rzecz biorąc, funkcja cykliczna to funkcja, która potrafi automatycznie wywołać się dowolną ilość razy. Może nie brzmi to z początku sensownie, ale spójrzmy na to z tej strony: Skrypt, który pokazaliśmy powyżej, tworzy listę wszystkich plików w folderze, a następnie kończy działanie. Nieistotne, czy w folderze są jakieś podfoldery; skrypt nie zwraca na to uwagi.
Dla funkcji cyklicznej z kolei ma to znaczenie jak najbardziej: będzie ona działać tak długo, aż wykona wszystko, czego sobie od niej życzysz. Funkcja cykliczna utworzy listę wszystkich plików w folderze, a następnie sprawdzi, czy folder zawiera jakieś podfoldery. Załóżmy, że funkcja znajdzie podfoldery A i B. W takim wypadku funkcja wywoła się automatycznie i utworzy listę wszystkich plików w podfolderze A. Co jeśli w podfolderze A znajduje się pod-podfolder C? Żaden problem: funkcja wywoła się ponownie i wyświetli listę wszystkich plików w pod-podfolderze C. Proces ten będzie się powtarzać do momentu, gdy nie będzie już więcej podfolderów. W tym momencie funkcja cofa się i zaczyna działanie na podfolderze B. Co więcej, funkcja będzie posłusznie działać, dopóki nie sprawdzone zostaną wszystkie podfoldery, pod-podfoldery, pod-pod-podfoldery – cóż, dopóki wszystkie pliki co do jednego nie zostaną umieszczone na liście.
To wszystko wygląda na okropnie skomplikowane. I takie właśnie jest. Na szczęście jednak VBScript nie pokazuje Ci wszystkiego. Hej, czy moglibyśmy Cię co do tego oszukać? Spójrz, oto skrypt używający funkcji cyklicznej – ShowSubFolders – do tworzenia listy wszystkich plików w folderze C:\Scripts oraz wszystkich plików w ewentualnych podfolderach C:\Scripts:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\Scripts"
Set objFolder = objFSO.GetFolder(objStartFolder)
Wscript.Echo objFolder.Path
Set colFiles = objFolder.Files
For Each objFile in colFiles
Wscript.Echo objFile.Name
Next
Wscript.Echo
ShowSubfolders objFSO.GetFolder(objStartFolder)
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Wscript.Echo Subfolder.Path
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Wscript.Echo objFile.Name
Next
Wscript.Echo
ShowSubFolders Subfolder
Next
End Sub
Takie coś znalazłem , ale to raczej nie to Chociaż nie wiem ;(
/BQ/Kopiuj wklej. Każdy głupi tak potrafi. Jak nie masz pojęcia nie odzywaj się wcale. Do tego bez źródła. Jeszcze raz i warn.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum