переименовывать файлы в powershell - PullRequest
2 голосов
/ 02 апреля 2011

Как мне переименовать каждый файл в папке:

шаблон: (первая часть имени файла) .digit_ (endoffilename)

например

a.1_f
b.2_f
c.3_g

Я хотел бы заменить его на

a.01_f
b.02_f
c.03_ g

...

Спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

Попробуйте это:

Get-ChildItem | Where {!$_.PSIsContainer} | 
    Rename-Item -NewName {$_ -replace '([^.]+)\.(\d)(\w)', '$1.0$2$3'} -wh

Или, если у вас более девяти файлов:

gci | ? {!$_.PSIsContainer -and $_.Name -match '([^.]+\.)(\d)(\w+)'} |  
  rni -NewName {$matches[1] + ("{0:00}" -f [int]$matches[2]) + $matches[3]} -wh

Во втором примере псевдонимы используются для сокращения команды (проще для ввода). gci - это псевдоним для Get-ChildItem, ? - это псевдоним для Where-Object, а rni - это псевдоним для Rename-Item. -wh вызывает функцию WhatIf, в которой PowerShell покажет вам, что он будет делать, так что вы можете переключаться с командой, пока не будете удовлетворены результатами. Затем удалите -wh, чтобы фактически выполнить его.

0 голосов
/ 02 апреля 2011

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

  • Регулярное выражение, соответствующее вашим файлам, может быть \w+\.\d+_\w
  • Чтобы напечатать «001», когда у вас есть 1, вы можете использовать оператор форматирования, например «{0: 000}» -f 1
  • Чтобы перебрать файлы, используйте Get-ChildItem & Foreach-Object или как мне нравится писать ls | % {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...