Poslao: 23 Apr 2014 22:32
|
offline
- Pridružio: 30 Jun 2009
- Poruke: 403
|
Imam potrebu kopirati specifične datoteke koje se nalaze na popisu u datoteci popis.txt
Ovaj popis sadrži putanje (path) i naziv datoteka.
Treba mi VBS skripta ili program koji će uraditi slijedeće
1. pri pokretanju pogledati u datoteku popis.txt
2. vidjeti putanju prve datoteke
3. otići u "source" direktorij pronaći je i kopirati zajedno sa nazivom foldera ili subfoldera u destinacijski direktorij
4. ponovo pogledati slijedeću drugu i tako redom do kraja
Varijante mogu biti različite tj kako je lakše isprogramirati VBS skriptu ako nema programa koji ovo može odraditi.
Varijanta A: po principu redirect
datoteka popis.txt sadrži slijedeće
C:\Temp\source\folderA-1\file77.html => C:\Temp\destination\folderA-1\file77.html
C:\Temp\source\folderA-1\subsubfolder-1\file145.html => C:\Temp\destination\folderA-1\subsubfolder-1\file145.html
C:\Temp\source\folderA-1\subsubfolder-1\file37.html => C:\Temp\destination\folderA-1\subsubfolder-1\file37.html
C:\Temp\source\folderA-2\file18.html => C:\Temp\destination\folderA-2\file18.html
...
...
itd...do nekoliko stotina datoteka
Varijanta B:
datoteka popis.txt sadrži slijedeće
Jednostavno da pogleda popis i napravi kopiju u destinacijskom direktoriju.
C:\Temp\source\folderA-1\file77.html
C:\Temp\source\folderA-1\subsubfolder-1\file145.html
C:\Temp\source\folderA-1\subsubfolder-1\file37.html
C:\Temp\source\folderA-2\file18.html
...
...
itd...do nekoliko stotina datoteka
Zna li netko postoji li program koji ovo može odraditi ili možda netko ima već gotovu VBS skriptu.
U attachu već gotov završen ovaj primjer
Ima li tko viška slobodnog vremena (unaprijed zahvalan)
https://www.mycity.rs/must-login.png
[EDIT]:
Pokušavam sa naredbom "xcopy" iz CMD programa ali nikako da postavim switch koji će ignorirati bilo kakvo pitanje o potvrdi.
evo slika u prilogu
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 24 Apr 2014 13:31
|
offline
- Pridružio: 25 Maj 2005
- Poruke: 1482
- Gde živiš: Gracanica, Kosovo
|
Uz minimum testiranja evo nesto sto ne radi ali ti moze dati neku ideju:
C:\Users\dgudzic>type primer.txt
C:\Users\dgudzic\Desktop\PY_Sqlite3\Newfolder
C:\Users\dgudzic\Desktop\PY_Sqlite3\serbdict.db
C:\Users\dgudzic\Desktop\PY_Sqlite3\serbdict.py
C:\Users\dgudzic\Desktop\PY_Sqlite3\sqlite3.exe
C:\Users\dgudzic\Desktop\PY_Sqlite3\test2
C:\Users\dgudzic\Desktop\PY_Sqlite3\Newfolder\Nesto_lptp_desk.xlsx
C:\Users\dgudzic\Desktop\PY_Sqlite3\Newfolder\usbDetecter.py
C:\Users\dgudzic\Desktop\PY_Sqlite3\test2\asdasd.txt
Evo komande kojom sam izlistao fajl i kopirao fajlove:
C:\Users\dgudzic>for /f "delims= " %i in (primer.txt) do xcopy "%i" "Desktop\tester" /e /s /y
Medjutim, fajlovi su kopirani kao i folderi, ali nisu na svojim mestima, tj. svi fajlovi su u jednom folderu (iako su folderi kopirani ispravno):
C:\Users\dgudzic>dir Desktop\tester /b /s
C:\Users\dgudzic\Desktop\tester\asdasd.txt
C:\Users\dgudzic\Desktop\tester\Milena-Milovan_lptp_desk.xlsx
C:\Users\dgudzic\Desktop\tester\Newfolder
C:\Users\dgudzic\Desktop\tester\serbdict.db
C:\Users\dgudzic\Desktop\tester\serbdict.py
C:\Users\dgudzic\Desktop\tester\sqlite3.exe
C:\Users\dgudzic\Desktop\tester\test2
C:\Users\dgudzic\Desktop\tester\usbDetecter.py
Verovatno samo treba da se primene neke druge opcije, ne znam, ali ti mozda da neku ideju.
|
|
|
|
Poslao: 24 Apr 2014 19:59
|
offline
- dr_Bora
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Anti Malware Fighter
Rank 2
- Pridružio: 24 Jul 2007
- Poruke: 12280
- Gde živiš: Höganäs, SE
|
Mislim da ovo radi tu prvu varijantu koju pominješ.
1. Drag and drop spiska file-ova
2. Uneti source - skripta će da ponudi kao source onaj folder u kome se nalazi prvi file u listi, ali ti možeš odabrati koji želiš nivo
3. Uneti destination
Npr. C:\windows\system32\aclui.dll
Ako je source C:\windows\system32 => C:\destination\aclui.dll
Ako je source C:\windows => C:\destination\system32\aclui.dll
Ako je source C:\ => C:\destination\windows\system32\aclui.dll
Set oFSO = CreateObject( "Scripting.FileSystemObject" )
Set Shell = CreateObject("WScript.Shell")
Sub CreateDirs(DirName)
strDir = oFSO.GetAbsolutePathName(DirName)
arrDirs = Split(strDir, "\")
If Left(strDir, 2) = "\\" Then
strDirBuild = "\\" & arrDirs(2) & "\" & arrDirs(3) & "\"
idxFirst = 4
Else
strDirBuild = arrDirs(0) & "\"
idxFirst = 1
End If
For i = idxFirst To UBound(arrDirs)
strDirBuild = oFSO.BuildPath(strDirBuild, arrDirs(i))
If Not oFSO.FolderExists(strDirBuild) Then
oFSO.CreateFolder strDirBuild
End If
Next
End Sub
If WScript.Arguments.length = 0 Then
MsgBox "Drag and drop a list of files!"
WScript.Quit
End If
sPathToList = WScript.Arguments(0)
If Not oFSO.FileExists(sPathToList) Then
MsgBox "No such file!"
WScript.Quit
End If
On Error Resume Next
Set oPopis = oFSO.OpenTextFile(sPathToList, 1)
If Err Then
MsgBox "Can't open this file!"
WScript.Quit
End If
sGuessTheSource = oFSO.GetParentFolderName(oPopis.ReadLine)
oPopis.Close
sSource = InputBox("Source folder:",, sGuessTheSource)
If Right(sSource, 1) = "\" Then sSource = Left(sSource, Len(sSource)-1)
sDestination = InputBox("Destination folder:",, "C:\some-folder")
Set oPopis = oFSO.OpenTextFile(sPathToList, 1)
While Not oPopis.AtEndOfStream
sFileToCopy = oPopis.ReadLine
If oFSO.FileExists(sFileToCopy) Then
sNewPath = sDestination & "\" & Mid(sFileToCopy, Len(sSource) + 2)
CreateDirs(oFSO.GetParentFolderName(sNewPath))
oFSO.CopyFile sFileToCopy, sNewPath
End If
Wend
oPopis.Close
|
|
|
|
Poslao: 25 Apr 2014 09:42
|
offline
- Pridružio: 30 Jun 2009
- Poruke: 403
|
Napisano: 24 Apr 2014 23:59
dr_Bora ::Mislim da ovo radi tu prvu varijantu koju pominješ.
1. Drag and drop spiska file-ova
2. Uneti source - skripta će da ponudi kao source onaj folder u kome se nalazi prvi file u listi, ali ti možeš odabrati koji želiš nivo
3. Uneti destination
@dr_Bora hvala na trudu, sviđa mi se tvoj pristup, isprobao po tvojim uputama ali u destination folderu kruške i jabuke zajedno a neke su trule a neke nagrižene :-)
Ili ja nisam nešto dobro odradio.
Ovaj tvoj kod sam kopirao u Notepad i snimio pod nazivom 'kopiraj.vbs'
U popis.txt nalazile su se čiste putanje datoteka bez ikakvih dodataka
Po mojoj prvoj varijanti upisao sam u prvo polje pitanja "source" slijedeće
E:\temp\source\
u drugo polje pitanja upisao
E:\temp\destination\
drag-and-drop datoteke popis.txt na kopiraj.vbs datoteku
U destination folderu našlo se svega i svačega, netočnih naziva datoteka, van foldera i sl.
Šteta ali ideja je odlična.
Hvala ti za trud i rad.
soxxx ::Uz minimum testiranja evo nesto sto ne radi ali ti moze dati neku ideju:
Verovatno samo treba da se primene neke druge opcije, ne znam, ali ti mozda da neku ideju.Hvala ti @soxxx za trud i javljanje kao i željom za pomoći
Iako ne radi kako ti kažeš ali mi je dalo ideju, nije Microsoft toliko nezgrapan koliko sam ja uporan (sa xcopy sam riješio stvar) kopiranja.
Sa mog primjera koji sam postavio na webu XCOPY odabrao sam switches i nakon pokretanaj *.bat datoteke pritisnuo tipku F i zadržao je do kraja kopiranja. Sve odrađeno kako treba.
Iako mi je bolji ovaj način rada od dr_Bora (nekako mi je praktičniji)
pozdrav obojici i zahvaljujem na odvojenom vremenu za pomoći.
Dopuna: 25 Apr 2014 9:42
[EDIT]:
Moram dodati jednu informaciju zbog drugih čitatelja teme koji bi eventualno u sličnim situacijama koristili naredbu "xcopy".
Juros nakon prespavane noći pregledom kopiranih files u folderu 'destination' uočio sam da ni XCOPY nije odradio svoj posao do kraja. Na popisu sam imao 558 files koje je trebalo kopirati a rezultat je bio 447 kopiranih datoteka. Dakle nije sve kopirano?
Znači ne mogu se pouzdati ni na ovaj način sa 100% sigurnošću.
|
|
|
|
Poslao: 25 Apr 2014 19:27
|
offline
- dr_Bora
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Anti Malware Fighter
Rank 2
- Pridružio: 24 Jul 2007
- Poruke: 12280
- Gde živiš: Höganäs, SE
|
Upravo testirah skriptu na listi koja sadrži 7443 file-a raspoređena u 1742 foldera (nekih 16-17 nivoa subfoldera). Ne mogu da vidim da nešto nije dobro odrađeno.
Može li da se vidi taj tvoj spisak? Ako može, uploaduj ceo file, nemoj ga kopirati u poruku.
Ako ne može: da li si sam upisivao pathove ili je to rađeno softverski i da li je to lista svih file-ova u tom folderu ili samo pojedinih?
|
|
|
|
Poslao: 25 Apr 2014 22:56
|
offline
- Pridružio: 30 Jun 2009
- Poruke: 403
|
dr_Bora ::Upravo testirah skriptu na listi ............... da li si sam upisivao pathove ili je to rađeno softverski i da li je to lista svih file-ova u tom folderu ili samo pojedinih?
Ponovo sam je testirao so obzirom na tvoju repliku i napokon prošla je uspješno.
Path staze su izvučene iz UE programa dakle software-ski a od 1991 files ja sam izdvojio za ovaj puta 551 files.
Prvi problem je bio kao na ovoj slici ispod. Ostavio sam ove čudne znakove jer sam mislio da trebaju biti
Drugi problem je što sam ostavio defaultno ponuđenu source pa sam sve to editirao na način
1. E:\temp\source\
2. E:\temp\destination\
i VBS skripta je odradila svoj posao odlično
i na kraju dr_Bora HVALA ti, uštedio si mi vremena i truda.
pozdrav
[edit]
U popis.txt path staze su klasika (dakle svaki red jedna path staza (jesam li i tu griješio, nisam postavljao destinacijske path staze?)
E:\temp\source\autocad\1.html
E:\temp\source\autocad\10.html
E:\temp\source\autocad\12.html
|
|
|
|
Poslao: 25 Apr 2014 23:43
|
offline
- dr_Bora
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Anti Malware Fighter
Rank 2
- Pridružio: 24 Jul 2007
- Poruke: 12280
- Gde živiš: Höganäs, SE
|
OK je to, po jedan full path do file-a u svakom redu. Problem je bio u toj brljotini na početku file-a koja se vidi na slici.
File treba biti ANSI kodiran i bez space-ova na početku i kraju linija da bi radilo (unicode lista/nazivi file-ova bi morali drugačije da se obrade).
|
|
|
|