Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[BAT] Usuwanie tylko starych plikow

588 views
Skip to first unread message

Tomasz

unread,
May 21, 2008, 3:08:22 AM5/21/08
to
Witam

Potrzebuję plik wsadowy, który usuwałby wszystkie pliki *.zip oraz *.cbk z
danego katalogu oprócz tych plików, które są z dnia dzisiejszego.

Stworzyłem na razie coś takiego:

set rok=%date:~0,4%
set mies=%date:~5,2%
set dz=%date:~8,2%
xcopy *.zip "temp\" /F /Y /D:%mies%-%dz%-%rok%
xcopy *.cbk "temp\" /F /Y /D:%mies%-%dz%-%rok%
del *.zip
del *.cbk
move temp\*.* ".\"
rmdir /s /q temp\

Metoda ta polega na kopiowaniu do katalogu tymczasowego (temp) plików z
dzisiejszą datą, kasowaniu wszystkiego z katalogu bieżącego i przenoszeniu z
powrotem tego co pozostało w katalogu tymczasowym.

Ponieważ pliki są bardzo duże to wszystko dosyć długo trwa. Znacie może
jakiś szybszy sposób?

--
Pozdrawiam
Tomasz

Chopin

unread,
May 21, 2008, 3:47:04 AM5/21/08
to

Użytkownik "Tomasz" <wyt...@wp.pl> napisał w wiadomości
news:g10hpf$1sk$1...@news2.task.gda.pl...

Pewnie najwięcej czasu trwa kopiowanie plików do TEMP. Zachowując obecny
schemat można zamienić "xcopy" na "move".
W tym przypadku następuje tylko modyfikacja informacji o położeniu pliku a
nie wykonanie jego fizycznej kopii.

--
Chopin
"Gdynia Moje Miasto"
staw...@wUpE.pEEl

Tomasz

unread,
May 21, 2008, 6:32:52 AM5/21/08
to

Użytkownik "Chopin" <staw...@wUpE.pEEl> napisał w wiadomości

> Pewnie najwięcej czasu trwa kopiowanie plików do TEMP. Zachowując obecny
> schemat można zamienić "xcopy" na "move".
> W tym przypadku następuje tylko modyfikacja informacji o położeniu pliku a
> nie wykonanie jego fizycznej kopii.


Tak, 99% czasu zajmuje "xcopy".
Niestety polecenie "move" nie ma parametrów umożliwiających przesuwanie
plików o określonej dacie - stąd te moje kombinacje...

--
Pozdrawiam
Tomasz

TomaSz.

unread,
May 21, 2008, 7:59:26 AM5/21/08
to
Z pamiętnika internauty.
Własność: 'Tomasz'
Wpis z dnia 21-05-2008:

Total Commander - zaawansowane wyszukiwanie

--
TomaSz.
http://www.kociezycie.net

Tomasz

unread,
May 21, 2008, 10:10:29 AM5/21/08
to
Użytkownik "TomaSz." <usene...@op.pl> napisał w wiadomości
news:rbvj9ogx83zz$.dlg@usenet.mail.op.pl...

> Total Commander - zaawansowane wyszukiwanie


Lubię Total Commandera, ale nie chce mi się tego codziennie robić ręcznie :)

Wszystkie dotychczasowe czynności zostały już zautomatyzowane dzięki plikom
BAT - pozostało już tylko to usuwanie...

--
Pozdrawiam
Tomasz

Piotr Kuliński

unread,
May 21, 2008, 12:33:53 PM5/21/08
to
Tomasz pisze:
dir *.tmp | findstr ^[%DATE%] > old_files.txt

to na początek, później ściągnij sed.exe w celu przetworzenia pliku i
wyciągnięcia nazw plików, albo użyj polecenia for z cięciem po kolumnach

--
pozdrawiam
piotr

piecia aka dracorp

unread,
May 21, 2008, 1:07:01 PM5/21/08
to
Dnia Wed, 21 May 2008 18:33:53 +0200, Piotr Kuliński napisał(a):

