Я хотів би пакетно перейменовувати файли в папці, додаючи ім'я папки до нових імен. тобто файли в C:\house chores\
будуть усі перейменовані house chores - $old_name
.
Я хотів би пакетно перейменовувати файли в папці, додаючи ім'я папки до нових імен. тобто файли в C:\house chores\
будуть усі перейменовані house chores - $old_name
.
Відповіді:
Варіант 1: Використання Windows PowerShell
Відкрийте меню windows. Введіть: "PowerShell" і відкрийте командне вікно "Windows PowerShell".
Перейти до папки з потрібними файлами: напр. Cd "C: \ house chores" Примітка: адреса має містити лапки "", якщо є пробіли.
Ви можете використовувати "dir", щоб переглянути всі файли в папці. Використовуючи '|' буде конвеєрним виведенням 'dir' для команди, яка наступна.
Примітки: "dir" - це псевдонім "Get-ChildItem". Див .: wiki: cmdlets . Можна надати додаткові функціональні можливості. наприклад, 'dir -recurse' виводить усі файли, папки та підпапки.
Що робити, якщо я хочу лише діапазон файлів?
Замість 'dir |' Я можу використовувати:
dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |
Для пакетного перейменування з назвою каталогу як префіксом:
dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}
Варіант 2: Використання командного рядка
У папці натисніть shift + клацніть правою кнопкою миші: виберіть "відкрити тут командне вікно"
for %a in (*.*) do ren "%a" "prefix - %a"
Якщо файлів багато, можливо, було б добре додати до цього команду '@echo off' та в кінці команду 'echo on'.
do
) не працює - після того, як деякі файли були перейменовані, for
знаходить їх під новою назвою, додаючи префікс знову і знову, доки не буде досягнуто обмеження довжини імені файлу.
ren was unexpected at this time.
уявляю, чому?
do
його відповіді відсутнє слово . так повинно бутиfor %a in (.) do ren "%a" "prefix - %a"
Проблема з двома відповідями Powershell тут полягає в тому, що префікс може дублюватися, оскільки сценарій потенційно може перезапустити файл як до, так і після того, як він був перейменований, залежно від того, до якого каталогу вдається виконати процес перейменування. Щоб обійти це, просто скористайтеся -Exclude
опцією:
Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }
Це не дозволить процесу перейменовувати будь-який файл більше одного разу.
Безкоштовне програмне забезпечення " Утиліта масового перейменування " також добре працює (і воно також потужне для розширених завдань). Завантаження та встановлення займає хвилину.
Дивіться скріншоти та підручник на оригінальному веб-сайті.
-
Я не можу надати покрокові знімки екрана, оскільки зображення повинні видаватися під ліцензією Creative Commons , і я не володію скріншотами програмного забезпечення.
Застереження: Я жодним чином не пов'язаний із зазначеним програмним забезпеченням / компанією. Мені сподобався продукт для мого власного завдання, він відповідає операційним та подібним вимогам, тому рекомендує.
Це спрацювало для мене, спочатку компакт-диск у каталозі, на який ви хотіли б змінити імена файлів, а потім виконайте таку команду:
Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
Я виривав волосся, тому що для деяких елементів перейменований елемент буде знову перейменований (неодноразово, якщо не буде досягнуто максимальної довжини імені файлу). Це відбувалося як для Get-ChildItem, так і для конфігурації вихідних даних реж. Я припускаю, що перейменовані файли були підібрані через зміну алфавітного порядку. Я вирішив цю проблему таким чином:
Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }
Це "блокує" результати, повернені Get-ChildItem, у змінну $ dirs, і ви можете перебирати її, не боячись того, що порядок зміниться або відбудеться інший кумедний бізнес.
Порада Дейва.Гугга щодо використання -Exclude також повинна вирішити цю проблему, але це інший підхід; можливо, якщо файли, які перейменовані, вже містять шаблон, використаний у префіксі.
(Застереження: я дуже PowerShell n00b.)
Я знаю, що це давнє запитання, але я багато чому навчився з різних відповідей, але придумав своє власне рішення як функцію. Це має динамічно додавати батьківську папку як префікс до всіх файлів, що відповідають певному шаблону, але лише в тому випадку, якщо він ще не має цього префікса.
function Add-DirectoryPrefix($pattern) {
# To debug, replace the Rename-Item with Select-Object
Get-ChildItem -Path .\* -Filter $pattern -Recurse |
Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} |
Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
# Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}
https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00
@
в@echo on
не потрібно. Ти щойно повернувся@echo off
.