[Riješeno] Kopiranje specifičnih datoteka sa popisa iz *.txt file

[Riješeno] Kopiranje specifičnih datoteka sa popisa iz *.txt file

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 394

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.
offline
  • soxxx 
  • Prijatelj foruma
  • 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.



offline
  • dr_Bora  Male
  • 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

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 394

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.

offline
  • dr_Bora  Male
  • 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?

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 394

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 Smile



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

offline
  • dr_Bora  Male
  • 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).

Ko je trenutno na forumu
 

Ukupno su 780 korisnika na forumu :: 49 registrovanih, 8 sakrivenih i 723 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, 9k38, _commandos_, A.R.Chafee.Jr., aleksmajstor, antonije64, Apok, aramis s, attila.jukicburai, bojank2, chica 053, dankisha, delrey2, Duh sa sekirom, Georgius2, gorangogs88, hyla, ibssa, lav23, madza2, majorgaspar, mandicdamir245, Marko Marković, Milan A. Nikolic, Njemac, novator, pein, pjaka2001, Profica, radoznao2, rkekoke, rus1974, SAA fan, sasa.zoric, shone34, slonic_tonic, Sr.Stat., suton2, svr, T-72, Trpe Grozni, vathra, Vlada1389, Vlada78, vlvl, vobo, voja64, Zandar, zoranlik