2

Я пытаюсь найти сценарий, который будет работать в Windows, и префикс всех файлов в папке с именем папки, содержащей.

Например, в папке C:\FolderName1 есть 3 файла:

hello.jpg
test.txt
monday.docx

После запуска сценария для указанных файлов имена будут следующими:

FolderName1 - hello.jpg
FolderName1 - test.txt
FolderName1 - monday.docx

Я не возражаю против того, на каком языке написания сценариев это происходит, но я нигде не смог найти решения.

Заранее спасибо.

2 ответа2

2

Сколько там папок? Если только один, вы можете переименовать все файлы с одним циклом for :

  1. Создать папку C:\FolderName1_out
  2. Открыть приглашение CMD
  3. for %I in (C:\FolderName1\*) do echo rename "C:\FolderName1\%~nxI" "C:\FolderName1_out\FolderName1 - %~nxI"
  4. Если план переименования кажется правильным, удалите echo из приведенной выше команды и снова запустите

Если папок много, вы можете создать пакетный файл (заменить все% на %% и FolderName1 на% 1) и запустить его несколько раз, передав имя папки в качестве аргумента. Вы даже можете запустить этот пакетный файл в цикле for:

for /D %J in (*) do echo call my_batch.cmd %~nxJ

Если вывод кажется правильным, то удалите echo и запустите снова.

0

Использование PowerShell. Если вам нужно изменить имена файлов только в одной папке, используйте это:

gci c:\PathToFolder | Where {$_.psIsContainer -eq $false} | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

Он изменяет все файлы в этой папке (но исключает папки из переименования) в формат PathToFolder - Filename

Вы можете добавить -Recurse если у вас есть вложенные папки:

gci c:\PathToParentFolder -Recurse | Where {$_.psIsContainer -eq $false} | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

Обязательно сначала запустите тестовую папку или просто добавьте -WhatIf в конец команды, чтобы увидеть возможные результаты без фактического уничтожения ваших данных :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .