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

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

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

Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 200 201

   

Maz



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

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ 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. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.10 до Windows 11 +Win95cmd +ReactOS) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на своей версии ОС.
 
· Большой сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 39133 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: metatrop, 07:55 29-11-2022
Release



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, подскажите пожалуйста.
Как сформировать строку копирования файлов с определенным именем и любым расширением кроме двойного и более(если найдется)?
Т.е, к примеру, есть в папке файлы "document.txt", "document.doc", "document.doc.tmp". Нужно чтобы скопировались только первые два.

 
Разобрался, нужно добавить точку после звездочки: "copy pathToFolder\fileName.*. destinationPath"

Всего записей: 420 | Зарегистр. 01-01-2006 | Отправлено: 15:21 02-12-2021 | Исправлено: Release, 15:32 02-12-2021
syrenium

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, возможно ли через cmd закреплять и откреплять приложения на начальном экране Windows 10?
Пуск - ПКМ - Закрепить на начальном экране.
Если возможно, то как?

Всего записей: 674 | Зарегистр. 07-12-2015 | Отправлено: 21:32 06-12-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При запуске из *.cmd скрипта:    call  :Run__Dism++
:Run__Dism++
"Dism++10.1.1001.10\Dism++x64.exe"
"Dism++10.1.1001.10\Dism++x86.exe"
goto :eof

скрипт останавливается и ждет закрытия окна Dism++
А при запуске даже так:  call :Run__CompactOS_Win-7-8
:Run__CompactOS_Win-7-8
cd  /d CompactOS_Win-7-8
start "Stea" /WAIT  CompactOS.exe  
cd /d "%~dp0"
goto :eof

открывается окно stea.cmd - но скрипт продолжается - как заставить скрипт ждать закрытия окна  stea.cmd?
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1817 | Зарегистр. 04-09-2015 | Отправлено: 18:43 17-12-2021
Inoz2000



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Зачем вам stea.cmd, уберите его.

Всего записей: 5259 | Зарегистр. 23-04-2009 | Отправлено: 20:41 17-12-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inoz2000
Убрать отсюда
start "Stea" /WAIT  CompactOS.exe
Что с ним что без - одинаково скрипт не останавливается.
 
Удачи

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1817 | Зарегистр. 04-09-2015 | Отправлено: 21:45 17-12-2021 | Исправлено: alex52mail, 21:45 17-12-2021
Fenrizz



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

Код:
cmd /C start "Stea" /WAIT  CompactOS.exe  

или

Код:
start "Stea" /wait cmd /c CompactOS.exe

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 22:14 17-12-2021 | Исправлено: Fenrizz, 22:27 17-12-2021
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alex52mail
Вполне вероятно, что этот "CompactOS.exe" запускает другой процесс (или копию себя), после чего закрывается.

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 22:23 17-12-2021
BorlandIMHO

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

Цитата:
Убрать отсюда
start "Stea" /WAIT  CompactOS.exe
Что с ним что без - одинаково скрипт не останавливается.

Мне не удалось понять, что такое "CompactOS.exe" (в 10-ке со всеми обновами такого файла нет) и как оно работает, но не исключаю, что в "не останавливается скрипт" виновата именно эта программа.
Команда {start "Stea" /WAIT  CompactOS.exe} порождает процесс {CompactOS.exe} и ждёт его завершения. Если {к примеру} этот процесс запускает свой дочерний процесс, выполняющий собственно работу а сам завершается - то команда start вполне себе спокойно отдаст управление следующей команде скрипта, как и должно быть.
 
Но это чисто предположение - ибо, судя по выдаче гугля, программа не то, чтобы распространённая. Внятной информации по ней просто нет...

----------
http://www.imho.ws

Всего записей: 2664 | Зарегистр. 12-10-2006 | Отправлено: 22:26 17-12-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
CompactOS.exe  - это засунутое в  exe  -  запускает батник  При его запуске - открывается cmd окно для lzx сжатия файлов  win-7-8   У меня это часть скрипта для сжатия файлов системы и  сжатия vhd
Появился очень редко автор CompactOS.exe - может он что ответит.
 
Fenrizz
Нет - все равно открывается окно stea.cmd  а скрипт продолжает работать не останавливаясь.
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1817 | Зарегистр. 04-09-2015 | Отправлено: 00:49 18-12-2021 | Исправлено: alex52mail, 23:21 18-12-2021
GCRaistlin



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

