Как я могу скопировать файлы с отметками времени между 2 раза и сохранить структуру каталогов - PullRequest
1 голос
/ 16 марта 2010

Я хочу скопировать файлы с временными метками с момента запуска скрипта и часом ранее. Так что я в основном пытаюсь подражать робокопии, но с минимальными и минимальными темпами, снижающимися до точного времени, а не дней. Пока у меня есть это в powershell:

$now = Get-Date
$previousHour = $now.AddHours(-1)
"Copying files from $previousHour to $now"

function DoCopy ($source, $destination)
{
 $fileList = gci $source -Recurse
 foreach ($file in $fileList)
 {
  if($file.LastWriteTime -lt $now -and $file.LastWriteTime -gt $previousHour)
  {
   #Do the copy
  }
 }
}

DoCopy "C:\test" "C:\test2"

но если я попытаюсь сделать копию таким образом, он скопирует все файлы непосредственно в целевую папку, а не во вложенные папки. enter code here

1 Ответ

3 голосов
/ 16 марта 2010

Вам нужно будет сгенерировать полный путь назначения для каждого копируемого файла. Самый простой способ сделать это - заменить исходную папку на целевую. Вы можете заменить команду копирования на:

copy $file $file.FullName.Replace($source, $destination)

Обратите внимание, что вы можете заменить всю функцию этой строкой:

gci $source -recurse | ?{$_.LastWriteTime -lt $now -and $_.LastWriteTime -gt $previousHour} | %{copy $_ $_.FullName.Replace($source, $destination)}

Некоторые примечания к вышесказанному:

  • ? это псевдоним where-object, который фильтрует файлы, которые вы хотите скопировать.
  • % - это псевдоним foreach. В этом цикл мы копируем каждый из отфильтрованных файлы, заменяющие исходный путь с пунктом назначения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...