> dir *.tmp | findstr ^[%DATE%] > old_files.txt
>
> to na początek, później ściągnij sed.exe w celu przetworzenia pliku i
> wyciągnięcia nazw plików, albo użyj polecenia for z cięciem po kolumnach

http://sourceforge.net/project/showfiles.php?group_id=9328
Może to pomoże...


--
piecia aka dracorp

Piotr Kuliński

unread,
May 21, 2008, 1:56:36 PM5/21/08
to
Piotr Kuliński pisze:

'Tu pełniejszy skrypt

' Kuliński Piotr, kasowanie plików na lokalnym komputerze z określonego
folderu
' gdzie data jest mniejsza od aktualnej

strComputer = "."
strPath="d:\temp"

Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer &
"\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_UTCTime")
For Each objItem in colItems

dt_del=objItem.Year&"-"&right("0"&objItem.Month,2)&"-"&right("0"&objItem.Day,2)
Next


Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objShell = CreateObject ("Shell.Application")
Set objFolder = objShell.Namespace (strPath)
Set objFSO = CreateObject("Scripting.FileSystemObject")

For Each strFileName in objFolder.Items
if (objFolder.GetDetailsOf (strFileName, 4) < (dt_del&" 00:00")) then
wscript.echo objFolder.GetDetailsOf (strFileName, 4)&" --> " &
strPath&"\"&strFileName
objFSO.DeleteFile(strPath&"\"&strFileName)
end if
Next


--
pozdrawiam
Piotr Kuliński

Grzegorz Niemirowski

unread,
May 21, 2008, 6:50:59 PM5/21/08
to
Tomasz <wyt...@wp.pl> napisał(a):

Radzę zostawić prehistorycznego bata i zainteresować się PowerShellem.
Omawianą czynność można zrobić w jednej linijce:
ls *.zip, *.cbk | where-object {$_.lastwritetime -lt (get-date).date} |
foreach {rm $_}

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i aktualności ze świata Outlook Express: grzegorz.net/oe
Uptime: 7 days, 7 hours, 4 minutes and 24 seconds

Tomasz

unread,
May 26, 2008, 12:38:37 AM5/26/08
to
Użytkownik "Piotr Kuliński" <piotr_k...@wpw.pl> napisał

> 'Tu pełniejszy skrypt
>
> ' Kuliński Piotr, kasowanie plików na lokalnym komputerze z określonego
> folderu
> ' gdzie data jest mniejsza od aktualnej
>
> strComputer = "."
> strPath="d:\temp"
>
> Set objWMIService =
> GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer &
> "\root\cimv2")
> Set colItems = objWMIService.ExecQuery("Select * from Win32_UTCTime")
> For Each objItem in colItems
>
> dt_del=objItem.Year&"-"&right("0"&objItem.Month,2)&"-"&right("0"&objItem.Day,2)
> Next
>
>
> Set objFSO = CreateObject("Scripting.FileSystemObject")
>
> Set objShell = CreateObject ("Shell.Application")
> Set objFolder = objShell.Namespace (strPath)
> Set objFSO = CreateObject("Scripting.FileSystemObject")
>
> For Each strFileName in objFolder.Items
> if (objFolder.GetDetailsOf (strFileName, 4) < (dt_del&" 00:00")) then
> wscript.echo objFolder.GetDetailsOf (strFileName, 4)&" --> " &
> strPath&"\"&strFileName
> objFSO.DeleteFile(strPath&"\"&strFileName)
> end if
> Next


Hej

Do czego służy ta część kodu?:

'-----------
Set objWMIService = ...
Set colItems = ...

For Each objItem in colItems
dt_del=objItem.Year&"-"&right("0"&objItem.Month,2)&"-"&right("0"&objItem.Day,2)
Next

'-----------

--
Pozdrawiam
-Tomek-

Tomasz

unread,
May 26, 2008, 12:39:15 AM5/26/08
to
Użytkownik "Grzegorz Niemirowski" <gnthe...@poczta.onet.pl> napisał

>
> Radzę zostawić prehistorycznego bata i zainteresować się PowerShellem.
> Omawianą czynność można zrobić w jednej linijce:
> ls *.zip, *.cbk | where-object {$_.lastwritetime -lt (get-date).date} |
> foreach {rm $_}


Stary BAT ma tą zaletę, że nie trzeba go nigdzie instalować ;-)