Цитата:
Появился очень редко автор CompactOS.exe - может он что ответит.

Издевательство какое, а.

----------
Magically yours
Raistlin

Всего записей: 4132 | Зарегистр. 18-04-2005 | Отправлено: 01:15 18-12-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня несколько винд, основная w10x64R-21H2-GTX+N.vhd и ловил баги типа  
if %def% EQU 55 goto :Run-MyDefrag - в W10x32-1609LTF+Office2016.vhd  иногда (именно иногда) вылетало  "не к месту 55"  а как ниже без такого не было
if "%vhd-osv%"=="10" call :Compact__lzx
 
Какая разница между EQU что сейчас в if /?  а ранее было вроде EQ   и просто ==
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1817 | Зарегистр. 04-09-2015 | Отправлено: 23:27 18-12-2021 | Исправлено: alex52mail, 23:29 18-12-2021
metatrop

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

Цитата:
 
В операционке x64 в папке System32 находятся нормальные x64 программы. Но только для нормальных x64 и "ненормальных" x32, которые знают про особенности системы x64. А для обычных программ x32 папка System32 будет содержать программы и библиотеки x32. Называется File System Redirector  
Почему в TC x32 до сих пор не сделано отключение этого редиректа ответить может только Гислер. Наверное.
 

 
Это не совсем простая задача, как может показаться на первый взгляд - что в FAR, что в TC. Если правильно понимаю, всё дело в плагинах: они могут захотеть подгрузить DLL из system32 динамически в любой момент. FAR/TC не знает, когда именно. Если в этот момент окажется, что перенаправление отключено, то вместо 32-битного DLL будет попытка загрузить 64-битный, что вызовет ошибку и сбой работы плагина.
 
Для решения этой задачи (гарантированным и незатратным способом) пишется перехват  точки входа Native API функции LdrLoadDll(). Причём занимается он, ни много, ни мало, а "анализом" и правкой кода (!) системной функции. Для написания этого перехватчика в случае FAR потребовался Юрий Харон. Большинство менее "системно" подкованных программистов не поймёт даже как подступиться к вопросу. А просто утянуть код из репозитория FAR автор TC, возможно, не додумался - да и вообще, осведомлён ли он о превосходстве FAR по этой части?
 

Всего записей: 327 | Зарегистр. 17-09-2010 | Отправлено: 13:29 20-12-2021
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
metatrop
Спасибо за информацию. Не знал, что FAR хуки ставит. Тема хуков меня очень интересует, посмотрю, что там.

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

Всего записей: 3464 | Зарегистр. 09-02-2003 | Отправлено: 15:06 20-12-2021
anynamer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет! Нужен скрипт добычи и переделки ссылок из html файлов, скачивания по ним и переименования скаченных файлов.
Есть сайт с фото, где можно скачать "целые" фотографии маленького размера. Но дело в том, что чтобы скачать всё что нужны в ручную нужно, наверное, несколько недель. Я сохранил несколько десятков html (с галереями превьюшек) откуда можно взять некоторую инфу и сделать из неё прямые ссылки на эти небольшие фото (оригиналы фото с этого фотобанка скачать нельзя без авторизации и прав на это).
Приведу кусок html кода где есть полезная инфа для составления ссылки, в этом куске будет описание двух (чтобы было понятна структура html) фото (а в одном html их несколько десятков).
 

Код:
<article class="rubric-list__article rubric-list__article_photo"><figure class="rubric-list__article-image"><a class="rubric-list__article-anchor" href="/search/1152/104110.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank"><img src="/images/old_thumbnail/10/41/104110_thumbnail.jpg" alt="ЗДАНИЕ КАРТИННАЯ ГАЛЕРЕЯ" title="Здание Государственной картинной галереи. Место: Молдова, Кишинев. Автор: Ершов/РИА Новости." width="140" height="128"></a></figure><div class="rubric-list__article-text"><span class="rubric-list__article-id">#104110</span><time class="rubric-list__article-date" datetime="1980-09-01T00:00:00+03:00">01.09.1980</time><h1 class="rubric-list__article-title"><a href="/search/1152/104110.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank" tabindex="-1">ЗДАНИЕ КАРТИННАЯ ГАЛЕРЕЯ</a></h1><p class="rubric-list__article-announce"><a href="/search/1152/104110.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank" tabindex="-1">Здание Государственной картинной галереи.</a></p></div></article>

 
 тут я сам разделил эти два куска, в оригинале нет ни пробела между ними, ни абзаца
 

