2014-11-06 1 views
0

나는 요일을 삽입해야하는 일련의 로그 파일을 가지고있다. 예를 들어, LOG-20141106-0000.TXT는 LOG-20141106-THR-0000.TXT가됩니다.Powershell에서 파일 이름의 날짜를 구문 분석하고 어떻게 처리합니까?

나는 내가 생각하는 것뿐만 아니라 내가 무엇을하고 있는지 알지 못한다는 것을 확신하는 this question을 발견했다. PowerShell을 사용한 이후로 꽤 오래되었습니다.

지금까지 파일의 이름을 바꾸려고했지만 날짜를 가져올 조각을 찾고 있습니다. 요일을 보간하고 적절하게 삽입 할 수 있습니다. 시작 인덱스는 문자열의 길이를 초과 할 수 없습니다 없다는 오류를 수신

$file = Get-ChildItem $txtpath | 
Sort-Object { [DateTime]::ParseExact($_.BaseName.Substring(6,8),'yyyyMMdd',$null) } | 
Select-Object -Last 1 

:

$txtPath = "h:\logs"  #source files 
$txtPath2 = "h:\logs\new" #renamed files 

Get-ChildItem $txtPath | foreach { 
    Move-Item $txtPath $txtPath2 ($_.Name -replace 'LOG','CLOG') 
} 

나는이를 사용하여 날짜를 잡아 당겨 힘든 시간을 보내고 있습니다. CLOG-20141031-9999.TXT라는 다섯 개의 파일이 있는데, 여기서 9999는 각 파일의 일련 번호입니다.

내가 뭘 잘못하고 있니?

답변

3

ParseExact은 구문 분석 할 필요가있는 문자열과 형식이 어떻게 지정되어야하는지 알려줄 필요가 있습니다. 각각 $_.BaseName.Substring(6,8)yyyyMMdd입니다. 우리는이를 볼 수 있습니다 당신은 실제로 postition 6에서 시작하는 8 자 변환 ParseExact을 요구하고 그래서 : 잘 분석 할 것입니다 가장 가능성이 Sort-Object을하고

"CLOG-20141031-9999.TXT".Substring(6,8) 
0141031- 

는 의도에서 실패

"CLOG-20141031-9999.TXT".Substring(5,8) 
20141031 

하위 문자열은 포지션 0으로 시작하여 여섯 번째 문자는 위치 5에 있습니다. Substring을 업데이트하면 올바른 방향으로 나아가 야합니다. 그것이 귀하의 문제의 근원이되어야합니다.

다음 주일에 수행해야하는 작업에 따라 이와 같은 것을 사용할 수 있습니다. 파일이 항상 첫 번째 하이픈 이후 날짜를 포맷하는 경우 이름 길이의 변화에 ​​좀 더 탄력적으로

PS M:\Scripts> ([string]([DateTime]::ParseExact("CLOG-20141031-9999.TXT".Substring(5,8),'yyyyMMdd',$null)).DayOfWeek).SubString(0,3) 
Fri 

-split 날짜 추출을 위해 단지뿐만 아니라 작동합니다.

"CLOG-20141031-9999.TXT".Split("-")[1] 
20141031 
관련 문제