Discussion:
[BAT] Usuwanie tylko starych plikow
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Tomasz
2008-05-21 07:08:22 UTC
Permalink
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
2008-05-21 07:47:04 UTC
Permalink
Post by Tomasz
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.
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?
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"
***@wUpE.pEEl
Tomasz
2008-05-21 10:32:52 UTC
Permalink
Post by Chopin
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.
2008-05-21 11:59:26 UTC
Permalink
Z pamiętnika internauty.
Własność: 'Tomasz'
Post by Tomasz
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.
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?
Total Commander - zaawansowane wyszukiwanie
--
TomaSz.
http://www.kociezycie.net
Tomasz
2008-05-21 14:10:29 UTC
Permalink
Post by TomaSz.
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
2008-05-21 16:33:53 UTC
Permalink
Post by Tomasz
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.
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?
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
2008-05-21 17:07:01 UTC
Permalink
Post by Piotr Kuliński
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
2008-05-21 17:56:36 UTC
Permalink
Post by Piotr Kuliński
Post by Tomasz
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.
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?
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
'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
Tomasz
2008-05-26 04:38:37 UTC
Permalink
Post by Piotr Kuliński
'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-
Piotr Kulinski
2008-05-31 18:24:31 UTC
Permalink
Mon, 26 May 2008 06:38:37 +0200, na alt.pl.comp.os.windowsxp, Tomasz
Post by Tomasz
Post by Piotr Kuliński
'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
'-----------
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
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr
Tomasz
2008-06-01 07:15:00 UTC
Permalink
Post by Piotr Kulinski
Post by Tomasz
'-----------
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
2008-05-21 22:50:59 UTC
Permalink
Post by Tomasz
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.
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?
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
2008-05-26 04:39:15 UTC
Permalink
Post by Grzegorz Niemirowski
Radzę zostawić prehistorycznego bata i zainteresować się PowerShellem.
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
2008-05-26 05:31:49 UTC
Permalink
Post by Tomasz
Stary BAT ma tą zaletę, że nie trzeba go nigdzie instalować ;-)
Zaleta używania starego programu :)
--
piecia aka dracorp
Grzegorz Niemirowski
2008-05-26 12:28:38 UTC
Permalink
Post by Tomasz
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
2008-05-28 05:36:35 UTC
Permalink
Użytkownik "Grzegorz Niemirowski"
Post by 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
2008-05-28 11:18:06 UTC
Permalink
Post by Tomasz
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
2008-05-31 18:31:29 UTC
Permalink
Mon, 26 May 2008 14:28:38 +0200, na alt.pl.comp.os.windowsxp, Grzegorz
Post by Grzegorz Niemirowski
Post by Tomasz
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
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr
Grzegorz Niemirowski
2008-06-01 19:03:51 UTC
Permalink
Post by Piotr Kulinski
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
2008-06-02 07:34:59 UTC
Permalink
Sun, 1 Jun 2008 21:03:51 +0200, na alt.pl.comp.os.windowsxp, Grzegorz
Post by Grzegorz Niemirowski
Post by Piotr Kulinski
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.
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr
u***@gmail.com
2018-04-26 13:16:13 UTC
Permalink
Post by Tomasz
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.
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
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

Loading...