2014-02-23 2 views
0

나는이 개 질문이나 두 부분으로 문제가 : 나는 CSV 전체 경로를 포함한 파일의 목록과 파일이확인 파일

  1. , 예를 들면 :

    C:\file1.txt 
    C:\file2.xls 
    C:\file3.doc 
    etc. 
    

    나는 각 파일 및 경우 수정 된 날짜를 확인해야 그 특정 시간 범위 내에서, 예를 들어, 새로운 CSV 파일에 다음 출력을, :

    C:\file1.txt has modified time and date 01/01/2014 10:00 
    C:\file2.xls has modified time and date 02/01/2014 12:00 
    C:\file3.doc has modified time and date 03/01/2014 14:00 
    C:\file4.ppt has modified time and date 04/01/2014 16:00 
    
    ,536,913,632 10

    시간 범위 = 2014년 2월 1일 8시 2014년 3월 1일 20시

    output.csv 파일이 포함되어 있어야합니다

    C:\file2.xls 
    C:\file3.doc 
    

    나는했습니다 수정 기존 PowerShell 스크립트를 시도했다 온라인에서 발견되었지만 솔직히 코드를 이해하지 못합니다. 나는 foreach-object를 사용하여 시도했다 :

    $names = get-content .\test.csv 
    $names | foreach-object {(get-item $_.name).lastwritetime} 
    

    그러나 나는이 작업을 받고 직장에서 떨어지는거야.

  2. 나는 다음 한 위치에서 다른 위치로 파일을 복사, robocopy를 호출하는 루프를 사용해야 할 수도 있으므로 기본적으로 지원하지 않습니다 robocopy,에 output.csv 파일을 전달해야합니다.

희망적입니다.

답변

2

동일한 파일 이름의 파일이 여러 개있는 경우 아래 해결 방법이 작동하지 않습니다. 추가 할 필요가있는 것은 소스 구조의 기본 주소 (파일 구조가 빌드 된 곳)와 대상 기본 주소이며이를 기반으로 새 대상 경로를 작성하기 만하면됩니다.

$copyChangesSince = Get-Date "2014-01-08" 
$doNotCopyChangesNewerThan = Get-Date "2014-02-02" 
get-content .\files.txt | Foreach { 
     Get-Item $_ 
    } | 
    Where { $_.LastWriteTime -gt $copyChangesSince -AND $_.LastWriteTime -lt $doNotCopyChangesNewerThan } | 
    Select FullName, Name | 
    Export-Csv C:\temp\filelist.csv -NoTypeInformation 

한 번에 하나의 항목 만 복사하기 때문에 robocopy를 사용하면 얻을 수있는 이점이 확실치 않습니다. 아래 예에서 Copy-Item을 사용했습니다. 만약 당신이 정말로 robocopy를 사용하기를 원한다면, robocopy에 대한 호출로 그 호출을 대체하는 것이 어려워서는 안된다. 실제로 나중에 .CSV 파일을 사용하지 않으려면

Import-Csv C:\temp\filelist.csv | 
    Foreach { Copy-Item -Path $_.FullName -Destination "C:\temp\output\$($_.Name)" } 

, 당신은 쉽게 그 부분을 건너 뛸 수 있고 (가져 오기 부분에서 Foreach 문으로 SelectExport-Csv을 대체 물론 Import-Csv도 건너 뜁니다.)

편집 : 질문에서 요청한대로 프로세스를 두 부분으로 나눕니다.

+0

첫 번째 섹션을 테스트 중이므로 조금 시간이 걸립니다. 스크립트가 실행되는 동안 적어도 동일한 이름을 가진 파일이 여러 개있는 경우 왜 작동하지 않는지 잘 모르겠습니다. 스크립트가 실행되는 동안 전체 경로 목록을 제공합니다. 둘째, robocopy를 사용하는 이유는 복사 된 모든 파일에 대해 폴더 구조를 유지해야하기 때문입니다. – Aftab

+0

첫 번째 섹션은 여러 파일의 이름이 같은 경우에도 잘 작동합니다. 그러나 두 번째 섹션에서는 현재 모든 파일을 폴더 구조와 상관없이 동일한 대상 폴더에 복사합니다. 예를 들어; c : \ files \ myfile.txt 파일과 c : \ files \ subfolder \ myfile 파일이있는 경우txt이면 두 경로 모두 동일한 대상 경로 (예 : C : \ temp \ output \ myfile.txt)를 얻습니다. 폴더 구조를 유지해야하는 경우 위의 스크립트를 적용하여 폴더 구조를 유지해야합니다 (실제 파일 복사 작업을 위해 robocopy 또는 copy-item 사용). –

+0

감사합니다. 완벽하게 작동했습니다. 소스 파일의 변경 사항을 복사해야했습니다. CSV 파일이었고 파일 이름 중 일부는 쉼표가 있으므로 TXT 파일로 변경했습니다. 또한 파일 이름에 특정 문자가 있기 때문에 일부 행에서 큰 따옴표를 제거해야했습니다. 제안 된대로 두 번째 부분을 조정하고 copy-item을 사용해 보겠습니다. – Aftab