View previous topic :: View next topic |
Author |
Message |
kin369
Joined: 23 Nov 2009 Posts: 9
|
(Separately) Posted: Mon Oct 15, 2012 20:16 Post subject: |
|
|
Avada
___Перед созданием темы просматривал форум, и "базу знаний", и книгу про ТК. Пробовал примерять приведённые там примеры и на их основе делать свои маски - не получилось(первый опыт с рег. выражениями, до сих пор обходилось без них). Пока не смог разобраться с применением спецсимволов... Глядя на ответ задачи, вижу, что в своём случае не доставил круглых скобок(ну и кое-что ещё) - при случае буду изучать дальше.
Batya
___Спасибо за помощь! |
|
Back to top |
|
 |
Iori
Joined: 25 Apr 2012 Posts: 552
|
(Separately) Posted: Mon Oct 22, 2012 04:17 Post subject: |
|
|
Пытаюсь сделать кнопку которая сразу переименовывает несколько фаилов или папок в такой вид.
ДО: любой файл
После: _любой файл
Пока сделал вот такую кнопку, но она только работает с одним файлом или с одной папкой.
Code: |
TOTALCMD#BAR#DATA
cmd /c
ren %N _%N
shell32.dll,134
Rename Folders / Files Under Cursor into _FileName
1
-1
| [/b] |
|
Back to top |
|
 |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Mon Oct 22, 2012 05:13 Post subject: |
|
|
Проверять ломает - спать хочу, но, вроде, должно работать |
|
Back to top |
|
 |
Iori
Joined: 25 Apr 2012 Posts: 552
|
(Separately) Posted: Mon Oct 22, 2012 05:20 Post subject: |
|
|
Serge Yolkin,
Делал уже такое. Меняет только один файл, но не больше.
Так-же пробовал ren "%S" "_%S", тоже самое. |
|
Back to top |
|
 |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Mon Oct 22, 2012 09:15 Post subject: |
|
|
Ну, да. Правильно. Не будет. Очень спать хочу. Батник надо прикручивать. Или скрипт. Принимать %S и в цикле поочерёдно переименовывать. Например, rename.wsf: Code: | <job id="clr" version="0.1">
<object id="f" progid="Scripting.FileSystemObject" />
<script type="text/jscript" language="JScript">
for(var i=0;i<WScript.Arguments.length;i++){
if(f.fileExists(WScript.Arguments(i))){
f.getFile(WScript.Arguments(i)).name='_'+WScript.Arguments(i);
}
}
</script>
</job> |
|
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Oct 22, 2012 12:09 Post subject: |
|
|
Iori
Code: | TOTALCMD#BAR#DATA
%ComSpec% /c for /f "delims=" %i in
('type %WF') do ren "%%i" "_%%i""
wcmicons.dll,46
Добавить знак подчёркивания спереди имён выделенных файлов
1 |
|
|
Back to top |
|
 |
Iori
Joined: 25 Apr 2012 Posts: 552
|
(Separately) Posted: Mon Oct 22, 2012 21:25 Post subject: |
|
|
Serge Yolkin
Не мучайтесь идите спать
Flasher
Спасибо! То что надо, но есть одно но. Кнопка работает отлично с файлами, но ничего не делает с папками.
EDIT:
И ещё, можно ли дороботать кнопку так, что бы она обратно переименовывала файлы и папки при нажатие на кнопку второй раз.
Один раз нажимаем на кнопку, получаем:
любой файл --> _любой файл
Второй раз нажимаем на кнопку, получаем:
_любой файл --> любой файл |
|
Back to top |
|
 |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Mon Oct 22, 2012 23:14 Post subject: |
|
|
Iori
Да я уже выспался...
ReReName.wsf, вызов [ReReName.wsf %S] Code: | <?xml version="1.0" standalone="yes" encoding="utf-8"?>
<job id="rrn" version="0.1">
<object id="f" progid="Scripting.FileSystemObject" />
<script type="text/jscript" language="JScript"><![CDATA[
for(var i=0;i<WScript.Arguments.length;i++){
if(f.fileExists(WScript.Arguments(i))){
if(f.getFile(WScript.Arguments(i)).name.substring(0,1)=='_'){
f.getFile(WScript.Arguments(i)).name=
WScript.Arguments(i).substring(1);
}else f.getFile(WScript.Arguments(i)).name='_'+WScript.Arguments(i);
}
}
]]></script>
</job> | Особенность: если выделены файлы и на "_", и без - скрипт проинвертирует имена, т.е. те файлы, имена которых начинались на _ станут без подчерка, и наоборот. |
|
Back to top |
|
 |
