Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

cchameleone



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2) (часть 3) (часть 4)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
» Описание Cmd.exe » Command shell overview
» Using batch files » Using batch parameters » Using filters » Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Попов А. Командная строка и сценарии Windows (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна, Выполнение BAT-скриптов без вызова окна консоли
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)

Всего записей: 2271 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
GEGEMON

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexandrPessimist

Цитата:
 в Notepad++ вручную искать\заменять каждое значение во всех файлах в папке..

не надо вручную. Открываешь всефайлы папки и найти и заменить во всех открытых файлах - вуаля!

Всего записей: 2374 | Зарегистр. 07-02-2006 | Отправлено: 21:19 28-09-2018
AlexandrPessimist



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GEGEMON, так это и есть - вручную..Открыть все файлы не могу, их около 100. Делаю так:
Ctrl+F -> Найти в файлах
указываю значение для поиска
указываю значение для замены
указываю папку для поиска текстовых файлов. Каждая замена занимает 1-1,5 мин., а нужно заменить около 150 значений...

Всего записей: 21 | Зарегистр. 19-02-2016 | Отправлено: 21:25 28-09-2018
GEGEMON

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexandrPessimist

Цитата:
Открыть все файлы не могу, их около 100

виснет штоля? в чем проблема открыть 100 файлов сразу?

Цитата:
указываю папку для поиска текстовых файлов. Каждая замена занимает 1-1,5 мин

286 машина штоли? или файлы по мегабайту?  Тогда открывай по 20 файлов, а не все разом

Всего записей: 2374 | Зарегистр. 07-02-2006 | Отправлено: 21:55 28-09-2018
regist123



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexandrPessimist, как вариант, чтобы не изобретать велосипед - ReplaceByRegular.


----------
Раздачи и акции

Всего записей: 6776 | Зарегистр. 20-03-2009 | Отправлено: 23:16 28-09-2018
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AlexandrPessimist
Вашу задачу можно решить по-разному, включая использование батника и консольного редактора. Но я бы рекомендовал использовать программу PowerGrep. Она, конечно, избыточна для вашей простой задачи, однако, освоив ее использование в будущем у вас не будет проблем со многими задачами связанными с текстовыми или бинарными данными в любом числе файлов и любом количестве последовательных операций (поиск, замена, удаление, извлечение данных, объединение или разделение данных и проч.)
 
Ваш готовый список замен легко превратить в секцию .pga файла (Action)  в любом текстовом редакторе, то есть к виду

Код:
<action actiontype="replace" searchtype="....>
            <searchtext>найти_1</searchtext>
            <replacetext>заменить_1</replacetext>
            <searchtext>найти_2</searchtext>
            <replacetext>заменить_2</replacetext>
            ...
            ...
            <sectioning sectiontype="whole file"/>
            <context contexttype="line" numbering="1" extra="context"/>
        </action>

Задать все параметры поиска и замены (включая список файлов), кроме списка замен (вручную вводить долго) и сохранить настройки в скрипт Action (.pga). Отредактировать указанную выше секцию скрипта, внеся в нее список замен. Открыть полученный .pga в программе из меню Action и запустить. И все.
 
По этому алгоритму решается большинство задач подобного уровня (то есть, минут 10 без посторонней помощи).

Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 11:57 29-09-2018
AlexandrPessimist



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jonmey, спасибо за совет, возьму на заметку. Уже воспользовался скриптом, по ссылке regist123, скрипт отработал корректно..
 

Всего записей: 21 | Зарегистр. 19-02-2016 | Отправлено: 22:15 29-09-2018
MihailM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть вопрос: А можно как то организовать удаление 2-3 расширений , определенного формата точнее маски расширения. Вот пример , у меня есть файл вот такого формата (пример- расширения могут быть разные) : "имя.ехе.ехе.ехе".  А мне надо удалить последние 2 и 3  расширения , то есть оставить 1 расширение , и привести вот к такому имени файла/ "имя файла.расширение" . А то файлов очень много и переводить "ручками" в нужный формат, сами понимаете очень трудновато, и еще все файлы разбросаны по разным папкам !

Всего записей: 2266 | Зарегистр. 19-10-2003 | Отправлено: 13:32 01-10-2018 | Исправлено: MihailM, 00:00 02-10-2018
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM
Для вас принципиально нужно совершить акт переименования через консоль?
Если нет, то, например, в Total Commander удаление повторяющихся расширений
- выделить нужные файлы и нажать Ctrl-M
-  В группе 'Найти и заменить' поставить галку [E] (учитывать расширения) и галку RegEx (использовать регулярные выражения)
- в поле Найти, напр.
(\.\w{1,3})\1+
в поле Заменить
$1
- Нажать кнопку Старт
 
