Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
A jak mas urobene teraz to pocitanie do 10 dni?
MM.. 14.05.2014 23:05
MM..
Nemám to počítané. Prostě každý den přibude záloha, ale nechci nekonečný počet záloh. Stačí mi např.…
IQ37 14.05.2014 23:06
IQ37
Aha, tak to ale "kapku" meni situaci...
MaSo 14.05.2014 23:14
MaSo
Ano, ten tvůj příklad bych na tohle asi neaplikoval.
IQ37 14.05.2014 23:17
IQ37
No, tak si jeste proste naplanuj jeste ulohu, ktera kazdy jedenacty den smaze nejstarsi soubor v tom…
MaSo 14.05.2014 23:21
MaSo
A ked zabudne 10dni spustit zalohovaciu ulohu tak 11ty den zisti ze nema uz zalohu ziadnu :-)
MM.. 14.05.2014 23:27
MM..
:-) Predpokladam, ze to zalohovani ma naplanovane na kazdy den, automaticky...
MaSo 14.05.2014 23:30
MaSo
jj - píšu to výše. nový
IQ37 14.05.2014 23:31
IQ37
Tak pri takomto nazyvani zlozky nemas sancu vediet jak presne sa volala ta pred 10 dnami. Musel by…
MM.. 14.05.2014 23:24
MM..
Bude to Můj boj... :-) nový
IQ37 14.05.2014 23:30
IQ37
Tato moznost co som pisal je relativne jednoducha Keby si tie zlozky cisloval od 1 po 10, napr. "E:… nový
MM.. 14.05.2014 23:46
MM..
Já bych si to představoval tak, že po spuštění toho scriptu se načte první složka v adresáři (nejdří… nový
IQ37 14.05.2014 23:59
IQ37
Mazanie najstarsieho suboru uz mas predsa v tom linku vyssie DIR /A-D /OD /B | C:\DOS\XSET /LINE 1 F… nový
MM.. 15.05.2014 00:19
MM..
a namiesto DEL %file% pouzijes DELTREE %file% pretoze chces mazat cely adresar ktory neni prazdny nový
MM.. 15.05.2014 00:21
MM..
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ň zhru… nový
IQ37 15.05.2014 00:39
IQ37
forfiles -p "c:\windows\temp" -s -d -11 -m *.* -c "cmd /c del /f /q @path" Smaze vsechny soubory ve… nový
MaSo 15.05.2014 08:15
MaSo
On chce mazat podzlozky, tak asi deltree namiesto del. Ci tam musi zmenit este nieco ine to netusim nový
MM.. 15.05.2014 10:07
MM..
-s znamena, at prochazi i podslozky... jo tak, onchce mazat adresare, tak to deltree a -s muze vyho… nový
MaSo 15.05.2014 10:12
MaSo
To forfiles jsem našel už v noci (nemusel jsem to instalovat - někde se to ve W7 už našlo), ale maza… nový
IQ37 15.05.2014 12:16
IQ37
Pouzij misto DEL prikaz DELTREE. nový
MaSo 15.05.2014 12:18
MaSo
Ved som to pisal v reakcii. forfiles -p "c:\windows\temp" -d -11 -m *.* -c "cmd /c deltree @path"… nový
MM.. 15.05.2014 12:19
MM..
DIR /A-D /OD /B | C:\DOS\XSET /LINE 1 FILE DELTREE %FILE% Tohle mi nefunguje (zkoušel jsem změnit tu… nový
IQ37 15.05.2014 12:20
IQ37
OMG... pouzi to forfiles v kombinaci s DELTREE, tak ti pise MM.. vyse. nový
MaSo 15.05.2014 12:22
MaSo
xset.exe si nakopiroval kde? To sa nevyskytuje v PC samo od seba. A pisal som ti DIR /A-D /OD /B mu… nový
MM.. 15.05.2014 12:24
MM..
To jsem zkoušel změnit, ale nefunguje mi to. Toto: forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cm… nový
IQ37 15.05.2014 12:44
IQ37
forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE echo @path" vypise co? ak nic,… nový
MM.. 15.05.2014 12:52
MM..
Vypíše mi to seznam složek v adresáři se zálohami. Konkrtétně jedinou takto starou složku (název). nový
IQ37 15.05.2014 12:59
IQ37
A kedze pouzivas medzeru v ceste, tak potrebujes extra uvodzovky, co sa robi blbo lebo tam uz jedne… nový
MM.. 15.05.2014 12:56
MM..
Toto háže chybu: deltree není názvem vnitřního ani vnějšího příkazu, spustitelného programu nebo dáv… nový
IQ37 15.05.2014 13:08
IQ37
forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE echo @path" Toto mi vypíše slož… nový
IQ37 15.05.2014 13:11
IQ37
Vo Win NT systemoch je namiesto deltree prikaz RMDIR -r nový
MM.. 15.05.2014 13:16
MM..
sorry ne -r ale rmdir /s, je v tom bordel https://www.microsoft.com/resources/documentation/ windows… nový
MM.. 15.05.2014 13:18
MM..
Ano - rmdir (rd) znám, ale jak mu předat ten název složky? nový
IQ37 15.05.2014 13:21
IQ37
forfiles -p "c:\zaloha\temp" -d -2 -m *.* -c "cmd /c if @isdir==TRUE rmdir /s ^0x22@path^0x22" nový
MM.. 15.05.2014 13:21
MM..
Toto nefungovalo (házelo chybu). Toto je konečně řešení: forfiles -p "E:\Zaloha\Podsložky" -d -2… nový
IQ37 15.05.2014 13:30
IQ37
A funguje to aj ked pouzijes cestu s medzerou? Napr. "E:\neco s mezerou\zalohy" ? nový
MM.. 15.05.2014 13:54
MM..
Ano, skutečnou cestu mám s mezerami. poslední
IQ37 15.05.2014 14:17
IQ37

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.

set datetimef=%date% v %time:~0,2% %time:~3,2% %time:~6,2%
xcopy "K:\Zalohovana slozka\*.*" "E:\Cilova slozka\%datetimef%\Zaloha\" /h/e/k/c

Spouštím Správcem úloh automaticky v určenou hodinu.

Ano, ten tvůj příklad bych na tohle asi neaplikoval.

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.

Tato moznost co som pisal je relativne jednoducha

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.

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)

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.

forfiles -p "c:\windows\temp" -s -d -11 -m *.* -c "cmd /c del /f /q @path"

Smaze vsechny soubory ve slozce "c:\windows\temp", starsi nez 11 dni. Testovano na W7 Enterprise...

Kdybys tam nemel forfiles, tak tady: x86

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.

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.

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).

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ů).

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í:

forfiles -p "E:\Zaloha\Podsložky" -d -2 -m *.* -c "cmd /c if @isdir==TRUE rmdir /q /s @path"

Děkuju moc za trpělivost. Já bych mi na tvém místě nadával jako špaček! :-)

Zpět do poradny Odpovědět na původní otázku Nahoru