2017-01-05 3 views
-1

Нужна помощь с скриптом powershell. Мне нужно перенести файлы на конкретную последнюю измененную дату с похожими именами. Вот сценарий, я попытался запустить, и он просто висит ...Перемещение файлов определенной даты с помощью Powershell Get-ChildItem

$SourceFolder = "C:\documents\testing123.txt" 

$targetFolder = "D:\documents" 

Get-ChildItem -Path $SourceFolder -Filter E0100* | where-object {$_.LastWriteTime -eq ("08/01/2015") | move-item -destination $targetFolder 
+0

Я бы рекомендовал использовать 'robocopy' вместо этого. –

+1

Должен ли $ SourceFolder быть папкой, а не файлом? –

+1

Кроме того, сравнение LastWriteTime с строкой даты вряд ли будет работать, так как оно не включает время. Вы можете рассмотреть $ _. LastWriteTime.Date -eq "08/01/2015" –

ответ

1

Поскольку LastWriteTime является DateTime-ge сравнивая точное время. Вот пример, который копирует, используя диапазон дат, который, я считаю, вам нужен.

$SourceFolder = "C:\documents\testing123.txt" 

$targetFolder = "D:\documents" 
$startTime =[DateTime]"08/01/2015" 
$endTime = $startTime.AddDays(1) 
Get-ChildItem -Path $SourceFolder -Filter E0100* | 
    Where-Object {$_.LastWriteTime -ge $startTime -and $_.LastWriteTime -lt $endTime} | 
    Move-Item -destination $targetFolder 

Как уже упоминалось, путь к исходной папке кажется неправильным.

Вот robocopy версии сценария я попробовал (дату, путь и фильтр были изменены)

$SourceFolder = "D:\test" 

$targetFolder = "D:\test2" 
$startTime =[DateTime]"01/05/2017" 
$endTime = $startTime.AddDays(1) 
$files = @() 
Get-ChildItem -Path $SourceFolder -Filter * | 
    Where-Object {$_.LastWriteTime -ge $startTime -and $_.LastWriteTime -lt $endTime -and $_.Attributes -ne 'Directory'} | 
    ForEach-Object { $files += $_.Name} 

if($files.Count -gt 0) 
{ 
    Write-Verbose "running robocopy $SourceFolder $targetFolder $files /mov" -Verbose 
    robocopy $SourceFolder $targetFolder $files /mov 
} 
+0

Спасибо, что делает sens, источник - это каталог, а не файл, вы правы. Один дополнительный пункт, если источник назначения имеет большое количество записей, все, что я могу сделать, чтобы помочь ему не замерзать? Некоторые люди предложили использовать robocopy, моя единственная путаница заключается в том, что robocopy просто извлекает данные или действительно ли это переносит их? – Bobby

+0

Переключатель '/ mov' на' robocopy' заставит его переместить не копировать. '/ MAXLAD: n' и'/MINLAD: n' будет фильтровать максимальную и минимальную дату последнего доступа (я не могу найти фильтр даты записи). Вы также можете сформировать список для копирования в PowerShell и передать его в 'robocopy'. – TravisEz13

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