Вслед за @ ответ DavidW, вот основная последовательность PowerShell, чтобы сделать это:
Get-ChildItem . | % { svn mv $_.name ($_.name -replace '..\.','.') }
Это будет работать для конкретных образцов в вопросе, но она не будет выполнена в угловом случае, когда имя файла содержит несколько точек, например что-то вроде «ProjectX.MyFileXY.c». В любом из двух регулярных выражений ниже являются более надежными и будет работать с несколькими точками (это также показывает, как быстро проверить регулярное выражение/заменить операцию в изоляции):
"ProjectX.MyFileXY.c" -replace '..\.(?=[^.]*$)','.'
"ProjectX.MyFileXY.c" -replace '..(\.[^.]*?)$','$1'
Хотя вопрос только просил для обработки файлов в текущий каталог, Дэвид включил обработку потомков, поэтому я подумал, что должен обобщать мое решение и для параллелизма. Общее решение - изучение поддерево с корнем в текущем каталоге - требует добавления всего пару параметров Get-ChildItem (я также местами в одном из более надежных regexs здесь):
Get-ChildItem . -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
Но это нет prune private .svn
каталоги, как Дэвид сделал с Linux find
команда. Поскольку Get-ChildItem
не имеет такой опции, я добавил расширенную версию (Get-EnhancedChildItem) в мои библиотеки с открытым исходным кодом (скачать here), которая включает в себя несколько дополнительных параметров; -ExcludeTree
эквивалентно -prune
:
Get-EnhancedChildItem . -ExcludeTree .svn -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
Наконец, мой расширение Командлет предлагает еще одну дополнительную опцию (-Svn
), которые могут быть использованы не только игнорировать личную директорию Subversion, а игнорировать любые файлы, которые не под Subversion источник:
Get-EnhancedChildItem . -Svn -Recurse -NoContainer |
% { svn mv $_.name ($_.name -replace '..\.(?=[^.]*$)','.') }
Если у меня нет Subversion, я могу установить его с существующим существующим клиентом TortoiseSVN, который я установил? – SSS
Если у вас есть TortoiseSVN 1.7, у вас уже есть утилиты командной строки Subversion, поэтому вам не нужно ничего устанавливать. Просто проверьте каталог bin под TortoiseSVN. Также обратите внимание, что скрипт Дэвида (т. Е. Команда 'find') предназначен для Linux/Unix, а не для Windows. –