2016-09-08 6 views
0

저는 powershell 및 스크립팅을 처음 접했습니다. 독서와 테스트를 많이하고 이것은 나의 첫 번째 게시물입니다.
여기 내가하려는 일이 있습니다. 매일 실행되는 각 보고서의 하위 폴더가있는 폴더가 있습니다. 새 하위 폴더가 매일 생성됩니다.
하위 폴더의 파일 이름은 날짜 만 변경되면서 동일합니다. 어제의 폴더에서 특정 파일을 가져오고 싶습니다.PowerShell에서 가장 최근 파일 찾기

Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | where(get-date).AddDays(-1) 

두 부분 (전 관 후) 작업 : 여기
는 내가 지금까지 가지고있는 것입니다. 그러나 그들을 결합 할 때 그것은 실패합니다. 내가 뭘 잘못하고 있니?

답변

0

읽기 출력은 Where-Object docs을 적용

Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | ` 
    Where-Object {$_.LastWriteTime.Date -eq (get-date).AddDays(-1).Date} 
0

시도 :

로 파이프하여 Sort 명령에 대한 결과 및 Select에 바로 첫 번째 결과를 얻을 수 있음을 파이프 할 수
where {$_.lastwritetime.Day -eq ((get-date).AddDays(-1)).Day} 
0

. 내가 잘못 뭐하는 거지

Get-ChildItem -filter “MBVOutputQueriesReport_C12_Custom.html” -recurse -path D:\BHM\Receive\ | Sort LastWriteTime -Descending | Select -First 1 
1

? $_ -gt 3 테스트가 $ True로 평가 때마다 -

0,1,2,3,4,5 | Where { $_ -gt 3 } 

는 뚫을 3보다 큰 일을 3와 파이프 라인 ( $_)에서 수신 번호를 비교하실 수 있습니다.

0,1,2,3,4,5 | where { $_ } 

이 비교 대상 아무것도 없다 -이 경우에는, 그것은 casts the value to boolean - 'truthy' or 'falsey' 모든 것을 'truthy이'를 통해 얻을 수 있습니다. 0은 삭제되고 나머지는 허용됩니다. {}없이

Get-ChildItem | where Name -eq 'test.txt' 

Name (이 경우 파일 이름에) 파이프 라인을 통해 오는 물건의 속성이다 기대와 'TEST.TXT'에 대해 사람들을 비교하는 구문입니다 만 파일 개체 수 있습니다 그 이름으로 끝내야 해. 이 경우

Get-ChildItem | where Length 

, 그것은을 찾고 속성이 길이 (파일 크기)이며, 주어진 어떤 비교가없는, 그래서 일을 다시의 이전에서 일을 "true/false로 캐스팅". 이 경우 일부 내용 (길이가 0이 아닌) 만있는 파일 만 표시되고 크기가 0 인 파일은 삭제됩니다.

확인, 즉 코드에 나를 제공 : 어디 주어 없음 {}과 단 한 가지로

Get-ChildItem | where(get-date).AddDays(-1) 

, 속성 이름을로 매개 변수를 기대, 그리고 그 속성 값을 캐스팅한다 true/false를 사용하여 수행 할 작업을 결정합니다. 이것은 "파이프 라인에있는 것들이 ("09/08/2016 14:12:06" (어제의 현재 시간)) 속성의 값이 인 속성이 'truthy'"인 필터를 말하는 것입니다. 모든 파일에 대해 질문이 $null이고 Where이 파이프 라인의 모든 항목을 삭제하도록 어제 (어제 날짜)라는 속성이없는 파일이 없습니다.

짐보 답변으로 당신이 할 수 있고, 필터는 파일의 쓰기 시간에 대한 어제 날짜을 비교. 그러나 파일과 폴더의 이름이 날짜 순서로 명명 된 경우 어제의 파일이 무엇인지 알기 때문에 전체 폴더 트리를 통해 다시보고 모든 것을 살펴볼 수 있습니다.

당신이 말을하지 않았지만, 당신이 할 수있는 중 하나와 같은

$yesterday = (Get-Date).AddDays(-1).ToString('MM-dd-yyyy') 
Get-ChildItem "d:\receive\bhm\$yesterday\MBVOutputQueriesReport_C12_Custom.html" 

# (or whatever date pattern gets you directly to that file) 

또는

Get-ChildItem | sort -Property CreationTime -Descending | Select -Skip 1 -First 1 

역방향 만든 날짜가 주문한 '마지막으로 한'일을, 얻기 위해 접근한다. 다음 get-date | Get-Member -MemberType Property과에서

+0

우수 설명. 이와 같은 대답은 특히 초보자를위한 "여기에 하나의 라이너가 있습니다"보다 훨씬 도움이됩니다. – StephenP

+0

설명 및 조언을 주신 모든 분들께 감사드립니다. 나는 계속 독서와 학습을 할 것입니다. – jcarreiro

0

이런 식으로 뭔가를 할 수 있습니다.

$time = (get-date).AddDays(-1).Day 
Get-ChildItem -Filter "MBVOutputQueriesReport_C12_Custom.html" -Recurse -Path D:\BHM\Receive\ | Where-Object { $_.LastWriteTime.Day -eq $time } 
관련 문제