Я пытался написать скрипт PowerShell (мой первый)
- разбирать только папки в каталоге
- выберите только те папки, которые соответствуют определенному соглашению об именах («СЕЗОН ГОД»)
- изменить порядок элементов имени ('ГОД СЕЗОН')
В конце концов я использовал программу BulkRenameUtility, чтобы сделать это, используя регулярное выражение ^(\w+) (\d+) и переключив порядок токенов на $ 2 $ 1 - однако я все еще изучаю Powershell и хотел бы иметь возможность сделать это без использования внешняя программа.
Итак, чтобы повторить, в C:\Users\Test
есть папки и файлы .. некоторые из папок называются Spring 2015
, Fall 2014
, например. Однако другие папки имеют такие имена, как geogex
. Файлы имеют такие имена, как ENG1A SPRING 2015.odt
и untitled_0.odt
.
Как изменить только имена папок с именем "Весна 2015" на "Весна 2015", "Осень 2014" и т.д.?
Я был в состоянии использовать
gci | ? {$_.PSIsContainer} | select-string -pattern '\d+'
чтобы выполнить 1 и 2, но я застрял на использовании этого, чтобы сделать часть 3: на самом деле переименовать, поменяв местами элементы имени. Я попытался поместить вышеупомянутое в переменную и вот так:
gci | ? {$_.PSIsContainer} | select-string -pattern '\d+' | %{$data = $_.line; Write-Output "$data"};
однако, хотя вышеприведенный выводит именно те папки, которые я хочу, массив $ data, похоже, содержит только последнюю строку вывода. Такой что:
gci | ? {$_.PSIsContainer} | select-string -pattern '\d+' | %{$data = $_.line; Write-Output "$data"};
$data
будет выводить:
test 123
test 321
test 321
Я не уверен, что это правильное направление для начала.
Любая помощь будет принята с благодарностью.