Код:
<article class="rubric-list__article rubric-list__article_photo"><figure class="rubric-list__article-image"><a class="rubric-list__article-anchor" href="/search/1153/2528869.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank"><img src="/images/old_thumbnail/252/88/2528869_thumbnail.jpg" alt='В детской киностудии "Флоричка"' title='В детской киностудии "Флоричка". Молдаваская ССР, Кишинев. Место: Молдова, Кишинев. Автор: Хворов/РИА Новости.' width="140" height="59"></a></figure><div class="rubric-list__article-text"><span class="rubric-list__article-id">#2528869</span><time class="rubric-list__article-date" datetime="1980-09-01T00:00:00+03:00">01.09.1980</time><h1 class="rubric-list__article-title"><a href="/search/1153/2528869.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank" tabindex="-1">В детской киностудии "Флоричка"</a></h1><p class="rubric-list__article-announce"><a href="/search/1153/2528869.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank" tabindex="-1">В детской киностудии "Флоричка". Молдаваская ССР, Кишинев.</a></p></div></article>

 
Я сохранил десятки html файлов (и в каждом html данные на 36 превьюшек), но скрипт записи ссылок из этих страниц не сработал (потому что ссылки там по-особому указаны),
нужен скрипт который:
1) находил нужный кусок из ссылок,
2) переделывал их в нужный вид
3) скачивал фото по этим переделанным ссылкам
4) добавлял к названию этих файлов (ставя между добавляемыми секциями символ _)  инфу из тега title с заменой символов неподдерживаемых в именах файлов и добавить в конец имени файла дату из тега </time>
 
1) <img src="/images/old_thumbnail/10/41/104110_thumbnail.jpg" [->] 10/41/104110
2) 10/41/104110 [+] https://visualrian.ru/images/old_preview/ВСТАВЛЯЕМ-СЮДА-РЕЗУЛЬТАТ-ПРЕДЫДУЩЕЙ-ОПЕРАЦИИ_preview.jpg [=] https://visualrian.ru/images/old_preview/10/41/104110_preview.jpg
 
ИЛИ сразу делал из подобного: <img src="/images/old_thumbnail/10/41/104110_thumbnail.jpg"
                                     такое: https://visualrian.ru/images/old_preview/10/41/104110_preview.jpg
Тогда пункт 2 не нужен
 
3) СКАЧИВАНИЕ ФАЙЛА
4) ПЕРЕИМЕНОВАНИЕ
   а) title="Здание Государственной картинной галереи. Место: Молдова, Кишинев. Автор: Ершов/РИА Новости." [->] Здание Государственной картинной галереи. Место - Молдова, Кишинев. Автор - Ершов - РИА Новости.
   б) <time class="rubric-list__article-date" datetime="1980-09-01T00:00:00+03:00">01.09.1980</time> [->] 01.09.1980
104110_preview.jpg [->] 104110_preview_Здание Государственной картинной галереи. Место - Молдова, Кишинев. Автор - Ершов - РИА Новости._01.09.1980.jpg
 
С заменой символов, которые не поддерживает файловая система ":/ и ограничить длину названия файла, если она получается больше чем позволяет Windows.
 Символы "/\: и остальные запретные заменить на "пробел тире пробел", т.е. на " - "
 
Взять инфу из тега превьюшки, пример:
<img src="/images/old_thumbnail/252/88/2528869_thumbnail.jpg"
нужная инфа там такая
252/88/2528869
и привести его к виду
https://visualrian.ru/images/old_preview/252/88/2528869_preview.jpg
 
 
!!! Встречаются исключения:
Бывают превью с именем совсем другого вида и ссылка на "целое" фото для него другая!
 
Поиск _ Библиотека изображений _РИА Новости_21.html
<img src="/images/0001/8870/73/000188707338_RIAN-ID-6216837.jpg
https://visualrian.ru/search/755/6216837.html?query=&area=all&country_id=15&event_from=1924-01-01&created_from=&region_id=&event_to=1991-12-31&created_to=&city_id=&orientation=all&order=desc
https://visualrian.ru/images/0001/8870/73/000188707344_RIAN-ID-6216837.jpg
 

