|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Найти файлы по маске и заменить в них строки |
|
CMD/BAT - Найти файлы по маске и заменить в них строки
|
Новый участник Сообщения: 14 |
Профиль | Отправить PM | Цитировать Всем привет.
Давно читаю форум и часто пользуюсь батниками, но ума не дам как дописать следующее: Есть директория E:\Steam\userdata\ в ней множество др. директорий, в каждой из которых есть файл с именем sharedconfig.vdf Мне необходимо в каждом найденном по имени "sharedconfig.vdf" файле заменить строку "cloudenabled" "1" на "cloudenabled" "0" (строка находится в рандомном месте как по вертикали файла, так и по горизонтали) Начало простое: Прошу, помогите закончить скрипт. |
|
Отправлено: 18:54, 09-06-2018 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Проверил, работает. Еще раз всем спасибо!
|
Отправлено: 20:41, 09-06-2018 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 20:46, 09-06-2018 | #12 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
В приложенном файле, как раз, конец строк в формате Unix... Протестируйте вышеприведенный скрипт... Цитата Iska:
Цитата Iska:
|
|||
------- Отправлено: 20:52, 09-06-2018 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Наблюдаю забавный побочный эффект — в файл добавляется пустая строка с концом строки в формате DOS/Windows. И файл в оригинале был без BOM. |
|
Отправлено: 21:07, 09-06-2018 | #14 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Способ сохранения без bom есть, но если это некритично, то и смысла это делать особого нет... Что касается лишней строки... ну, это ведь микрософт, с ним без веселья никак... Можно, конечно, оттримить текст, лишней строки не будет, но конечным символом массива текста, все же будет \r\n, от этого избавиться непросто.. |
|
------- Отправлено: 21:32, 09-06-2018 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 21:45, 09-06-2018 | #16 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Самый "простой" вариант : разворачиваем параллельно существующему - PoSh Core (они не мешают друг другу), вот в нем уже есть возможность UTF8NoBOM... т.е. этот же скрипт будет в нем работать, останется только исправить кодировку на нужную. Ну, или по-старинке: |
|
------- Последний раз редактировалось YuS_2, 09-06-2018 в 22:46. Отправлено: 22:15, 09-06-2018 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
$UTF8Encoding = New-Object -TypeName 'System.Text.UTF8Encoding' -ArgumentList $false $sContent = [System.IO.File]::ReadAllText('C:\Мои проекты\0163\sharedconfig.vdf', $UTF8Encoding) -replace '(?<="cloudenabled"\s*")1(?=")','0' [System.IO.File]::WriteAllText('C:\Мои проекты\0163\sharedconfig2.vdf', $sContent, $UTF8Encoding) Вот за то я PowerShell и не люблю: хоть уже и напоминает отожравшегося монстра, но кучу простых и естественных вещей по-прежнему не умеет нормально делать, и выясняется, что старые дедовские способы программирования всё ещё работают надёжнее. |
|
Отправлено: 01:13, 10-06-2018 | #18 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
$utf8nobom = new-object system.text.utf8encoding($false) dir "E:\Steam\userdata\" -rec -inc 'sharedconfig.vdf'|%{ $arr = ([io.file]::readalltext($_.fullname, $utf8nobom)) -replace '(?<="cloudenabled"\s*")1(?=")','0' [io.file]::writealllines($_.fullname, $arr, $utf8nobom) } Цитата Iska:
Во всяком случае, это уже далеко не ограниченный cmd... К тому же, сейчас это открытый проект, развивается себе постепенно... |
||
------- Последний раз редактировалось YuS_2, 10-06-2018 в 09:38. Отправлено: 08:14, 10-06-2018 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Монстр, монстр . Командлеты и так уже перегружены всяческими параметрами (и, что самое печальное, многочисленными умолчаниями) по самое нехочу, причём картина, зачастую, складывается удручающая. Поначалу куча вещей банально оставалась за бортом, добавляясь только после многочисленных пинков со стороны пользователей через одну-две версии, и то не сразу, и через пень-колоду. Одни и те же сущности в разных командлетах могли быть тупо реализованы отличным образом. Какая-нибудь никому не нужная хрень могла появиться ещё в первой версии, а такие банальные и необходимые для администрирования вещи, как отправка почты по защищённому протоколу, работа с архивами, работа с ftp, работа с альтернативными потоками данных, получали свои командлеты спустя долгое, долгое время.
Я бы лично предпочёл какой-нибудь интерпретатор для .Net по аналогу с WSH на основе той же сладкой парочки VB/JS. |
Отправлено: 08:42, 10-06-2018 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Можно ли найти файлы созданные за сегодняшний день и дать отчет о них | ufooo | Скриптовые языки администрирования Windows | 12 | 20-04-2016 01:49 | |
CMD/BAT - Найти в подкаталогах файлы по маске и вывести в текст список тех, у которых первые 2 | surgutfred | Скриптовые языки администрирования Windows | 2 | 27-01-2016 19:07 | |
CMD/BAT - [решено] Отделить слово от строки по маске | blackeangel | Скриптовые языки администрирования Windows | 2 | 11-11-2015 23:07 | |
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox | ultrarare | Скриптовые языки администрирования Windows | 11 | 03-07-2013 14:37 | |
CMD/BAT - [решено] Нужно найти все файлы *.log в папке dir и подпапках и заменить на файлы нулевой длины | dclxvi | Скриптовые языки администрирования Windows | 4 | 04-07-2012 21:28 |
|