Iori
Joined: 25 Apr 2012 Posts: 552
|
(Separately) Posted: Mon Oct 22, 2012 23:32 Post subject: |
|
|
Serge Yolkin
Спасибо вам за скрипт, но я предпочитаю либо батник либо напрямую через кнопку. На работе компьютеры не разрешают запускать скрипты. [/b] |
|
Back to top |
|
 |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Tue Oct 23, 2012 00:03 Post subject: |
|
|
Iori
Вы бы проверили на работе такой способ запуска: Code: | wscript Диск:\Путь\КакойНибудьСкрипт.wsf | обычно сисадмины себе такую лазейку оставляют. А я бы батники перед скриптами запретил - навредить ими можно не хуже (как минимум), а писать не сложнее... |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2707
|
(Separately) Posted: Tue Oct 23, 2012 14:47 Post subject: |
|
|
Iori
Хотелось бы уточнить: неужели вызов кнопкой (команда MULTIRENAME с именем шаблона) тоталовского инструмента группового переименования и последующее нажатие двух клавиш (Enter и Esc) представляет такую трудность или будет использоваться настолько часто, что непременно требует автоматизации (с трёх нажатий до одного)? |
|
Back to top |
|
 |
Iori
Joined: 25 Apr 2012 Posts: 552
|
(Separately) Posted: Tue Oct 23, 2012 19:45 Post subject: |
|
|
sa,
Про multirename я знаю, но хотелось бы кнопку.
Как говорится, каждому своё. [/b] |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2707
|
(Separately) Posted: Tue Oct 23, 2012 21:38 Post subject: |
|
|
Iori wrote: | но хотелось бы кнопку |
Знакомо: я тоже завёл себе когда-то скрипт, который вызывает пользовательскую команду для выполнения группового переименования по шаблону и посылает нажатия {Enter} и {ESC}. |
|
Back to top |
|
 |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Wed Oct 24, 2012 02:51 Post subject: |
|
|
Немного не в тему, но вот скрипт, упрощенные версии которого я предлагал выше (принимает параметр %S) Code: | <?xml version="1.0" standalone="yes" encoding="utf-8"?>
<job id="ren" version="0.4">
<object id="f" progid="Scripting.FileSystemObject" />
<script type="text/jscript" language="JScript"><![CDATA[
var n=[],o;
for(var i=0;i<WScript.Arguments.length;i++){
o=fo(WScript.Arguments(i));
if(o&&fm(o))fr(o,fo(n[n.length-1]));
}
function fm(e){
var t=fn(e);
if(n.join('?').match(e.name))return false;
else n[n.length]=t;
return true;
}
function fn(e){
var t=e.name;
if(t.substring(t.length-4)=='.bak')return(t.substring(0,t.length-4));
else return(t+'.bak');
}
function fo(e){
if(f.fileExists(e))return(f.getFile(e));
else if(f.folderExists(e))return(f.getFolder(e));
else return false;
}
function fr(x,y){
if(y){
var r=Math.random(),t=x.name;
x.name=r;
y.name=t;
}x.name=n[n.length-1];
}
]]></script>
</job> | Переименовывает файлы/папки добавляя (или убирая, если уже есть) расширение .bak. Особенности:
1. Допустим, есть два файла name и name.bak - скрипт поменяет их местами во всех трёх случаях: а). если передать ему name; б). если передать name.bak и в). если передать оба файла (двойного переименования не будет).
2. Допустим, есть папка name и файл name.bak - скрипту пофиг, где файл, а где папка, всё равно переименует (поменяет имена местами) и то, и другое.
Область применения - переточка проектов из нескольких связанных файлов, например, русификация (но не только). Если изменённые файлы/папки имеют неизменённые backup (bak) копии, можно быстро переключаться между двумя вариантами: выделяем файлы по расширению .bak и выполняем скрипт. |
|
Back to top |
|
 |
Iori
Joined: 25 Apr 2012 Posts: 552
|
(Separately) Posted: Sun Oct 28, 2012 00:01 Post subject: |
|
|
Serge Yolkin
Сегодня попробовал ваш скрипт на роботе. Как я и думал, админы перекрыли это дело и скирт не запустился.
Поэтому просьба кнопки ещё в силе.
Кнопка Flasher-а роботает хорошо, но она не меняет папки и не переводит названия файлов и папок обратно. |
|
Back to top |
|
 |
|