Page 1 of 1
Zopakování série prikazuuu
Posted: 2014-02-27, 16:17 UTC
by Terka
Mám 2 disky, jeden jako záložní.
Na prvním disku pracuji se soubory, přesouvám do jiných adresářů (v rámci pouze jednoho disku), mažu atd. To samé chci provést na záložním disku a ideálně rychle.
Zkoušel někdo něco v tomto duchu?
Moje idea je využít tclog...
Posted: 2014-02-27, 21:07 UTC
by Hacker
Ahoj
Terka 
No, ako prve mi napadlo Synchronize dirs s moznostou Asynchronous, ale tvoj napad tiez nie je zly, len zautomatizovat to cele nie je momentalne mozne, by si sa musela asi zasa raz vrhnut na AHK.
Roman
Posted: 2014-04-06, 07:34 UTC
by ja
Ako píše Hacker, riešením je synchronize dirs (asynchrónne). Výsledok dostaneš rovnaký, akurát synchronize dirs nevykonáva zmeny postupne podľa logu, ale iba zladí výsledný stav diskov. Spôsob ale nie je dôležitý, dôležitý je výsledok a ten je rovnaký. Čím by bolo opakovanie úkonov lepšie?
Je otázne, či log obsahuje naozaj všetky zmeny a čo napr. s úkonmi, ktoré vykonáš s dočasne pripojenými mechanikami, ktoré v momente vykonávania zmien z logu by pripojené neboli (a ešte horšie, ak by boli). Alebo ak nejaké procesy v systéme zmenia súbory (čo je mimo tc), prípadne iné záludnosti. Nevyzerá to spoľahlivo

Posted: 2015-04-25, 09:47 UTC
by Terka
Rozdil je v rychlosti. Pokud presunu film do jineho adresare, tak to trva sekundu, pri mazani a kopirovani to trva minutu.
Posted: 2015-04-25, 11:26 UTC
by Hacker
Terka,
Ak vyfiltrujes TC log, tak ho mozes predhodit tomuto skriptu - najde vsetky move operacie a vykona ich so subormi v rovnakych adresaroch na NewDriveLetter.
Code: Select all
NewDriveLetter = D
FileRead, TcLog, totalcmd.log
Loop, Parse, TcLog, `n, `r
If (RegExMatch(A_LoopField, ".+?: Move: [a-zA-Z](.+?) -> [a-zA-Z](.+)", FilePath))
{
MsgBox, %A_LoopField%`n%NewDriveLetter%%FilePath1%`n%NewDriveLetter%%FilePath2%
; FileMove, %NewDriveLetter%%FilePath1%, %NewDriveLetter%%FilePath2%
}
Roman
Posted: 2015-04-25, 12:11 UTC
by Terka

diky, zkusim.
Delam to momentalne trochu jinak, bez logu. Porovnavam soubory v source a destination
a pokud jsou stejne ale jinde ulozene, tak davam move. Je to ale pomale protoze porovnava skoro S krat D souboru.
Code: Select all
;kopirovani adr. struktury source -> destination
;- 2 = loop jen pres adresare
loop, i:\*.* , 2 , 1
{
NewDir := RegExReplace(A_LoopFileFullPath, "i(.+)", "j$1") ;- nahrazeni i:\ za j:\
FileCreateDir, %NewDir%
}
; Loop, FilePattern [, IncludeFolders?, Recurse?]
; loop, i:\*.* , 0/1/2 , 1
; 0 Files only
; 1 BOTH Files and Folders
; 2 Folders only
;vytvor sorted seznamy pro oba adresare
;seznam1
inputPath:="i:\*.*"
seznam1:="c:\seznam1.txt"
FileDelete %seznam1%
f__z_cesty__serazeny_Seznam_souboru( inputPath, seznam1)
;seznam2
inputPath:="j:\*.*"
seznam2:="c:\seznam2.txt"
FileDelete %seznam2%
f__z_cesty__serazeny_Seznam_souboru( inputPath, seznam2)
;fce k vytvoreni seznamu
f__z_cesty__serazeny_Seznam_souboru( inputPath, outputFile)
{
file=outputFile ;pro lepsi citelnost
;vytvor seznam
;- Loop, FilePattern [, IncludeFolders?, Recurse?]
loop, %inputPath% , 0 , 1
{
;- TimeCreated nechodilo
FileAppend, %A_LoopFileName%%A_LoopFileTimeModified%%A_LoopFileSize%|%A_LoopFileFullPath% `n, %file%
}
; sort seznam
FileRead, Contents, %file%
if not ErrorLevel ; Successfully loaded.
{
Sort, Contents, C ;case sensitive
FileDelete, %file%
FileAppend, %Contents%, %outputFile%
Contents = ; Free the memory.
}
}
;fce k vytvoreni seznamu konec
;seznamy oddeleny "|" (dva sloupce) - example: (2.a 4 radek budou kopirovane)
;- ___seznam1:___ ___seznam2:___
;- index.php201410200857464782|i:\index.php index.php201410200857464782|j:\index.php
;- project.properties20140815152635141|i:\root\project.properties project.properties20140815152635141|j:\project.properties
;- project.xml20140815152635322|i:\root\project.xml project.xml20140815152635322|j:\root\project.xml
;- soubor.ke.kopirovani.txt201410201105378|i:\soubor.ke.kopirovani.txt soubor.ke.kopirovani.txt201410201105378|j:\root\soubor.ke.kopirovani.txt
;porovnej 1. sloupce seznamů, pokud jsou stejné (stejné soubory) tak přesouvej
;přesouvej z disk j:(SEZNAM2-SLOUPEC2) do disk j:(SEZNAM1-SLOUPEC2)
Loop, read, %seznam1%
{
i=%A_LoopReadLine%
Loop, read, %seznam2%
{
j=%A_LoopReadLine%
;- v i je Source, v j je Destination
; roztrhej i
; roztrhej j
StringSplit, poleS, i,|
StringSplit, poleD, j,|
if ( poleS1 = poleD1) { ;kdyz jde o stejne soubory
Source = %poleD2%
Dest:= RegExReplace(poleS2, ".(.+)", "j$1") ; poleS2 ale s jinym diskem - nahrad i za j
FileMove, %Source%, %Dest%, 0 ;-(1 = overwrite)
;pridej: odstran zaznam ??
break ;pridano 2015-04-25
}
}
}
FileAppend, Another line.`n, C:\F12end.txt
msgbox hotovo
Return