Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переименование с сохранением цифр (http://forum.oszone.net/showthread.php?t=275743)

pzh2393 14-01-2014 11:13 2288790

Переименование с сохранением цифр
 
Добрый день! С "Старым" Новым Годом!

Помогите, пожайлуста, с переименованием группы файлов где в имени необходимо оставить все присутствующие цифры и символы (точка, тире, подчеркивание), а из букв оставить только две первые встречающиеся.

Пы.Сы. И желательно какую-нибудь проверку чтобы не было повторов.

Iska 14-01-2014 13:30 2288870

Цитата:

Цитата pzh2393
И желательно какую-нибудь проверку чтобы не было повторов. »

И желательно какое-нибудь описание, что предпринимать в этом случае.

pzh2393 14-01-2014 16:39 2288997

Цитата:

Цитата Iska
И желательно какое-нибудь описание, что предпринимать в этом случае. »

думал над этим... наверное добавлять третью букву. Если же вдруг каким чудом и в этом случае совпадет отменить переименование или добавить четвертую - что проще реализовать.

Foreigner 14-01-2014 21:12 2289254

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 }


Iska 14-01-2014 21:42 2289267

Foreigner, некорректно отрабатывает на односимвольных именах — добавляет к ним ещё один символ.

Foreigner 14-01-2014 21:49 2289269

Iska, Спасибо, исправил

Iska 14-01-2014 22:01 2289278

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 2289288

Цитата Iska:
Цитата:

Понял, наверное, просто в 2.0 нет ещё параметра «-Literal» у «Rename-Item».
Вероятно так, но кажется -literalpath есть у move-item, можно попробовать. Если в именах нет [квадратных скобок], то можно и без этого параметра.

pzh2393 15-01-2014 12:18 2289527

Цитата:

Цитата Foreigner
На PowerShell устроит? »

Спасибо, только подскажите пожалуйста, а что в системе должно быть установлено чтобы работал скрипт?
Гугл как-то на этот вопрос отвечает, что все должно и так работать, а вот у меня не работает.

Iska 15-01-2014 13:45 2289605

Должен быть установлен Powershell, и разрешено исполнение неподписанных локальных скриптов.

pzh2393 15-01-2014 15:41 2289681

простите за детские вопросы, но с PowerShell имею дело первый раз...
запустить вроде удалось, но появляется только какая-то красная надпись (что написано уловить не смог) и собственно переименования не происходит.

Iska 15-01-2014 16:30 2289703

Цитата:

Цитата pzh2393
что написано уловить не смог »

Запустите отдельно PowerShell, затем уже в нём запускайте скрипт.

pzh2393 15-01-2014 16:46 2289723

Цитата:

Цитата 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?

Iska 15-01-2014 16:53 2289732

pzh2393, похоже, у Вас также вторая версия PowerShell, так? ОС у Вас какая?

pzh2393 15-01-2014 17:02 2289739

Цитата:

Цитата Iska
похоже, у Вас также вторая версия PowerShell, так? ОС у Вас какая? »

Да, скачал и поставил вторую. А какую надо?
Работаю на 32-х битной Windows XP.

Foreigner 15-01-2014 17:23 2289754

pzh2393,
Цитата:

Работаю на 32-х битной Windows XP
Вместо ren пропишите move-item или уберите -literal ( при условии, что в названиях нет квадратных скобок )

pzh2393 15-01-2014 17:35 2289762

Спасибо!
Квадратных скобок нет.
А как ограничить выполнение по расширению? а то скрипт сейчас дополнительно переименовывает и "сам себя".

Foreigner 15-01-2014 17:39 2289765

pzh2393, Подставить нужную маску:
Код:

gci *.txt, *.doc, *.jpg | ...

Iska 15-01-2014 18:05 2289780

Не лучше ли будет «-Exclude»?

Foreigner 15-01-2014 18:13 2289788

Iska, Тоже верно, если не надо выбирать отдельные расширения


Время: 20:28.

Время: 20:28.
© OSzone.net 2001-