![]() |
скрипт для замены текста в файле
есть каталог с папками(профилями почты Mozilla Thunderbird)
в каждой папке данного каталога есть некий заведомо известный файл(profiles.ini) с заведомо известным содержанием: Скрытый текст
[General] StartWithLastProfile=1 [Profile0] Name=default IsRelative=0 Path=\\S680000FILE\MAIL\almazova_iv требуется изменить рекурсивно(во всех папках данного каталога) файл profiles.ini вот так: Скрытый текст
[General] StartWithLastProfile=1 [Profile0] Name=default IsRelative=0 Path=\\S680000FILE3\MAIL\almazova_iv а потом вернуть как было. |
Э… зачем?
|
"Туда":
Код:
@echo off . "Обратно": Код:
@echo off . |
Georgio, по рабоче-крестьянски ;)? И, кстати, самое верное при
Цитата:
|
Georgio,
almazova_iv будет меняться т.е. это имя пользователя кому принадлежит профиль, практически почти всегда имя папки(имя профиля) соответствует этой строчке т.е. строку в файле вида Path=\\S680000FILE\MAIL\%переменная% нужно сменить на Path=\\S680000FILE3\MAIL\%переменная% и вообще отлично бы, если в скрипт внести переменную взамен S680000FILE и S680000FILE3 что сменив значение переменной менять все профили одним скриптом. Цитата:
|
|
хотя для меня в конкретной задаче вполне удовлетворил просто поиск значения в файле и его замена
S680000FILE на S680000FILE3 Iska, пардон, я имел ввиду что содержание нам известно, но с некоторыми изменчивыми переменными хотел просто для наглядности выложить содержимое. |
Код:
@echo off |
Georgio,
не к almazova_iv не надо привязываться вместо данного пользователя может быть что угодно. изменять требуется только S680000FILE на S680000FILE3 и подобное ну S680000FILE1 или S680000FILE2 |
Код:
@echo off |
не корректно отработал
получилось Цитата:
а должно было быть Цитата:
|
|
Цитата:
Цитата:
может что бы скрипт работал быстрее и не спотыкался на чём то (например кириллицу в именах папок или файлов) рекурсию ограничить вхождением до одного. да, и тут пока проверял оказалось что некоторые профили настроены по ip т.е. часть строки с ip нужно заменить по аналогии с именем т.е. 10.11.60.16 на допустим 10.11.60.228 http://rghost.ru/59192373 |
Цитата:
|
batyaPS,
Код:
$maildir = "$env:userprofile\mail" # Полный путь к папке MAIL |
Цитата:
В реальных файлах: Код:
[General] Отсюда и отсутствие первой строки. batyaPS, просто уберите из кода пустую строку после "######################". Цитата:
Данному коду кириллица в именах папок не страшна, а кириллические имена файлов и вовсе к нему не имеют отношеия, так как имена всех обрабатывемых файлов-- "profiles.ini". Цитата:
Код:
@echo off |
Georgio, работает
спасибо Цитата:
Скрытый текст
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> $maildir = "$env:C:\1\MAIL" # Полный путь к папке MAIL gci $maildir profiles.ini -recurse | % { (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -encoding default } Set-Content : Не удается привязать параметр "Encoding". Не удается преобразовать значение "default" в тип "Microsoft.PowerShell .Commands.FileSystemCmdletProviderEncoding" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечи сления и повторите попытку. Возможны следующие значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii". строка:5 знак:131 + (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -enc oding <<<< default + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetContentCommand Set-Content : Не удается привязать параметр "Encoding". Не удается преобразовать значение "default" в тип "Microsoft.PowerShell .Commands.FileSystemCmdletProviderEncoding" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечи сления и повторите попытку. Возможны следующие значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii". строка:5 знак:131 + (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -enc oding <<<< default + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetContentCommand Set-Content : Не удается привязать параметр "Encoding". Не удается преобразовать значение "default" в тип "Microsoft.PowerShell .Commands.FileSystemCmdletProviderEncoding" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечи сления и повторите попытку. Возможны следующие значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii". строка:5 знак:131 + (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -enc oding <<<< default + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetContentCommand Set-Content : Не удается привязать параметр "Encoding". Не удается преобразовать значение "default" в тип "Microsoft.PowerShell .Commands.FileSystemCmdletProviderEncoding" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечи сления и повторите попытку. Возможны следующие значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii". строка:5 знак:131 + (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -enc oding <<<< default + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetContentCommand Set-Content : Не удается привязать параметр "Encoding". Не удается преобразовать значение "default" в тип "Microsoft.PowerShell .Commands.FileSystemCmdletProviderEncoding" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечи сления и повторите попытку. Возможны следующие значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii". строка:5 знак:131 + (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -enc oding <<<< default + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetContentCommand Set-Content : Не удается привязать параметр "Encoding". Не удается преобразовать значение "default" в тип "Microsoft.PowerShell .Commands.FileSystemCmdletProviderEncoding" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечи сления и повторите попытку. Возможны следующие значения перечисления: "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii". строка:5 знак:131 + (gc $_.fullname) -replace "S680000FILE","S680000FILE3" -replace '\d*\.\d*\.\d*\.\d*','10.11.60.228' | sc $_.fullname -enc oding <<<< default + CategoryInfo : InvalidArgument: (:) [Set-Content], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetContentCommand |
Цитата:
В моем примере была системная переменная userprofile, я к ней обратился через "диск" переменных env: Код:
$env:userprofile |
раз уж такое дело - а подскажите читабельную на выходе команду которая выведет по всем папкам в папке без рекурсии права ? т.е. запустив в папке что бы выдала какие права у вложенных в данную папку имеются .
|
Цитата:
|
Время: 06:19. |
Время: 06:19.
© OSzone.net 2001-