Переименование с сохранением цифр
Добрый день! С "Старым" Новым Годом!
Помогите, пожайлуста, с переименованием группы файлов где в имени необходимо оставить все присутствующие цифры и символы (точка, тире, подчеркивание), а из букв оставить только две первые встречающиеся.
Пы.Сы. И желательно какую-нибудь проверку чтобы не было повторов.
|
Цитата:
Цитата pzh2393
И желательно какую-нибудь проверку чтобы не было повторов. »
|
И желательно какое-нибудь описание, что предпринимать в этом случае.
|
Цитата:
Цитата Iska
И желательно какое-нибудь описание, что предпринимать в этом случае. »
|
думал над этим... наверное добавлять третью букву. Если же вдруг каким чудом и в этом случае совпадет отменить переименование или добавить четвертую - что проще реализовать.
|
pzh2393, На PowerShell устроит?
Код:
function rename ( $old, $e ) {
0..( $old.length - 1 ) | % {
if ( $old[$_] -match '[a-zA-Z]' ) {
$cnt++
if ( $cnt -le 2 ) { $new += $old[$_] }
}
else { $new += $old[$_] }
}
if ( $old -ne $new ) {
while ( test-path "$( $new )$( $e )" ) { $new += [char] ( get-random -min 65 -max 90 ) }
}
ren -literal "$( $old )$( $e )" "$( $new )$( $e )"
}
gci | ? { ! $_.psiscontainer } | % { rename $_.basename $_.extension }
|
Foreigner, некорректно отрабатывает на односимвольных именах — добавляет к ним ещё один символ.
|
Foreigner, ошибки времени исполнения на таком:
читать дальше »
Код:
1.txt
1.zip
0001.cmd
114-2.rar
AutoHotkey_L_Install.exe
Destination.txt
наборе.
Update: Понял, наверное, просто в 2.0 нет ещё параметра «-Literal» у «Rename-Item».
|
Цитата Iska:
Цитата:
Понял, наверное, просто в 2.0 нет ещё параметра «-Literal» у «Rename-Item».
|
Вероятно так, но кажется -literalpath есть у move-item, можно попробовать. Если в именах нет [квадратных скобок], то можно и без этого параметра.
|
Спасибо, только подскажите пожалуйста, а что в системе должно быть установлено чтобы работал скрипт?
Гугл как-то на этот вопрос отвечает, что все должно и так работать, а вот у меня не работает.
|
Должен быть установлен Powershell, и разрешено исполнение неподписанных локальных скриптов.
|
простите за детские вопросы, но с PowerShell имею дело первый раз...
запустить вроде удалось, но появляется только какая-то красная надпись (что написано уловить не смог) и собственно переименования не происходит.
|
Цитата:
Цитата pzh2393
что написано уловить не смог »
|
Запустите отдельно PowerShell, затем уже в нём запускайте скрипт.
|
Цитата:
Цитата Iska
Запустите отдельно PowerShell, затем уже в нём запускайте скрипт. »
|
Пичет, что:
Rename-Item : A parameter cannot be found that matches parameter name 'literal'.
At D:\teMp\testPS\test.ps1:22 char:17
+ ren -literal <<<< "$( $old )$( $e )" "$( $new )$( $e )"
+ CategoryInfo : InvalidArgument: (:) [Rename-Item], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.RenameItemCommand
Может можно всетаки такое же реализовать средствами CMD?
|
pzh2393, похоже, у Вас также вторая версия PowerShell, так? ОС у Вас какая?
|
Цитата:
Цитата Iska
похоже, у Вас также вторая версия PowerShell, так? ОС у Вас какая? »
|
Да, скачал и поставил вторую. А какую надо?
Работаю на 32-х битной Windows XP.
|
pzh2393,
Цитата:
Работаю на 32-х битной Windows XP
|
Вместо ren пропишите move-item или уберите -literal ( при условии, что в названиях нет квадратных скобок )
|
Спасибо!
Квадратных скобок нет.
А как ограничить выполнение по расширению? а то скрипт сейчас дополнительно переименовывает и "сам себя".
|
pzh2393, Подставить нужную маску:
Код:
gci *.txt, *.doc, *.jpg | ...
|
Не лучше ли будет «-Exclude»?
|
Iska, Тоже верно, если не надо выбирать отдельные расширения
|
Время: 20:28.
© OSzone.net 2001-