2016-11-15 4 views
0

Цель - удалить файлы старше x дней. Для тестирования с использованием копии. Нашел более нескольких сообщений о том, как это сделать - однако проблема, с которой я столкнулся, заключается в том, что независимо от свойства, используемого с переменной, и сравнения ВСЕ файлы перемещаются (копируются). Во-вторых, попытка передать результаты в файл журнала создаст файл, но не напишет на него. Я что-то упускаю, но не вижу. Любой вклад в то, что я делаю неправильно, оценивается!Powershell удалить файлы старше x дней

$SDirectory = "C:\TestOne*" 
$Destpath = "C:\TestTwo" 
$limit = (Get-Date).Date.AddDays(-2) 
$Full = Get-childitem -path $SDirectory -Recurse -Include *.bak,*.trn 

foreach ($i in $Full) 
{ 
    ##if ($i.CreationTime -gt ($(Get-Date).adddays(-2))) 
    if ($i.LastWriteTimeUtc -gt $limit) 
    { 
     Copy-Item -Path $Full -Destination $Destpath -Force | Out-File C:\Admin\Results11.txt -Append 
    } 
} 
+0

Вы используете $ Full вместо $ i.Fullname в копии, и какой результат вы ожидаете от копирования? – LotPings

+0

копия, разумеется, до сих пор не видела, я говорил ей копировать все. – GlennUrquhart

+0

Но помимо выполнения этой работы копия задания не имеет выхода, которую вы могли бы добавить где угодно, пока вы опускаете опцию -passthru, и это уродливо, как каталог. – LotPings

ответ

1

Причина все файлы копируются в том, что вы на самом деле их копирования:

Copy-Item -Path $Full ... 

Я думаю, что вы хотите что-то более, как это:

Copy-Item -Path $($i.FullName) ... 

Чтобы захватить использование выходной -PassThru :

Copy-Item -Path $($i.FullName) -Destination $Destpath -PassThru -Force | Out-File C:\Admin\Results11.txt -Append 
+0

Вы также должны убедиться, что используете -lt, а не -gt, если вы пытаетесь скопировать файлы, которые старше x дней, чем новее, чем x дней –

+0

Большое спасибо! Теперь я вижу, что я сделал неправильно, полагая, что каждый из них справится с этим. – GlennUrquhart

+0

Я не знал -passthru действительно pratics, ty – Esperento57

0

Это то, что я придумал:

$SDirectory = "C:\TestOne*" 
$Destpath = "C:\TestTwo" 
$limit = (Get-Date).Date.AddDays(-2) 
$files = Get-ChildItem -Path "$SDirectory" | % { 
    if ($_.CreationTime -gt $limit) { 
    Copy-Item -Path $_.FullName "$Destpath" 
    Add-Content "C:\Admin\Results11.txt" -Value $_.Name 
    } 
} 
+0

Да, как сказал Майк Гаруччио, вы можете использовать либо -lt или -gt в зависимости от результата, который вам нужен. –

Смежные вопросы