2012-06-20 3 views
0

'yyyyMMdd'형식으로 날짜가 모두 긴 파일 목록이 있으며 'MMM-yy'로 변경해야합니다. 이것에 대해 가장 좋은 방법은 무엇입니까?파일 이름 바꾸기 - 파일 이름 내에 'yyyyMMdd'를 'MMM-yy'로 변환합니다.

정규식

  • 추출 &를 사용 'file_one_20120620.pdf'> 'file_one_JUN-12.pdf'

    1. '날짜'를 찾습니다 조작 날짜
    2. 이름 바꾸기 파일

    조이 아래 PowerShell 스크립트를 제안 , 그것은 작동해야하는 것처럼 보입니다. 그러나 제공된 코드를 변경해도 계속 벽에 부딪칩니다. 어떤 도움이라도 좋을 것입니다, 고마워요!

  • +1

    로 변환 정규 표현식만으로 숫자에서 텍스트까지의 달. – nhahtdh

    +1

    위험한 소리입니다. 20120620이라는 파일과 20120605라는 파일 두 개가 있다면 어떻게됩니까? 충돌이있을 것입니다. 파일이 월별로 고유합니까? –

    +0

    @nhahtdh - 나는 공중에서 텍스트를 가져올 수 없기 때문에 내가 할 수 있다고 생각하지 않았습니다. - http://stackoverflow.com/questions/5433313/convert-dd-mm-yyyy-to-mm-dd-yyyy -in-javascript - 아마도 VBA 함수에서 Sylvain Defresne의 대답과 비슷한 것을 할 수 있을까요? –

    답변

    4

    당신은 PowerShell을 사용하여이 작업을 수행 할 수는 :

    gci | # get files 
        foreach { 
        $newName = [Regex]::Replace($_.BaseName, '\d{8}$', { 
         param($m) 
         [datetime]::ParseExact($m.Value, 'yyyyMMdd', $null).ToString('dd-MMM') 
        }) + $_.Extension 
        Rename-Item $_ $newName 
        } 
    
    +0

    완벽하게 보이고 지금 시험해 보겠습니다. –

    +0

    작동하지 않는 것 같아요. 파일 중 하나만 '.pdf'로 변경하고 나머지는 실패합니다. –

    +1

    흠. 정규 표현식 부분은 올바르게 작동합니다 (내가 가장 많이 의심했던 부분이었습니다). 그러나 데이터 손실을 막기 위해 Rename-Item에'-WhatIf'를 사용해야합니다.내가 이것을 구할 수있을지라도 나는 몇 분 안에 노력할 것이다. – Joey

    1
    Get-ChildItem | # get files 
    foreach { 
    $newName = [Regex]::Replace($_.BaseName, '\d{8}$', { 
        param($m) 
        [datetime]::ParseExact($m.Value, 'yyyyMMdd', $null).ToString('dd-MMM') 
    }) + $_.Extension 
    Rename-Item $_ $newName -WhatIf 
    $_ 
    $newname 
    } 
    

    이것은 내가 한 모든 변경 GCI이었다 내 테스트 목록과 함께 일을 얻을-ChildItem을을합니다 ..하면 어떻게

    : 작업을 수행 "이름 바꾸기 파일 "대상"항목 : C : \ ab \ file_four_20120701.txt 대상 : C : \ ab \ file_four_01-Jul.txt ".

    다음과 같은 경우 대상 "항목 : C : \ ab \ file_one_20120620.txt 대상 : C : \ ab \ file_one_20-Jun.txt"에서 작업 "파일 이름 바꾸기"수행.

    다음과 같은 경우 : 대상 "항목 : C : \ ab \ file_three_20120622.txt 대상 : C : \ ab \ file_three_22-Jun.txt"에서 "파일 이름 바꾸기"작업 수행.

    다음과 같은 경우 : 대상 "항목 : C : \ ab \ file_two_20120621.txt 대상 : C : \ ab \ file_two_21-Jun.txt"에서 "파일 이름 바꾸기"작업 수행.

    +0

    네가 정직하게 왜 나를 위해 작동하지 않는지 말할 수 없다. 어느 쪽이든, 나는 시나리오를 위해 일해 버린 해킹 된 답변을 게시했습니다. 입력 메이트에 감사드립니다. –

    0

    내 상황에서는 위의 Joey 덕분에이 트릭을 수행합니다.

    다음 파일 이름 지정 규칙을 기반으로 :

    'file_one_20120622.pdf'는 당신이 변환 할 수 있다고 생각하지 않습니다 'file_one_JUN-22.pdf'

    gci | #get files 
        foreach { 
        $newDate = [DateTime]::ParseExact($_.Name.Split('_')[2].Split('.')[0],'yyyyMMdd',$null).ToString('MMM-yy').ToUpper() 
        $newFilename = $_.Name.Split('_')[0] + '_' + $_.Name.Split('_')[1] + '_' + $newDate + ".pdf" 
        Rename-Item $_ $newFilename -WhatIf 
        }