2010-03-15 4 views
1

스크립트가 실행되기 시작한 시간부터 1 시간 전에 타임 스탬프가있는 파일을 복사하려고합니다. 그래서 기본적으로 robocopy를 모방하려하지만 minity와 maxage는 정확한 시간이 아닌 며칠이됩니다.타임 스탬프가있는 파일을 2 번 복사하고 디렉토리 구조를 유지하는 방법

$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" 

을하지만 난 그런 식으로 복사를 수행하려고 할 경우, 직접 대상 폴더에 복사 된 모든 파일을 대신 하위 폴더 : 지금까지 나는 PowerShell에서이 있습니다. enter code here

답변

3

복사하는 각 파일의 전체 대상 경로를 생성해야합니다. 가장 간단한 방법은 원본 폴더를 대상 폴더로 바꾸는 것입니다. 이 한 줄에 전체 기능을 대체 할 수

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의 별칭입니다. 이 루프에서 필터링 된 파일 각각을 복사하여 소스 경로 이름 을 대상으로 바꿉니다.
관련 문제