Jak zálohovat určitý počet záloh v .bat s odebraním nejstarší?
Ahoj zrádci.
Dotaz zní: Jak udělat v .bat, aby mi zálohoval deset dní denně složku souborů (to už mám a funguje), ale pokud bude zálohovat jedenáctý den, aby mi zároveň umazal tu první zálohu?
Tak pocitej v tom cyklu do jedenacti, pak zazalohuj, smaz co potrebujes a vyresetuj counter.
No, zapomněl jsem skromně dodat, že jsem batové jelito. Nějaký příklad by mi bodnul.
Pro inspiraci:
To pause>nul, pak vyhodis abys nemusel mackat enter v kazde iteraci...
A jak mas urobene teraz to pocitanie do 10 dni?
Nemám to počítané. Prostě každý den přibude záloha, ale nechci nekonečný počet záloh. Stačí mi např. 10.
Spouštím Správcem úloh automaticky v určenou hodinu.
Aha, tak to ale "kapku" meni situaci...
Ano, ten tvůj příklad bych na tohle asi neaplikoval.
No, tak si jeste proste naplanuj jeste ulohu, ktera kazdy jedenacty den smaze nejstarsi soubor v tom adresari...
Inspirace:
http://www.chebucto.ns.ca/~ak621/DOS/Bat-Adv3.html #OLD
Jo, díky, zkusím to. Myslel jsem si, že by to šlo nacpat do jednoho souboru.
Ale není podmínkou.
A ked zabudne 10dni spustit zalohovaciu ulohu tak 11ty den zisti ze nema uz zalohu ziadnu
Predpokladam, ze to zalohovani ma naplanovane na kazdy den, automaticky...
jj - píšu to výše.
Tak pri takomto nazyvani zlozky nemas sancu vediet jak presne sa volala ta pred 10 dnami.
Musel by si do toho bat urobit cyklus FOR, pre vsetky adresare v E:\Cilova slozka\ a pocitat ich, a ak by si zistil ze ich je 10 tak by si musel zistit ktora ma najmensi datum, co je dost problem ak mas na zaciatku den a ne rok, takze to je v pricipe velmi problematicke takto jak to robis. Prip. by si mohol urobit dir /B so zoradenim podla data vytvorenia a z neho prvy riadok by bol ta najstarsia zlozka
Keby si tie zlozky cisloval od 1 po 10, napr. "E:\Cilova slozka\Zaloha1\%datetimef%\" az "E:\Cilova slozka\Zaloha10\%datetimef%\" alebo aspon "E:\Cilova slozka\1\%datetimef%\" az "E:\Cilova slozka\10\%datetimef%\" tak by to bolo jednoduche, zmazal by si zlozku cislo 10, a v cykle FOR %i od 1 po 9 by si urobil set j=%i%+1, a premenoval zlozku %i% na zlozku %j% prikazom rename, a potom by si vytvoril novu zlozku 1.
Bude to Můj boj...
Tato moznost co som pisal je relativne jednoducha
Já bych si to představoval tak, že po spuštění toho scriptu se načte první složka v adresáři (nejdřív asi seřadit podle data vytvoření) a smaže se. Pak se udělá nová záloha (složka). Takže mi chybí ten (jeden nebo více) řádků na začátek toho mého scriptu.
Mazanie najstarsieho suboru uz mas predsa v tom linku vyssie
DIR /A-D /OD /B | C:\DOS\XSET /LINE 1 FILE
DEL %FILE%
potrebujes nejake xset.exe neviemskade a upravis tu cestu na neho namiesto toho C:\DOS\
DIR /A-D /OD /B musis zmenit na vypisovanie adresarov t.j. DIR /AD /OD /B
Ale tvoj problem je ze ak tam budes mat len jednu zalohu, tak si zmazes tu jednu, t.j. musis si nejak spocitat ci uz ich tam mas 10. Googli si bat count files in directory napr. http://stackoverflow.com/questions/11004045/batch- file-counting-number-of-files-in-folder-and-storin g-in-a-varible ta druha moznost naprikald, ale to dir musis zmenit aby vypisoval directories (tusim dir /AD /B)
a namiesto
DEL %file%
pouzijes
DELTREE %file%
pretoze chces mazat cely adresar ktory neni prazdny
Díky za ochotu, ale obávám se že je to nad moje síly. Budu se snažit to nějak pochopit. Alespoň zhruba vím, co hledat.
Smaze vsechny soubory ve slozce "c:\windows\temp", starsi nez 11 dni. Testovano na W7 Enterprise...
Kdybys tam nemel forfiles, tak tady: x86
On chce mazat podzlozky, tak asi deltree namiesto del. Ci tam musi zmenit este nieco ine to netusim
-s znamena, at prochazi i podslozky...
jo tak, onchce mazat adresare, tak to deltree a -s muze vyhodit..
To forfiles jsem našel už v noci (nemusel jsem to instalovat - někde se to ve W7 už našlo), ale mazalo to jenom soubory (i v podsložkách).
Já potřebuju "něco", co by mi smazalo složku podle nejstaršího data vytvoření, anebo první, na kterou to padne.
Pouzij misto DEL prikaz DELTREE.
Ved som to pisal v reakcii.
forfiles -p "c:\windows\temp" -d -11 -m *.* -c "cmd /c deltree @path"
alebo
forfiles -p "c:\windows\temp" -d -11 -m *.* -c "cmd /c if @isdir==TRUE deltree @path"
DIR /A-D /OD /B | C:\DOS\XSET /LINE 1 FILE
DELTREE %FILE%
Tohle mi nefunguje (zkoušel jsem změnit tu cestu C:\..., ale buď ji měnit nemám, nebo jsem dal nesprávnou.)
Asi nepotřebuju /LINE 1 FILE ale /LINE 1 Folder nebo co.
OMG... pouzi to forfiles v kombinaci s DELTREE, tak ti pise MM.. vyse.
xset.exe si nakopiroval kde? To sa nevyskytuje v PC samo od seba. A pisal som ti
Pouzi to s forfiles a vyser sa na xset. Forfiles je jednoduchsie.
To jsem zkoušel změnit, ale nefunguje mi to.
Toto: forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE deltree @path" - taky nefunguje. Skript proběhne, ale nesmaže ani soubor, ani složku. -2 tam mám, protože starší zálohy zatím nemám.
forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE echo @path"
vypise co?
ak nic, tak nefunguje hladanie tej zlozky. Ak vypise stare zlozky, tak nefunguje deltree tak si skus deltree zlozka rucne nech vies co to robi ci tam nepyta nejake otazky, pripadne si vygoogli switche pre deltree aby sa nic nepytal apod.
Vypíše mi to seznam složek v adresáři se zálohami. Konkrtétně jedinou takto starou složku (název).
A kedze pouzivas medzeru v ceste, tak potrebujes extra uvodzovky, co sa robi blbo lebo tam uz jedne su, ale udajne ma fungovat toto
forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE deltree ^0x22@path^0x22"
Toto háže chybu:
deltree není názvem vnitřního ani vnějšího příkazu,
spustitelného programu nebo dávkového souboru.
forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE echo @path"
Toto mi vypíše složku/složky. Teď bych tam potřeboval přidat něco, co by tu složku/složky smazalo (komplet, včetně podsložek a souborů).
Vo Win NT systemoch je namiesto deltree prikaz RMDIR -r
sorry ne -r ale rmdir /s, je v tom bordel
https://www.microsoft.com/resources/documentation/ windows/xp/all/proddocs/en-us/rmdir.mspx?mfr=true
Ano - rmdir (rd) znám, ale jak mu předat ten název složky?
Toto nefungovalo (házelo chybu).
Toto je konečně řešení:
Děkuju moc za trpělivost. Já bych mi na tvém místě nadával jako špaček!
A funguje to aj ked pouzijes cestu s medzerou? Napr. "E:\neco s mezerou\zalohy" ?
Ano, skutečnou cestu mám s mezerami.