2016-06-30 2 views
2

PowerShell에서 5 일이 넘은 폴더 내의 모든 파일의 이름을 바꾸기 위해 노력했습니다.Powershell의 부분 파일 이름 바꾸기

파일 이름은 모든 읽기로 :

XTYPE -to- CoOrd & WBS - 20140313 
XTYPE -to- CoOrd & WBS - 20140314 

등 때때로 약간의 이상 등이있을 것이다 : 이제

XTYPE -to- CoOrd & WBS - 20140316 - do not use 
XTYPE -to- CoOrd & WBS - 20140314 (AutoSaved) 

는 단순히에서 "& WBS"을 제거 할 각 파일 (모든 파일이 엑셀 형식으로 저장되므로 파일이됩니다)

XTYPE -to- CoOrd- 20140313 
XTYPE -to- CoOrd- 20140314 
XTYPE -to- CoOrd- 20140316 - do not use 
XTYPE -to- CoOrd- 20140314 (AutoSaved) 

지금 내 코드는 지금까지 내가 믿는 91,363,210는

$myFolder = '\\iiGlasgow.co.uk\public\Controls\Archived Files\' 
ForEach ($File in Get-Childitem $myFolder | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-5)}) 

그래서 나는 폴더를 설정하고 5 일이 지난 항목을 처리하는 PowerShell을 권고했다 ... 거기에 충분히 근처에 있습니다.

그러나 부분 문자열 요소를 대체 할 수는 없지만 ... 아마도 실제로는 그렇게 간단하지 않을 것입니다. 나는 인터넷을 샅샅이 뒤지고 모든 종류의 반복을 시도했지만 그것은 일어나지 않았다.

그래서 다음 읽기 솔루션에 가장 가까운 생각하는 내 마지막 요소 ...

{ 
$myFile = $file.name 
$myFullFilename = $file.FullName 
$myRenamed = $myFile.Replace(" & WBS ","") 
} 

용이성에 대한 전체 스크립트?

$myFolder = '\\iiGlasgow.co.uk\public\Controls\Archived Files\' 
ForEach ($File in Get-Childitem $myFolder | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-5)}) 
{ 
$myFile = $file.name 
$myFullFilename = $file.FullName 
$myRenamed = $myFile.Replace(" & WBS ","") 
} 

내 실수에서 귀하의 도움과 조언은 언제나 대단히 감사하겠습니다!

답변

2

Where-Object cmdlet을 확장하고 & WBS을 포함하는 모든 basename을 필터링합니다. 그런 다음 Rename-item cmdlet을 사용하여 파일의 이름을 바꿉니다.

$myFolder = '\\iiGlasgow.co.uk\public\Controls\Archived Files\' 
Get-Childitem $myFolder | 
    Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-5) -and $_.BaseName -Match ' & WBS ' } | 
    Foreach { 
     $_ | Rename-Item -NewName ($_.Name -replace ' & WBS ') 
    }