Переименуйте каждый файл с помощью new-guid в PowerShell

Я пытался переименовать каждый текстовый файл в папке с именем $New-Guid.txt, чтобы все они имели уникальные имена.

Кто-нибудь знает простой способ сделать это?

... | Rename-Item -NewName {(New-Guid).Guid + '.txt'}
Ansgar Wiechers 01.12.2018 13:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
1 342
1

Ответы 1

tl; dr

Get-ChildItem ... | Rename-Item -NewName { "$(New-Guid).txt" }

Обратите внимание на использование блока сценария ({ ... }) и вызов New-Guid внутри $(...), встроенного в расширяемая строка ("...").


Операции переименования / перемещения файлов с входными файлами несколько наиболее эффективно выполняются с Блоки скрипта задержка привязки, где блок сценария ({ ... }), переданный параметру -NewName / -Destination, вычисляет новое имя / имя и / или местоположение для каждого входного файла, что позволяет указать новое имя файла:

  • как трансформация имени файла Вход
  • и / или как имя файла автогенерируемая на основе, например, порядкового номера или, как в вашем случае, GUID.

Следующее обсуждает только Rename-Item -NewName, но аналогично Move-Item -Destination, но обратите внимание на важное различие:

  • -NewName для Rename-Item определяет новый название для каждого элемента ввода в его текущем местоположении, где бы он ни находился.

  • -Destination для Move-Item определяет новый дорожка для каждого элемента ввода, а указание пути относительный, включая простой файл название, равно относительно местоположения звонящего, независимо от того, где находятся входные файлы.

общий образец:

Get-ChildItem ... | Rename-Item -NewName { ... }

Обратите внимание, что входные файлы могут быть альтернативно указаны через Get-Item, как путь струны или как объекты со свойством .Path.


Пример Трансформация:

Допустим, вы хотите переименовать все файлы *.txt в текущем каталоге, добавив к их именам префикс foo-.

Внутри блока скрипта { ... } автоматическая переменная $_ ссылается на текущий входной объект, как это принято в PowerShell. При вводе файла из Get-ChildItem, $_ является экземпляром класса [System.IO.FileInfo], что позволяет вам получить доступ к его свойству .Name, чтобы получить файл название.

Get-ChildItem *.txt | Rename-Item -NewName { 'foo-' + $_.Name }

Пример Авто-генерация с Последовательность чисел:

Предположим, вы хотите переименовать все файлы *.txt в текущем каталоге, добавив к их именам двузначный порядковый номер на основе 1, за которым следует -, например, 01-.

$index = 0
Get-ChildItem *.txt |
  Rename-Item -NewName { '{0:00}-{1}' -f ++(Get-Variable -Scope 1 index).Value, $_.Name }

Примечание. Увеличение $index через ++(Get-Variable -Scope 1 $index).Value, а не просто ++$index необходимо, потому что блоки сценария привязки задержки выполняются в области видимости переменной ребенок, где ++$index неявно создает переменную местный$index, которая выходит за пределы области действия после каждого вызова - для более подробного объяснения, см. этот ответ.

Другие вопросы по теме