В PowerGrep аналогично. Выбрать нужные файлы или папки.
Action type: Rename files
Search type: Regular Expession
В поле Search, напр.
([.].{1,3})\1+
В поле Replacement
$1
Нажать кнопку Rename (для предварительного просмотра результата Preview)
 
Аналогично делается в любой программе поддерживающей переименование с регэкспами. Но можно решить задачу и без регэкспов (подольше, но не сильно) даже во всяких бесплатных простых переименователях файлов aka https://alternativeto.net/software/batch-file-renamer/

Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 15:51 01-10-2018 | Исправлено: Jonmey, 15:53 01-10-2018
MihailM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jonmey

Цитата:
Для вас принципиально нужно совершить акт переименования через консоль?

Да , а то даже через ТС это тоже затруднительно и может занять уйму времени. Вот почему желательно консоль. Потому-что :
Цитата:
А то файлов очень много и переводить "ручками" в нужный формат, сами понимаете очень трудновато, и еще все файлы разбросаны по разным папкам !

 
А так спасибо , и за программки .. может что и найду ..

Всего записей: 2266 | Зарегистр. 19-10-2003 | Отправлено: 20:46 01-10-2018 | Исправлено: MihailM, 21:00 01-10-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM

Цитата:
как то организовать удаление 2-3 расширений

На PowerShell примерно так

Код:
Get-ChildItem * | foreach {
    $oldname = $_.Name
    $newname = $oldname -replace "(\.[^.]+)\1+$",'$1'
    if ($newname -ne $oldname) {
        Write-Host "Rename `"$oldname`" -> `"$newname`""
        Rename-Item $oldname $newname
    }
}

Удаляются только повторяющиеся расширения типа .txt.txt.txt


----------
Разум когда-нибудь победит

Всего записей: 2350 | Зарегистр. 09-02-2003 | Отправлено: 20:54 01-10-2018
MihailM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Smitis, не мне надо разные . Хотя можно же и маску наверное сделать то и шире - на 2-3 расширения то , прокатит такой вариант ?
Jonmey
Цитата:
Total Commander удаление повторяющихся расширений
, вот блин , столько лет с ТС и не знал что есть такая фича в ней. Стареем-стареем :)
 
 

Всего записей: 2266 | Зарегистр. 19-10-2003 | Отправлено: 21:04 01-10-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM

Цитата:
не мне надо разные

Разные это типа filename.txt.doc.exe в filename.txt?


----------
Разум когда-нибудь победит

Всего записей: 2350 | Зарегистр. 09-02-2003 | Отправлено: 21:09 01-10-2018 | Исправлено: Smitis, 21:11 01-10-2018
MihailM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis, ага . а же вроде написал же :
Цитата:
(пример- расширения могут быть разные) : "имя.ехе.ехе.ехе".

 

Всего записей: 2266 | Зарегистр. 19-10-2003 | Отправлено: 21:15 01-10-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MihailM

Цитата:
вроде написал же

так надо было и пример давать самый сложный...
к тому же, из приведенного примера вовсе нет однозначного вывода, какое из расширений остается - то ли после первой точки до следующей, то ли всё, что после крайней точки считать расширением... и сколько расширений  может присутствовать одновременно?
А вообще, надо создателям таких "суперрасширенных" файлов либо по рукам надавать, либо мозг прокапать и никаких лишних телодвижений не понадобится

Всего записей: 3192 | Зарегистр. 03-02-2009 | Отправлено: 21:46 01-10-2018 | Исправлено: YuS_2, 21:47 01-10-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2

Цитата:
А вообще, надо создателям таких "суперрасширенных" файлов либо по рукам надавать, либо мозг прокапать и никаких лишних телодвижений не понадобится

У меня как-то одна кривая программа (к сожалению нужная) очень любила удваивать расширения при сохранении. И при этом фиг их показывала. До пяти штук доходило.
 

Цитата:
а же вроде написал же

Показали как раз повторяющиеся.
Вариант + рекурсия

Код:
Get-ChildItem * -Recurse | foreach {
    $oldname = $_.Name
    $newname = $oldname -replace "(\.[^ .]+)(\.[^ .]+)+$",'$1'
    if ($newname -ne $oldname) {
        Write-Host "Rename `"$oldname`" -> `"$newname`""
        Rename-Item -LiteralPath $_.FullName $newname
    }
}

"Но есть один нюанс" - что считать расширением в таком случае? Точка это обычный символ в именах файлов. Можно так напереименовывать...

----------
Разум когда-нибудь победит

Всего записей: 2350 | Зарегистр. 09-02-2003 | Отправлено: 22:29 01-10-2018
MihailM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
какое из расширений остается - то ли после первой точки до следующей, то ли всё


