Belirli bir klasördeki (n) günden eski tüm dosyaları silmek için iyi bir Windows komut satırı seçeneği nedir?
Ayrıca bu dosyaların binlerce olabileceğini unutmayın, bu yüzden forfiles
bir Shell ile cmd
burada çok iyi bir fikir değildir .. binlerce komut kabuğu oluşturmaktan hoşlanmadıkça. Ben oldukça kötü bir kesmek olduğunu düşünüyorum, bu yüzden daha iyi yapabiliriz bakalım!
İdeal olarak, Windows Server 2008'de yerleşik (veya kolayca kurulabilir) bir şey.
Biraz daha etrafına baktım ve powershell yolu buldum :
Belirtilen klasörden 8 günden eski tüm dosyaları silin (önizlemeli)
dir |? {$_.CreationTime -lt (get-date).AddDays(-8)} | del -whatif
(bunun için -whatif'i kaldırın)
Jeff'in PowerShell komutunu sevin, ancak PowerShell olmayan Windows makineleri için alternatif bir vbs çözümü için aşağıdakileri deneyebilirsiniz.
<filename>.vbs
olarak kaydedin ve yürütün:
<filename>.vbs <target_dir> <NoDaysSinceModified> [Action]
Üçüncü parametre, [Action]
isteğe bağlıdır. Bu olmadan <NoDaysSinceModified>
'den daha eski dosyalar listelenir. D
olarak ayarlandığında <NoDaysSinceModified>
'den daha eski dosyaları silecektir
Örnek
PurgeOldFiles.vbs "c:\Log Files" 8
list c:\Log Files
içindeki tüm dosyalar 8 günden eski olacak
PurgeOldFiles.vbs "c:\Log Files" 8 D
c:\Log Files
içindeki 8 günden eski tüm dosyalar sil
not: Bu Haidong Ji komut dosyasının değiştirilmiş bir versiyonudur SQLServerCentral.com
Option Explicit
on error resume next
Dim oFSO
Dim sDirectoryPath
Dim oFolder
Dim oFileCollection
Dim oFile
Dim iDaysOld
Dim fAction
sDirectoryPath = WScript.Arguments.Item(0)
iDaysOld = WScript.Arguments.Item(1)
fAction = WScript.Arguments.Item(2)
Set oFSO = CreateObject("Scripting.FileSystemObject")
set oFolder = oFSO.GetFolder(sDirectoryPath)
set oFileCollection = oFolder.Files
If UCase(fAction) = "D" Then
'Walk through each file in this folder collection.
'If it is older than iDaysOld, then delete it.
For each oFile in oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
oFile.Delete(True)
End If
Next
else
'Displays Each file in the dir older than iDaysOld
For each oFile in oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
Wscript.Echo oFile.Name & " " & oFile.DateLastModified
End If
Next
End If
'Clean up
Set oFSO = Nothing
Set oFolder = Nothing
Set oFileCollection = Nothing
Set oFile = Nothing
Set fAction = Nothing
Şuna bir bak http://sourceforge.net/projects/delold kullandığım şey bu.
basit ama çalışıyor. delold -d 14 Geçerli klasördeki 14 günden eski dosyaları siler.
Gerçekten komut satırı değil, ama LINQPad bir C # komut dosyası ana bilgisayar olarak kullanmayı seviyorum:
(bu sadece bir komut satırı C # komut dosyası için bana bir fikir verdi à la vbs dosyaları)
var files = from f in Directory.GetFiles(@"D:\temp", "*.*", SearchOption.AllDirectories)
where File.GetLastWriteTime(f) < DateTime.Today.AddDays(-8)
select f;
foreach(var f in files)
File.Delete(f);
Benzer bir şey cygwin'in (veya diğer alternatif) "find" komutuyla elde edilebilir. Ancak bu, cygwin'i yüklemenizi veya taşınabilir sürümü elinizde bulundurmanızı gerektirir.
Powershell'den önce kullandığım başka bir alternatif:
http://lifehacker.com/133190/geek-to-live--hard-drive-janitor
Bunu sistemimde gerçekleştirmek için autoIT kullanıyorum. Kolayca exa için .au3 dosyaları derleyebilirsiniz gibi. Herkesin düzenleyebileceği bir yarasa dosyasıyla olduğu gibi bir güvenlik açığını tanıtmak kolay değildir.