--
Pozdrawiam
-Tomek-

piecia aka dracorp

unread,
May 26, 2008, 1:31:49 AM5/26/08
to
Dnia Mon, 26 May 2008 06:39:15 +0200, Tomasz napisał(a):

> Stary BAT ma tą zaletę, że nie trzeba go nigdzie instalować ;-)

Zaleta używania starego programu :)


--
piecia aka dracorp

Grzegorz Niemirowski

unread,
May 26, 2008, 8:28:38 AM5/26/08
to
Tomasz <wyt...@wp.pl> napisał(a):

> Stary BAT ma tą zaletę, że nie trzeba go nigdzie instalować ;-)

Jedna zaleta i tysiące wad :)

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i aktualności ze świata Outlook Express: grzegorz.net/oe

Uptime: 1 day, 15 hours, 54 minutes and 30 seconds

Tomasz

unread,
May 28, 2008, 1:36:35 AM5/28/08
to
Użytkownik "Grzegorz Niemirowski"

> --
> Grzegorz Niemirowski
> http://www.grzegorz.net/


Ty jesteś autorem strony grzegorz.net?
Korzystałem z niej wiele razy! Mało jest stron poświęconych OE. Twoja dużo
wnosi :)

--
Pozdrawiam
Tomasz
http://www.shitsoft.net/

Grzegorz Niemirowski

unread,
May 28, 2008, 7:18:06 AM5/28/08
to
Tomasz <wyt...@wp.pl> napisał(a):

> Ty jesteś autorem strony grzegorz.net?
> Korzystałem z niej wiele razy! Mało jest stron poświęconych OE. Twoja
> dużo wnosi :)

Tak, to ja :) Cieszę się, że się komuś przydała :)

--
Grzegorz Niemirowski
http://www.grzegorz.net/

OE PowerTool i aktualności ze świata Outlook Express: grzegorz.net/oe

Uptime: 3 days, 14 hours, 44 minutes and 31 seconds

Piotr Kulinski

unread,
May 31, 2008, 2:24:31 PM5/31/08
to
Mon, 26 May 2008 06:38:37 +0200, na alt.pl.comp.os.windowsxp, Tomasz
napisał(a):

tak na szybko napisałem sformatowanie aktualnej daty
może znasz jakąś metodę aby pobrać odrazu sformatowaną date, ja się nei
zagłębiałem
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr

Piotr Kulinski

unread,
May 31, 2008, 2:31:29 PM5/31/08
to
Mon, 26 May 2008 14:28:38 +0200, na alt.pl.comp.os.windowsxp, Grzegorz
Niemirowski napisał(a):

> Tomasz <wyt...@wp.pl> napisał(a):
>> Stary BAT ma tą zaletę, że nie trzeba go nigdzie instalować ;-)
>
> Jedna zaleta i tysiące wad :)

może i tysiące wad, ale też duża prostota

PowerShell strasznie zagmatwany - tak z ciekawości dlaczego nie jest
dorzucony w SP2, przecież implementuje vbscript, obsługuje WMI i ma
wszystko co stary BPL?

brakuje czegoś prostego i szybiego takie coś ala bash lu sh

ale do taki podstawowych operacji...
wystarczy zupełnie stary BPL i Windows Resource Kid Tools

Tomasz

unread,
Jun 1, 2008, 3:15:00 AM6/1/08
to
Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl>

>> '-----------
>> Set objWMIService = ...
>> Set colItems = ...
>>
>> For Each objItem in colItems
>>
>> dt_del=objItem.Year&"-"&right("0"&objItem.Month,2)&"-"&right("0"&objItem.Day,2)
>> Next
>> '-----------
>
> tak na szybko napisałem sformatowanie aktualnej daty
> może znasz jakąś metodę aby pobrać odrazu sformatowaną date, ja się nei
> zagłębiałem


