VBS: Kopiowanie losowego pliku do wielu folderów

Miałem potrzebę przygotować sobie bazę danych do prezentacji. W folderach nazwanych symbolami towarów muszą znajdować się pliki graficzne, dzięki czemu będą one wyświetlane w kartotece towarowej. Czekało na mnie do edycji kilka tysięcy kartotek i mi się po prostu nie chciało robić tego ręcznie. Struktura katalogów została wygenerowana przy pomocy systemu TaskCentre na podstawie pobranych z bazy danych symboli towarowych, natomiast samo kopiowanie losowego pliku do folderu załatwił mi poniższy skrypt.

Dim max,min,rand
Dim filesys

Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Users\pawelk\Desktop\tw")
Set colSubfolders = objFolder.Subfolders
Set filesys = CreateObject("Scripting.FileSystemObject")

For Each objSubfolder in colSubfolders

    max=1
    min=27
    Randomize
    rand = Int((max-min+1)*Rnd+min)
    
    loc1 = "C:\Users\pawelk\Desktop\tw\LAMPY\" & rand & ".jpg"
    loc2 = "C:\Users\pawelk\Desktop\tw\" & objSubfolder.Name & "\"
    filesys.CopyFile loc1, loc2
    
    stdout.WriteLine objSubfolder.Name & " - " & rand   
Next

Poniższa ścieżka wskazuje gdzie znajdują się foldery do których skrypt ma dodać losowy obrazek

C:\Users\pawelk\Desktop\tw

W tej ścieżce losujemy obrazek z puli do pobrania. Zwróć uwagę na parametry MIN oraz MAX znajdujące się powyżej w pętli.

loc1 = "C:\Users\pawelk\Desktop\tw\LAMPY\" & rand & ".jpg"

Ta ścieżka informuje skrypt gdzie należy przekopiować wybrany obrazek

loc2 = "C:\Users\pawelk\Desktop\tw\" & objSubfolder.Name & "\"

Całość uruchamiamy komedną:

cscript \\nologo run.vbs

Jeżeli chcesz dumpa operacji zapisanego dodatkowo do pliku to wywołujemy go przy pomocy

cscript \\nologo run.vbs > out.vbs

Kasztelan Paweł

Programista samouk, zakochany w ZF i Laravel, szerzący opinię że PHP + JS + HTML + CSS to są języki w których może zostać stworzona aplikacja równie dobra, a nawet lepsza od twardego klienta.