Код:
<article class="rubric-list__article rubric-list__article_photo"><figure class="rubric-list__article-image"><a class="rubric-list__article-anchor" href="/search/755/6216837.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank"><img src="/images/0001/8870/73/000188707338_RIAN-ID-6216837.jpg" alt="Логические игрушки" title="Молдавская ССР. Коллекция логических игрушек различных форм инженера и изобретателя Александра Ордынца. Место: Молдова, Кишинев. Автор: А. Хворов/РИА Новости." width="139" height="140"></a></figure><div class="rubric-list__article-text"><span class="rubric-list__article-id">#6216837</span><time class="rubric-list__article-date" datetime="1983-09-09T13:00:00+04:00">09.09.1983</time><h1 class="rubric-list__article-title"><a href="/search/755/6216837.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank" tabindex="-1">Логические игрушки</a></h1><p class="rubric-list__article-announce"><a href="/search/755/6216837.html?query=&amp;area=all&amp;country_id=15&amp;event_from=1924-01-01&amp;created_from=&amp;region_id=&amp;event_to=1991-12-31&amp;created_to=&amp;city_id=&amp;orientation=all&amp;order=desc" target="_blank" tabindex="-1">Молдавская ССР. Коллекция логических игрушек различных форм инженера и изобретателя Александра Ордынца.</a></p></div></article></div>

 
Если в теге img, пример: <img src="/images/0001/8870/73/000188707338_RIAN-ID-6216837.jpg"
превью встречается RIAN-ID, то ссылка на "целое" фото будет:
 
ПРИМЕР 1
превью
https://visualrian.ru/images/0001/8870/73/000188707338_RIAN-ID-6216837.jpg
"целое" фото с водяными знаками
https://visualrian.ru/images/0001/8870/73/000188707344_RIAN-ID-6216837.jpg
 
ПРИМЕР 2
превью
https://visualrian.ru/images/0001/8870/72/000188707232_RIAN-ID-6216834.jpg
"целое" фото с водяными знаками
https://visualrian.ru/images/0001/8870/72/000188707238_RIAN-ID-6216834.jpg
 
 
Получается ЗАКОНОМЕРНОСТЬ, если прибавить к части названия файла (числу) этого превью (кусок названия до _RIAN-ID) +6, то получим имя файла с водянными знаками и следовательно ссылку на нужное фото:
https://visualrian.ru/images/0001/8870/73/000188707338_RIAN-ID-6216837.jpg
                                                                                +6
https://visualrian.ru/images/0001/8870/73/000188707344_RIAN-ID-6216837.jpg
 
ПРИМЕР 1
38+6=44
 
ПРИМЕР 2
32+6=38
 
Добавить обработку этих исключений,
чтобы из
<img src="/images/0001/8870/73/000188707338_RIAN-ID-6216837.jpg"
получалось
000188707344_RIAN-ID-6216837_Молдавская ССР. Коллекция логических игрушек различных форм инженера и изобретателя Александра Ордынца. Место - Молдова, Кишинев. Автор - А. Хворов - РИА Новости._09.09.1983.jpg

Всего записей: 2312 | Зарегистр. 17-05-2010 | Отправлено: 13:19 23-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как решить такую задачу.
 
Есть файлы:
c:\1.txt
c:\2.txt
 
Оба файла - это простые текстовые файлы.
Содержимое файла 1.txt:
Подстрока1=Значение1
Подстрока2=Значение2
 
Содержимое файла 2.txt:
Подстрока1=Значение3
Подстрока2=Значение4
 
Как в файле 1.txt получить такое содержимое?:
Подстрока1=Значение3
Подстрока2=Значение4
 
То есть заменить значения у одноимённых Подстрок.
 
При этом Подстрока1, Подстрока2, Значение1, Значение2, Значение3 и Значение4 - это текстовые подстроки. Подстрока1, Подстрока2 всегда постоянные. А Значение1, Значение2, Значение3 и Значение4 в файле 2.txt меняются после каждого запуска батника независимо от нас. Т.е. в задачу не входит изменение файла 2.txt, он меняется другим путём. То есть после того как батник был запущен и поменял значение Подстрока1 на Значение3, в следующий раз надо менять значение Подстрока1 уже со Значение3 на Значение5. А в следующий после этого раз значение Подстрока1 будет меняться на Значение7 и т.д. То есть после следующего запуска содержимое файла 1.txt должно будет выглядеть так:
Подстрока1=Значение5
Подстрока2=Значение6
 