Цитата:
то есть привести к такому имени файла/ов имя "имя файла.расширение"

Вроде бы тоже написал.Да и макс. расширений 3 всего в таком файле , то есть надо удалить 2 посл. расширения. да кстати с этим да , чуток запутал . потому что можно же наверное удалить скажем 1 и 2 , а оставить 3 . Что для меня неправильный результат .
 
исправил, чтоб не придирались )
Smitis

Цитата:
У меня как-то одна кривая программа (к сожалению нужная) очень любила удваивать расширения при сохранении. И при этом фиг их показывала. До пяти штук доходило.  


Цитата:
А вообще, надо создателям таких "суперрасширенных" файлов либо по рукам надавать, либо мозг прокапать и никаких лишних телодвижений не понадобится  

Да я сам не поимаю как она это делает, то есть с некоторыми файлами ок , даже отличает что есть не архивные файлы,я даже ключи ставил всё равно зараза эта программка добавляет в название лишнее расширение. Программа старенькая уже bzip.

Всего записей: 2266 | Зарегистр. 19-10-2003 | Отправлено: 23:44 01-10-2018 | Исправлено: MihailM, 23:59 01-10-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM
В общем, я так и не понял, какие расширения надо оставлять и что делать с точкой, которая к расширениям отношения не имеет, если такие файлы попадутся. Поиграйтесь в моём скрипте с шаблонами, подгоните под себя.
Могу скинуть самописную консольную утилитку для переименования файлов. У ней есть фича - создаётся файл отката, позволяющий в случае неудачных действий вернуть имена файлов назад.


----------
Разум когда-нибудь победит

Всего записей: 2350 | Зарегистр. 09-02-2003 | Отправлено: 10:30 02-10-2018
MihailM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis, что же вы так заморочились то , всё намного проще , просто надо отсечь последние 2(два) расширения. Пример : имя файла.1.2.3 , вот "2.3" надо удалить из имени и всё .. То есть привести нормальный вид файла с 1(одним расширением) - "имяфайла.расширение". Расширения могут быть разные как в поиске и замене , так и полученном файле с одним расширением. То есть если вы упорно упоминаете это :
Цитата:
и что делать с точкой
То есть для вас , если вы так привязались к этой "точке , то только "1"(одну-первую) точку. Вообщем как-то так.  
 
Добавлено: Спасибо опробуем .

Всего записей: 2266 | Зарегистр. 19-10-2003 | Отправлено: 11:11 02-10-2018 | Исправлено: MihailM, 12:00 02-10-2018
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM
Окей, раз заморочился сделать скрипт, вот вариант, убирающий от 1 до 2 лишних расширений в конце. Расширением считается последовательность символов отличных от точки и пробела, перед которыми стоит точка.

Код:
Get-ChildItem * -Recurse | foreach {
    $oldname = $_.Name
    $newname = $oldname -replace "(\.[^ .]+)(\.[^ .]+){1,2}$",'$1'
    if ($newname -ne $oldname) {
        Write-Host "Rename `"$oldname`" -> `"$newname`""
        Rename-Item -LiteralPath $_.FullName $newname
    }
}

 


----------
Разум когда-нибудь победит

Всего записей: 2350 | Зарегистр. 09-02-2003 | Отправлено: 11:37 02-10-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MihailM

Цитата:
То есть для вас , если вы так привязались к этой "точке , то только "1"(одну-первую) точку. Вообщем как-то так.

программирование - наука точная, это вам не гуманитарные науки, где чем больше наговоришь или напишешь, тем умнее кажешься... шутка
Но в файловой системе именем файла считается только то, что находится до крайней точки, а всё остальное - расширением.
т.е. допустим название файла:

Код:
name.name1.name2.ext

если его разобрать на запчасти:

Код:
gi name.name1.name2.ext|%{
    $_.basename
    $_.extension
}
 

то получим результат:

Код:
name.name1.name2
.ext

что для Вашего случая не совсем подходит, поэтому и задают уточняющие вопросы, которые вы не полностью описали в условиях сразу.
В общем, по всем тем условиям, которые Вы оговорили, можно сделать примерно так:

Код:
# Предусмотрен рекурсивный отбор во всех подкаталогах от корневого
$fld = 'test' # Корневой каталог
dir $fld -rec -file|?{$_.name -match '[^\.]+\.[^\.]+\..*'}|%{
    ren $_.fullname ($_.name -replace '([^\.]+\.[^\.]+)\..*','$1') -whatif # в боевых условиях удалить: "- whatif"
}

Всего записей: 3192 | Зарегистр. 03-02-2009 | Отправлено: 12:00 02-10-2018
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru