![]() |
Найти файлы по маске и заменить в них строки
Всем привет.
Давно читаю форум и часто пользуюсь батниками, но ума не дам как дописать следующее: Есть директория E:\Steam\userdata\ в ней множество др. директорий, в каждой из которых есть файл с именем sharedconfig.vdf Мне необходимо в каждом найденном по имени "sharedconfig.vdf" файле заменить строку "cloudenabled" "1" на "cloudenabled" "0" (строка находится в рандомном месте как по вертикали файла, так и по горизонтали) Начало простое: Код:
For /F %%i in ('"where /R E:\Steam\userdata\ "sharedconfig.vdf""') do ( |
hunk3r, Хотелось бы потрогать файл руками - упакуйте пожалуйста и предоставьте.
|
Цитата:
powershell script.ps1 Код:
dir "E:\Steam\userdata\" -rec -inc 'sharedconfig.vdf'|%{ run.bat Код:
@echo off |
Кодировка 1251 как я понял.
![]() |
Цитата:
Цитата:
|
|
Вложений: 1
Прошу прощения, торопился) Вот.
|
Цитата:
Кодировка там UTF8. Вернул кодировку в скрипте... |
Цитата:
Если я правильно понимаю, то \s*\ между кавычками - это любое количество пробелов? |
Цитата:
|
Проверил, работает. Еще раз всем спасибо!
|
Цитата:
|
Цитата:
В приложенном файле, как раз, конец строк в формате Unix... Протестируйте вышеприведенный скрипт... Цитата:
Цитата:
|
Цитата:
Наблюдаю забавный побочный эффект — в файл добавляется пустая строка с концом строки в формате DOS/Windows. И файл в оригинале был без BOM. |
Цитата:
Способ сохранения без bom есть, но если это некритично, то и смысла это делать особого нет... Что касается лишней строки... ну, это ведь микрософт, с ним без веселья никак... Можно, конечно, оттримить текст, лишней строки не будет, но конечным символом массива текста, все же будет \r\n, от этого избавиться непросто.. |
Цитата:
|
Цитата:
Самый "простой" вариант :) : разворачиваем параллельно существующему - PoSh Core (они не мешают друг другу), вот в нем уже есть возможность UTF8NoBOM... т.е. этот же скрипт будет в нем работать, останется только исправить кодировку на нужную. Ну, или по-старинке: Код:
$utf8nobom = new-object system.text.utf8encoding($false) |
Цитата:
Код:
$UTF8Encoding = New-Object -TypeName 'System.Text.UTF8Encoding' -ArgumentList $false Вот за то я PowerShell и не люблю: хоть уже и напоминает отожравшегося монстра, но кучу простых и естественных вещей по-прежнему не умеет нормально делать, и выясняется, что старые дедовские способы программирования всё ещё работают надёжнее. |
Цитата:
Код:
$utf8nobom = new-object system.text.utf8encoding($false) Цитата:
Во всяком случае, это уже далеко не ограниченный cmd... К тому же, сейчас это открытый проект, развивается себе постепенно... |
Монстр, монстр ;). Командлеты и так уже перегружены всяческими параметрами (и, что самое печальное, многочисленными умолчаниями) по самое нехочу, причём картина, зачастую, складывается удручающая. Поначалу куча вещей банально оставалась за бортом, добавляясь только после многочисленных пинков со стороны пользователей через одну-две версии, и то не сразу, и через пень-колоду. Одни и те же сущности в разных командлетах могли быть тупо реализованы отличным образом. Какая-нибудь никому не нужная хрень могла появиться ещё в первой версии, а такие банальные и необходимые для администрирования вещи, как отправка почты по защищённому протоколу, работа с архивами, работа с ftp, работа с альтернативными потоками данных, получали свои командлеты спустя долгое, долгое время.
Я бы лично предпочёл какой-нибудь интерпретатор для .Net по аналогу с WSH на основе той же сладкой парочки VB/JS. |
Цитата:
Параметры есть в любом языке, но вот справка аналогичная к ним... где ещё есть такая же? Ну, я имею в виду wsh и cmd, для сравнения... а про функционал можно и не упоминать даже... Кроме того, где есть ещё такая реализация конвейеров, причем с объектами вместе? Цитата:
Если бы с WSH было бы всё так радужно, то никакой монад на свет и не появился бы... Да и портянки кодов можно посравнивать при аналогичных задачах... powershell, явно выиграет. |
Добрый день!
Хотел адаптировать привелденный здесь скрипт для своих нужд, но что-то не получается.. Нужно во всех файлах Description поменять номер версии находящийся в теге <targetVersion>14.4.0</targetVersion> Код:
dir "D:\WINDOWS\" -rec -inc 'Description'|%{ Прошу помочь с исправлением скрипта! Нашел еще такой пример, но тоже не работает.. Код:
$sSourceFolder = 'D:\WINDOWS' |
Цитата:
Цитата:
|
Цитата:
|
Возможно. У Вас какая версия ОС?
|
Цитата:
|
Вроде установил более новую версию powershell (7.0.0-preview.1), при запуске теперь нет тех ошибок, но и замена все равно не происходит.
|
Цитата:
Цитата:
Код:
dir 'D:\WINDOWS' -rec -inc 'Description' |%{ |
YuS_2, благодарю, теперь работает.
|
Время: 07:10. |
Время: 07:10.
© OSzone.net 2001-