Потому что содержимое файла 2.txt на тот момент будет такое:
Подстрока1=Значение5
Подстрока2=Значение6
 
А после следующего запуска батника содержимое 1.txt должно быть таким:
Подстрока1=Значение7
Подстрока2=Значение8
 
Потому что содержимое файла 2.txt на тот момент будет такое:
Подстрока1=Значение7
Подстрока2=Значение8
 
И т.д.
 
Значение1, Значение2, Значение3 и Значение4 - это текстовые подстроки фиксированной и одинаковой длинны. Длины у Подстрока1 и Подстрока2 разные, но эти подстроки никогда не меняются.
 
Как это можно реализовать?

----------
Интересные видео, рекомендую.

Всего записей: 893 | Зарегистр. 17-12-2007 | Отправлено: 22:12 23-12-2021 | Исправлено: Rako1, 22:13 23-12-2021
bytie

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1
Предположим, что ваши файлы — это файлы CSV, где разделителем полей выступает знак `=`. Назовём `Подстрока*` параметром (param), а то, что после знака `=` — значением (value).
 
Существуют инструменты (для Windows есть `xsv` и `csvq`, для Linux их ещё больше), которые позволяют работать с файлами CSV как с БД, и выполнять запросы к таким файлам CSV. Тогда можно будет выполнить запрос условного вида csvq --delim = `SELECT * FROM 1.csv as file1, 2.csv as file2 WHERE file1.param LIKE file2.param` (давно не делал подобного, пишу как оно приблизительно может выглядеть). Вывод нужного формата наверное может получиться если установить для выходного файла такой же разделитель `=`. Есть также всякие инструменты типа sed и аналогичных, которые могут подправить результирующий файл для приведения его строго к нужному формату.

Всего записей: 299 | Зарегистр. 18-08-2005 | Отправлено: 08:53 24-12-2021
Fenrizz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rako1
Если решать задачу "в лоб", то
 

Код:
@echo off
 
for /f tokens^=1^,*^ delims^=^= %%A in (1.txt) do (
for /f tokens^=1^,*^ delims^=^= %%C in (2.txt) do if /I "%%A"=="%%C" echo %%A=%%D >>1_temp.txt)
ren 1_temp.txt 1.txt

 
Добавлено:
anynamer
Вообще вопрос больше для отдельного топика по wget, там такое уже обсуждали, но примерно так
 

Код:
wget -O- ссылка 2>&1 | FIND /I "thumbnail.jpg" | wget --force-html --base=https://visualrian.ru -i- -O filename.jpg

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 09:35 24-12-2021 | Исправлено: Fenrizz, 09:58 24-12-2021
Rako1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bytie
Боюсь там, в строке может быть два знака "=". Правда, не всегда. Но, как говорится... Можно ли в csvq копировать подстроку, начиная с N-го по счёту символа в строке?
 
Fenrizz

Код:
@echo off
 
for /f tokens^=1^,*^ delims^=^= %%A in (1.txt) do (
for /f tokens^=1^,*^ delims^=^= %%C in (2.txt) do if /I "%%A"=="%%C" echo %%A=%%D >>1_temp.txt)
ren 1_temp.txt 1.txt

Работает не так как надо. В новый файл 1_temp.txt (а должно кстати в 1.txt) попадает только та Подстрока, которая есть в 2.txt, а остальные из 1.txt пропадают, а должны оставаться.
 
Вижу, в коде используется разделитель. То есть знак "=". Я прав? Если да, то прошу переделать. Надо копировать подстроку, взятую начиная с определённого, N-го по счёту символа в строке. Для каждой подстроки - это своё значение и я укажу его сам. Вы только мне скажите, куда его вписывать. То есть в коде должно быть столько участков, сколько нужно скопировать Значений из 2.txt. А у каждой Подстроки свои длины, которые я укажу вручную. Для каждой подстроки свой участок кода, потому что копировать все подстроки нужно за один запуск батника, и я естественно не буду его редактировать для копирования каждой подстроки по отдельности. Это моя ошибка, что я не указал это вначале, извините. Каждую Подстроку надо в батнике тоже указать как подстроку, то есть текстом, чтобы знать, что искать.  
 
