Jak automatickou dávkou zálohovat složky do samostatných RAR archivů?
Hezký den,
prosím o rady...
OS Windows 10.
Na disku je velké množství složek (adresářů) v řádu tisíců, různých názvů a délek.
Jak automatickou dávkou zálohovat složky do samostatných RAR archivů?
Jak dávkové příkazy upravit tak, aby Rar.exe automaticky zpracoval všechny zdrojové složky, jednu po druhé a z každé automaticky vytvořil samostatný archív *.rar?
Prostým testem funguje dávkový soubor dorar.bat:
"d:\WinRAR\Rar.exe" a -r archiv zdroj
pause
Ze složky ZDROJ vytvoří ARCHIV.rar.
Co tam těch řádků napsat víc ??? To snad nemyslíš vážně ...
Rád bych, ale tohle je nad mé schopnosti.
Nejdřív vypíšu seznam složek a přesměruju do souboru ... pak v tom souboru vhodným editorem doplním zbytek (z větší části "jedním kliknutím").
Toto řešení nebude do budoucna univerzálně použitelné.
To opravdu nebude, chtělo by to spíš aby vstupem byl přímo ten textový soubor, což při použití příkazu snad možné je (alespoň jsem nabyl toho dojmu, když jsem si nápovědu k for někdy četl - je opravdu dlouhá, příkaz for má více módů, a já tehdy potřeboval něco úplně jiného).
A uznávám je to opravdu komplikované zadání, podle mě ale řešitelné.
Pokud mě paměť neklame, měl rar nějakou možnost uložit každou položku do samostatného archivu, ale to se týkalo asi souborů, ovšem když si zobrazuju nápovědu, tak to tam nikde nevidim.
Rozdělil bych si to na několik položek:
1. získat seznam adresářů, to snad nebude tak těžké (dir /s/ad+ atd.)
2. Najít způsob, jak tento seznam položku po položce procházet (zřejmě cyklem for dosu) a zkusit to na nějaké neškodné funkci třeba echo (jenom vypíše parametr)
3. Tuto testovací funkci nahradit rar s potřebnými parametry.
První a poslední položka je bez problémů, tu prostřední jsem nikdy nezkoušel, ale mělo by to být možné. Takže bych se soustředil, jestli je možné ze stdin získávat řádek po řádku a předávat je upravené dál jako součást příkazu.
Seznam bych předal přes stdout | stdin případně přesměrované na soubor, to je celkem jedno, ale pro program bych komunikaci přes std* nechal.
Když jsem naposledy potřeboval něco podobného, tak jsem si na to udělal dávku v matlabu, kde jsou trochu jiné možnosti. Nějak se mi tehdy nepodařilo přímo volat vypočítané příkazy (ta možnost volání příkazů systému tam je), tak jsem je sepsal do dávky a volal tuto dávku. Musel bych hledat ve svém archivu, ale šlo také o získání seznamu souborů a nějaký příkaz pro ně, ale ještě něco navíc, co si nevybavuju a kvůli čemu jsem to nemohl udělat v příkazovém řádku.
Mockrát děkuji za snahu. Více se vyjádřím v reakci na
https://pc.poradna.net/questions/3135580-jak-automatickou-davkou-zalohovat-slozky-do-samostatnych-rar-archivu#r3135585
Použiješ cyklus FOR....
https://stackoverflow.com/questions/59228680/how-to-compress-each-subfolder-in-a-folder-into-separate-rar-archives-with-rar-e
Díky. Snažil jsem se nejprve sám, ale dávkování je má slabá stránka. Vždycky mě z toho rozbolí hlava.
Vyzkouším to...
Ještě doplňující otázka - jak to udělat přímo v GUI WinRar? Prošel jsem 2x nastavení a su asi blbý...
Obávám se, že tohle přes GUI neuděláš. Ale nevím, WinRAR už několik let nepoužívám.
Poslušně hlásím úspěch.
Než sem dám finální řešení označitelné za konečné, aby to pomáhalo ostatním, tak...
Cyklus for dělá mnou požadované.
@for /D %%I in ("N:\working\*") do @"%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -ep1 -inul -m5 -r -- "%%I.rar" "%%I\"
Prosím ještě o radu. Jak univerzálně nahradit tu napevno danou vstupní cestu ke složce? Viz N:\working\*
Potřebuji univerzální řešení, abych v budoucnu nebylo nutné ruční upravování cesty.
Lze nějak automaticky převzít dávkovými příkazy cestu ke složce, ve které se spouští dávkový soubor?
Snažím se, ale nedaří se mi podle...
https://superuser.com/questions/1652732/how-to-get-the-directory-path-where-a-batch-file-is-called-from
https://stackoverflow.com/questions/3827567/how-to-get-the-path-of-the-batch-script-in-windows
ÚSPĚCH!
Funkční řešení... prosím o kontrolu. Třeba mne upozorníte na nějaké z neznalosti nepředpokládatelné budoucí problémy.
@for /D %%I in ("%~dp0\*") do @"%ProgramFiles%\WinRAR\Rar.exe" a -cfg- -ep1 -inul -m5 -r -- "%%I.rar" "%%I\"
pause
%~dp0 přebírá ze systému cestu ke spouštěné dávce. Na stejnou cestu jsou ukládané výsledné RAR archívy.
Používať RAR na zálohy je masochizmus... ak chcete prísť o dáta, prosím.
V případě takových tvrzení uvítám faktické argumenty...
Jedná se o zálohu uživatelských dat. Příprava k dlouhodobé archivaci.
Nesejčkuj, neplaš, nie je to až také boľavé so stratou dát v prípade nástroja WinRar. (Na prenos dát na externom nostiči je úplne ideálny).
Jednoduchšie je dnes pri rýchlom HW radšej vyrábať skomprimnované zálohy dát celých logických oddielov prípadne iba vybratých súborov nejakým vhodným backupper SW rozdielovou alebo prírastkovou metódou, je to bez starosti plne automatické.
Len jedno mi neberie, na kieho šľaka je nutné vo Windows zálohovať, babrať sa s individuálnymi súbormi. Možno som nepochopil dopyt.
Tomu rozumím. Navrhované je dost rizikové. Poškozený zlomek image může znamenat nedostupnost všech dat uvnitř něj.
Proto bude vhodné použít RAR s možností...
-rr[N] = Add data recovery record
např. -rr10p vytvoří +10 % záznamu pro případnou obnovu, kdyby nastalo poškození archivu v důsledku třeba vadných sektorů HDD.