Gdy wpiszę: Msgbox Date
To wyświetla mi się komunikat z datą sformatowaną.

Poza tym zamiast "objItem.Month", można użyć "Month(Date)". To skróci ilość
kodu, bo nie będzie potrzebne tworzenie dodatkowych obiektów :)

--
Pozdrawiam
-Tomek-

Grzegorz Niemirowski

unread,
Jun 1, 2008, 3:03:51 PM6/1/08
to
Piotr Kulinski <piotr_k...@wpw.pl> napisał(a):

> może i tysiące wad, ale też duża prostota
> PowerShell strasznie zagmatwany - tak z ciekawości dlaczego nie jest
> dorzucony w SP2, przecież implementuje vbscript, obsługuje WMI i ma
> wszystko co stary BPL?
> brakuje czegoś prostego i szybiego takie coś ala bash lu sh
> ale do taki podstawowych operacji...
> wystarczy zupełnie stary BPL i Windows Resource Kid Tools

Przecież PowerShell jest prosty, widać to bardzo dobrze na omawianym
przykładzie. Ilość kodu jest o wiele mniejsza i jest on bardziej intuicyjny.
A z basha przecież PS dużo zapożyczył, podobnie jak z perla. Nie wiem o co
chodzi z SP2. SP2 do Windows XP został wydany przed premierą PS, poza tym z
reguły SP nie wnoszą nowego oprogramowania. Nie wiem co to jest BPL.

--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i aktualności ze świata Outlook Express: grzegorz.net/oe

Uptime: 0 days, 0 hours, 3 minutes and 48 seconds

Piotr Kulinski

unread,
Jun 2, 2008, 3:34:59 AM6/2/08
to
Sun, 1 Jun 2008 21:03:51 +0200, na alt.pl.comp.os.windowsxp, Grzegorz
Niemirowski napisał(a):

> Piotr Kulinski <piotr_k...@wpw.pl> napisał(a):


>> może i tysiące wad, ale też duża prostota
>> PowerShell strasznie zagmatwany - tak z ciekawości dlaczego nie jest
>> dorzucony w SP2, przecież implementuje vbscript, obsługuje WMI i ma
>> wszystko co stary BPL?
>> brakuje czegoś prostego i szybiego takie coś ala bash lu sh
>> ale do taki podstawowych operacji...
>> wystarczy zupełnie stary BPL i Windows Resource Kid Tools
>
> Przecież PowerShell jest prosty, widać to bardzo dobrze na omawianym
> przykładzie. Ilość kodu jest o wiele mniejsza i jest on bardziej intuicyjny.
> A z basha przecież PS dużo zapożyczył, podobnie jak z perla. Nie wiem o co
> chodzi z SP2. SP2 do Windows XP został wydany przed premierą PS, poza tym z
> reguły SP nie wnoszą nowego oprogramowania. Nie wiem co to jest BPL.

Co do prostoty to rzecz względna.
BPL (Batch Programming Language) zawsze jest zaimplementowany, choćby w
Vista. Nie sprawdzałem czy PS też jest w Viście i czy jest on już
zintegrowany czy trzeba doinstalowywać.
Co do integracji s SP2/SP3 to się zgadzam.

ug.do...@gmail.com

unread,
Apr 26, 2018, 9:16:14 AM4/26/18
to
Witam,
chciałbym się podpiąć pod temat.

Raportuj | Popraw błędy
#1 26 Kwi 2018 14:55

Witam,
próbuje stworzyć plik .BAT, który miałby za zadanie usunięcie plików starszych o 30 min w danym katalogu. Stworzyłem

forfiles /p "C:\Skany" /s /m *.* /c "cmd /c Del @path"

i ustawiłem go w Harmonogramie zadań tak aby działa co 30 min ale to nie spełnia moich oczekiwań ponieważ jeśli ustawie zadanie od 7:30 więc skrypt będzie działać co 30 min i będzie również usuwać dokumenty, które zostały stworzone np. 7:54 (o 8:00 skasuje wszystko). Jest jakaś metoda na to?
Pozdrawiam
0 new messages