Stránka 1 z 1

zase ty *.bat soubory  Vyřešeno

Napsal: 18 lis 2008 09:24
od d1amond
Zdravím,
je to jak nekonečná pohádka. Měl bych dotaz ohledně příkazu v bat souboru. Nevíte někdo syntax pro "smaž * složky starší než (parametr = aktuální datum)" ?

Díky za pomoc

Re: zase ty *.bat soubory

Napsal: 18 lis 2008 10:44
od El Diablo

Re: zase ty *.bat soubory

Napsal: 18 lis 2008 11:08
od mike007

Re: zase ty *.bat soubory

Napsal: 18 lis 2008 11:30
od d1amond
Díky, jdu se tím prokousat:)

Re: zase ty *.bat soubory

Napsal: 18 lis 2008 12:02
od mike007
Kdyby ses tím neprokousal, tak tady máš VBA skript, který ti ty starý soubory vymaže. Zeleně jsem ti označil cestu do složky, kde chceš mazat staré soubory. Tu si uprav podle sebe. Červeně jsem ti označil číslo, které znázorňuje kritérium pro mazání - počet dní. MUSÍ TO BÝT ZÁPORNÉ ČÍSLO!

Kód si nakopíruj do poznámkového bloku a ulož s příponou *.vbs

Poté už stačí jen kliknout na skript a už se maže ...

Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")

startFolder = "C:\složka" ' složka, kde se bude mazat

OlderThanDate = DateAdd("d", -10, Date) ' 10 dní

DeleteOldFiles startFolder, OlderThanDate

Function DeleteOldFiles(folderName, BeforeDate)
Dim folder, file, fileCollection, folderCollection, subFolder

Set folder = fso.GetFolder(folderName)

Set fileCollection = folder.Files

For Each file In fileCollection
If file.DateLastModified < BeforeDate Then
fso.DeleteFile(file.Path)
End If
Next

Set folderCollection = folder.SubFolders
For Each subFolder In folderCollection
DeleteOldFiles subFolder.Path, BeforeDate
Next

MsgBox "hotovo"

End Function

Re: zase ty *.bat soubory

Napsal: 18 lis 2008 15:11
od d1amond
Script bezva, akorát místo složek maže soubory:(
Ještě že jsem ho pustil ve složce temp...

Re: zase ty *.bat soubory

Napsal: 18 lis 2008 16:21
od mike007
Oops. Moje chyba. Myslel jsem, že chceš mazat soubory ...

Tak prosím:

Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileSys.GetFolder("C:\temp")

For Each Folder In objFolder.SubFolders
FolderCreated = Folder.DateCreated
FolderAge = DateDiff("d", FolderCreated, Now)

If FolderAge >2 Then
Folder.Delete
End If

Next

Re: zase ty *.bat soubory

Napsal: 19 lis 2008 09:54
od d1amond
Zdar, script běhá, díky. Akorát moje programátorské schopnosti jsou velmi omezené, proto se zase ptám. Jednak pokud je prázdná složka, tak script končí chybou (spouštím jej z *.bat, ten jede po chybě dál). A druhá věc, nepřišel jsem na to jak to provést- nechci ty složky mazat, ale vypsat do okna terminálu (kvůli otestování, že to běhá v pohodě, docházejí mi starší složky:) ). Jak na to?

Re: zase ty *.bat soubory

Napsal: 19 lis 2008 11:03
od mike007
Po dobu testování si to můžeš stáhnout na
... If FolderAge =0 Then ...

Skript samotný nehází chybu pokud není co mazat. Budeš to mít pravděpodobně špatně vsazené do dávkového souboru.

Re: zase ty *.bat soubory

Napsal: 13 lis 2011 21:34
od Dawe?!
Zdarec.. Omlouvam se, ale vyhodil mi tohle google.. takze nevim jak moc je to stare vlakno, ale vidim ze se tu bavilo a bat souborech, a mel bych ohledne toho dotaz.. chtel bych neco skusit jen takovou zkousku, nic vaznyho se stat nemuze ... sem celkem zacatecnik takze se moc nevyznam .. :D ale chtel bych skusit aby se stalo neco jako :
100 000x
{ start cmd
ping www.adresa.cz }

-o zapisu ve skriptech nemam ani paru , takze jsem napsal jen jak by meli asi vypadat kroky.. :D

a aby to byl jakoze cyklus a vykonalo se to treba 100 000x naraz, jestli by tolik pozadavku na neaky server zvladlo.. snad chapete jak to myslim, a dokonce si myslim ze mi neporadite ;D ..

Re: zase ty *.bat soubory

Napsal: 13 lis 2011 22:03
od Myloš
Stáří vlákna najdeš snadno – u každého příspěvku je jeho datum.
Při registraci jsi souhlasil s pravidly, v nichž stojí, že jakkoli podobný problém není přípustné řešit v cizím vlákně. Vždycky si založ svoje vlastní.
Konečně vyřešený dotaz (jako tento – se zelenou fajfkou) se nezobrazuje mezi novými tématy, takže krom těch, kteří do něj přispěli, si ho málokdo všimne.

Zkusím ti přesto odpovědět:
Mám obavu, že v BAT (CMD) to nepůjde – nabízí se sice FOR, který v jiných jazycích dělá přesně to, co potřebuješ, ale jak jsem ho pochopil v DOSu, opakuje příkaz pro zadané soubory, tzn. že dělá něco, co ve skutečnosti nepotřebuješ.
Osobně bych buď použil jiný prostředek, např. PHP, nebo si udělal nekonečnou smyčku:

:start
ping adresa
goto start

a po chvíli sám ručně vykonávání zastavil (klávesou PAUSE, posléze křížkem zavřel).

A tady z výše uvedených důvodů zamykám.