Потом ещё одно. Тоже сразу не указал. Мне надо будет собирать Значения из разных файлов в файл 1.txt, а не только из 2.txt. Ещё нужно будет из 3.txt. И скорее всего в дальнейшем появятся ещё файлы, из которых надо собирать Значения. А ещё Значения надо собирать не только в 1.txt, а ещё в 0.txt. И, скорее всего, в дальнейшем появятся ещё файлы, в которые надо собирать значения. То есть я, потом буду этот батник редактировать, писать в нём новые участки для тех новых Подстрок, значения которых мне в будущем тоже понадобится копировать. И также буду указывать новые файлы, значения из которых мне в будущем нужно будет копировать. Длины Значений в разных файлах, из которых их надо собирать разные. В первом сообщении я написал, что эти длины одинаковые, что было ошибкой. То есть для каждой Подстроки нужно указать свою длину Значения цифрой, она для этой Подстроки будет фиксированная. А цифрой - чтобы потом я имел возможность поменять эту цифру.
 
В 1_temp.txt попадает Подстрока со Значением и при следующем запуске батника это же содержимое добавляется в конец файла ещё раз, а должно быть так: содержимое файла 1.txt не меняется за исключением Значений только тех Подстрок, которые я укажу в самом батнике. Это тоже моя ошибка, что я не указал это вначале, извините.
 
То есть 1.txt - это статичный файл, в котором должны быть актуальные Значения для Подстрок. Актуальность будет достигаться батником. А файл 2.txt - это часто обновляющийся (сам по себе) справочник этих Значений. Но в файле 1.txt есть ещё много строк, кроме тех, Значения которых нужно обновить с помощью батника. И все эти строки должны там остаться. Только Значения указанных Подстрок должны обновиться. И в файле 2.txt ещё много строк, кроме тех, Значения которых нужно из него брать.
 
То есть задачу нужно обозначить так.
Далее, чтобы не было путаницы, буду писать Параметр1 вместо Подстрока1.
Есть файлы:
1.txt:
Параметр1Значение3
Парам2Значение1
Пар6Значение9
 
2.txt:
Пар3Значение5
Парам2Значение8
Параметр1Значение7
 
Нужно:
Взять из 2.txt Значение, соответствующее Параметр1 и поместить его в 1.txt вместо того Значения, которое там есть у Параметр1.
Взять из 2.txt Значение, соответствующее Парам1 и поместить его в 1.txt вместо того Значения, которое там есть у Парам1.
 
Как видим, длина у Параметр1 9 символов. Длина его Значения 9 символов. Длина у Парам2 6 символов. Длина Значения у Парам2 9 символов.
 
Батник:
Найти в 2.txt строку, содержащую Параметр1 и скопировать подстроку длиной 9 символов, начиная с 10-го символа. Найти в 1.txt строку, содержащую Параметр1 и вставить скопированную из 2.txt подстроку на место, начиная с 10-го символа.
Найти в 2.txt строку, содержащую Парам2 и скопировать подстроку длиной 9 символов, начиная с 7-го символа. Найти в 1.txt строку, содержащую Парам2 и вставить скопированную из 2.txt подстроку на место, начиная с 7-го символа.
 
После запуска батника должно получиться так:
1.txt:
Параметр1Значение12
Парам2Значение8
Парс6Значение9
 
Порядок строк в файле 1.txt тоже не должен меняться. Во всех файлах ещё есть другие строки, не только содержащие Параметры и Значения, но и строки-комментарии и ещё много других строк. Все эти комментарии и другие строки, которые есть в этих файлах, не должны мешать и не должны изменяться в результате работы батника.

Всего записей: 893 | Зарегистр. 17-12-2007 | Отправлено: 01:16 25-12-2021 | Исправлено: Rako1, 09:52 25-12-2021
bytie

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

Цитата:
Можно ли в csvq копировать подстроку, начиная с N-го по счёту символа в строке?

Это же запросы к базе данных, так что нет, нельзя. Тут логичнее создавать из исходного новый файл автоматизированными средствами (то есть создаём новый файл, где вместо `==` будет `=`), и выполнять запросы с этим созданным файлом.

Всего записей: 299 | Зарегистр. 18-08-2005 | Отправлено: 12:32 25-12-2021
Rako1



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

Цитата:
Тут логичнее создавать из исходного новый файл автоматизированными средствами (то есть создаём новый файл, где вместо `==` будет `=`), и выполнять запросы с этим созданным файлом.

Там два знака "=" в разных местах строки может встретиться, а не подряд.

Всего записей: 893 | Зарегистр. 17-12-2007 | Отправлено: 17:37 25-12-2021
   

Страницы: 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 200 201

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd
Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru