일괄 폴더 및 하위 폴더의 모든 PNG 파일 이름 바꾸기


0

여러 하위 폴더 내의 모든 PNG 파일의 이름을 바꾸려고합니다. 내가하고있는 일에 대한 설명은 아래를 참조하십시오.

What is currently in place:
COMPANY
     SERVER1
         (Random).png
COMPANY2
     SERVER32
         (Random).png

What I want:

COMPANY
     SERVER1
         Company - Server1 - (Date PNG Modified).png
COMPANY2
     SERVER32
         Company2 - Server32 - (Date PNG Modified).png

어떻게하면됩니까? 문제가있는 부분은 첫 번째와 두 번째 디렉토리 이름뿐만 아니라 파일 이름을 고칠 수있는 수정 날짜를 얻는 것입니다.

내가 가지고있는 현재 스크립트는 다음과 같습니다.

@echo off
for /r %%D in (.) do (
  for /f "delims=" %%F in ('dir /b /A:-D "%%D\*.png"') do (
    echo ren "D:\FinalDir\%%F" "%%~nxD-VirtualBootTest-3-3-18.png"
)) >> "D:\FinalDir\RenameCommands.txt"


FOR /R "D:\OriginalDir" %%i IN (*.png) DO COPY "%%i" "D:\FinalDir"

이것이 지금하고있는 일은 배치 파일을 작성하는 폴더의 모든 디렉토리에있는 PNG 파일을 모두 모아 FinalDir에 복사하는 모든 파일의 이름을 바꾸는 것입니다. 이름을 바꾸면 최종 결과는 SERVER1-VirtualBootTest-3-3-18.png처럼 보입니다. 파일을 사용하여 날짜를 변경하는 방법을 알아낼 수 없으며 디렉토리가 파일 위에있는 두 디렉토리가 무엇인지 추가합니다.

답변:


0

따라서이 스크립트는 트릭을 수행해야합니다. 비교적 간단합니다.

$files = Get-ChildItem $basePath -File -Filter *.png -Recurse
foreach($file in $files){
    $pathParts = $file.fullName.split('\')
    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
    $first = $pathParts[-3]
    $second = $pathParts[-2]
    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"
}

다음은 세부 사항입니다.

$files = Get-ChildItem $basePath -File -Filter *.png -Recurse

먼저 기본 경로 ( $basepath변수를 경로 로 설정해야 함)부터 구조의 끝까지 재귀 적으로 모든 파일을 가져 옵니다.

foreach($file in $files){
    $pathParts = $file.fullName.split('\')
    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")
    $first = $pathParts[-3]
    $second = $pathParts[-2]
    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"
}

그런 다음 각 파일에 대해 다음을 수행하십시오.

  • '\'문자를 기준으로 파일의 전체 이름 (경로 및 파일 이름)을 분할합니다.

    $pathParts = $file.fullName.split('\')

  • lastWriteTime에 액세스하여 원하는 형식으로 포맷합니다.

    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")

  • 내용 $first$second변수가 오른쪽에서 분할 된 경로에 액세스 (-1 파일명 것, -2 부모가 -3이므로 해당 부모의 부모이며).

    $first = $pathParts[-3]

    $second = $pathParts[-2]

  • 수집 된 모든 정보를 가져 와서 파일 이름을 수집 된 정보로 바꿉니다.

    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.