Пакетное переименование всех файлов PNG в папках и подпапках

Я пытаюсь переименовать все файлы 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:FinalDirRenameCommands.txt"


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

то, что это делает прямо сейчас, собирает все файлы PNG во всех каталогах в папка, которая создает пакетный файл, чтобы переименовать все файлы, которые он копирует в FinalDir. Конечный результат переименования будет выглядеть как SERVER1-VirtualBootTest-3-3-18.формат PNG. Я не могу понять, как сделать изменение даты с файлом и добавить, что каталог-это два каталога над файлом.

30
задан Rmuell01
28.01.2023 16:18 Количество просмотров материала 2554
Распечатать страницу

1 ответ

так что этот скрипт должен делать трюк. Это относительно просто.

$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 переменную в Path) рекурсивно до конца структуры.

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"

0
отвечен HeedfulCrayon 2023-01-30 00:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх