Показать полную графическую версию : [решено] Переименование с сохранением цифр
Добрый день! С "Старым" Новым Годом!
Помогите, пожайлуста, с переименованием группы файлов где в имени необходимо оставить все присутствующие цифры и символы (точка, тире, подчеркивание), а из букв оставить только две первые встречающиеся.
Пы.Сы. И желательно какую-нибудь проверку чтобы не было повторов.
И желательно какую-нибудь проверку чтобы не было повторов. »
И желательно какое-нибудь описание, что предпринимать в этом случае.
И желательно какое-нибудь описание, что предпринимать в этом случае. »
думал над этим... наверное добавлять третью букву. Если же вдруг каким чудом и в этом случае совпадет отменить переименование или добавить четвертую - что проще реализовать.
Foreigner
14-01-2014, 21:12
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
14-01-2014, 21:49
Iska, Спасибо, исправил
Foreigner, ошибки времени исполнения на таком:
1.txt
1.zip
0001.cmd
114-2.rar
AutoHotkey_L_Install.exe
Destination.txt
наборе.
Update: Понял, наверное, просто в 2.0 нет ещё параметра «-Literal» у «Rename-Item».
Foreigner
14-01-2014, 22:15
Цитата Iska: Понял, наверное, просто в 2.0 нет ещё параметра «-Literal» у «Rename-Item».
Вероятно так, но кажется -literalpath есть у move-item, можно попробовать. Если в именах нет [квадратных скобок], то можно и без этого параметра.
На PowerShell устроит? »
Спасибо, только подскажите пожалуйста, а что в системе должно быть установлено чтобы работал скрипт?
Гугл как-то на этот вопрос отвечает, что все должно и так работать, а вот у меня не работает.
Должен быть установлен Powershell, и разрешено исполнение неподписанных локальных скриптов.
простите за детские вопросы, но с PowerShell имею дело первый раз...
запустить вроде удалось, но появляется только какая-то красная надпись (что написано уловить не смог) и собственно переименования не происходит.
что написано уловить не смог »
Запустите отдельно PowerShell, затем уже в нём запускайте скрипт.
Запустите отдельно 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, так? ОС у Вас какая?
похоже, у Вас также вторая версия PowerShell, так? ОС у Вас какая? »
Да, скачал и поставил вторую. А какую надо?
Работаю на 32-х битной Windows XP.
Foreigner
15-01-2014, 17:23
pzh2393,
Работаю на 32-х битной Windows XP
Вместо ren пропишите move-item или уберите -literal ( при условии, что в названиях нет квадратных скобок )
Спасибо!
Квадратных скобок нет.
А как ограничить выполнение по расширению? а то скрипт сейчас дополнительно переименовывает и "сам себя".
Foreigner
15-01-2014, 17:39
pzh2393, Подставить нужную маску:
gci *.txt, *.doc, *.jpg | ...
Не лучше ли будет «-Exclude»?
Foreigner
15-01-2014, 18:13
Iska, Тоже верно, если не надо выбирать отдельные расширения
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.