2017-11-04 13 views
1

모든 폴더를 동일한 폴더에있는 여러 폴더로 정렬해야 모든 JPG를 "parentfolder"+ "#"로 이동하고 이름을 바꿀 수 있습니다. 여기서 "parentfolder" 상위 폴더 이름이고 "#"은 해당 폴더에있는 각 파일 그룹의 연속 레이블입니다. 폴더 . 예를 들어폴더에서 특정 파일을 옮기고 이름을 바꾸고 폴더마다 연속적으로 이름을 지정하십시오.

는 \ MainID1 \ 입력 a.jpg, b.jpg, c.jpg 및 다른 파일 형식입니다. . \ Input \ MainID2 또한 a.jpg, b.jpg, c.jpg 및 일부 다른 파일 형식입니다.

소망하는 출력으로 이름을 변경 한 폴더에있는 모든 JPS 저장하는 것입니다 : 그런 다음 수 있도록 다음 폴더에 찾고 루프 리셋이

 
File Path   New File name 
MainID1\a.jpg  MainID1_1 
MainID1\b.jpg  MainID1_2 
MainID1\c.jpg  MainID1_3 

을위한 :

 
File Path   New File name 
MainID2\a.jpg  MainID2_1 
MainID2\b.jpg  MainID2_2 
MainID2\c.jpg  MainID2_3 

개별 폴더마다 루프를 다시 시작하는 방법을 찾는 데 문제가 있습니다. 현재 루프는 전체 디렉토리의 .jpg 파일을 반복합니다.

C:\Users\Rango\Renaming\Input> Get-ChildItem -Recurse -Filter *.jpg | 
ForEach-Object {$c = 1} 
{Write-Host $_.Directory.Name $c; $c++} 
{ $c = 1} 

출력 :이 변경 될 때이 작업을 수행하는

 
Main ID 1 1 
Main ID 1 2 
Main ID 1 3 
Main ID 1 4 
Main ID 10 5 
Main ID 10 6 
Main ID 10 7 
Main Id 100 8 
Main Id 101 9 
Main Id 102 10 
Main Id 102 11 
Main Id 102 12 
Main Id 102 13 
Main Id 102 14 
Main Id 102 15 
Main Id 102 16 
Main Id 102 17 
Main Id 102 18 
Main Id 102 19 
Main Id 102 20 
Main Id 102 21 
Main Id 102 22 
Main Id 103 23 
Main Id 104 24 
Main Id 104 25 
Main Id 105 26 
Main Id 105 27 
Main Id 106 28 
Main Id 107 29 
Main Id 109 30 
etc. 

답변

0

디렉토리 이름별로 그룹화하고 다음과 같이 모든 파일 그룹에 루프 할 수 있습니다.

Get-ChildItem "c:\temp" -Recurse -File -Filter *.jpg | group DirectoryName |%{ 
$Dir=$_ 
$Cpt=1 
$_.Group | %{rename-item $_.FullName -NewName ("{0}\{1}_{2}" -f $Dir.Name, (Split-Path $Dir.Name -Leaf), $Cpt++) -WhatIf} 
} 

주 : GET-ChildItem을에

  1. 사용 - 파일 (디렉토리는 JPG 디렉토리 incude 인 포함, 그렇지 않은 경우)
  2. 당신이, 002, 003을 001로 끝난 파일 이름을 원하는 경우 (의 동일한 형식을 유지 번호를 입력하십시오.) 내 코드를 수정하고 "{0} {1} _ {2}"을 (를) 대체하십시오.
  3. 물론 이것을 적용하려면 what-if를 제거하십시오 이름 바꾸기 명령
+0

왜 그런지 모르겠지만이 코드는 JPG 파일이 존재하지 않는 - JPG 파일에 대한 올바른 경로를 참조합니다. – DrDre

+0

내 실수. -LiteralPath를 사용하여 내 경로가 와일드 카드 문자를 가진 Rename-Item의 경로를 지정합니다. 이것은 완벽하게 작동합니다. 감사합니다. – DrDre

+0

최종 수정 : 이름이 바뀐 파일의 끝에 .jpg가 추가됩니다. – DrDre

0

한 가지 방법은 이전 파일 (예 : $oldName)의 디렉토리 이름을 저장하는 변수를 생성하고 $c를 재설정하는 것입니다

Get-ChildItem -Recurse -Filter *.jpg | 
ForEach-Object { 
    if($_.Directory.Name -ne $oldName){$c = 1} 
    Write-Host $_.Directory.Name $c; $c++ 
    $oldName = $_.Directory.Name 
}