Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - скрипт для замены текста в файле

Ответить
Настройки темы
Любой язык - скрипт для замены текста в файле

Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


есть каталог с папками(профилями почты 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



а потом вернуть как было.

Отправлено: 13:14, 20-11-2014

 

Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


не корректно отработал
получилось
Цитата:
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=0
Path=\\S680000FILE3\MAIL\shlikov_snE

а должно было быть
Цитата:
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=0
Path=\\S680000FILE3\MAIL\shlikov_sn
и рекурсия где то ломается, т.е. скрипт не отрабатывает все папки, только первых несколько

Отправлено: 14:45, 21-11-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата batyaPS:
не корректно отработал »
Не надо было удалять комментарий из кода!


Цитата batyaPS:
рекурсия где то ломается, т.е. скрипт не отрабатывает все папки, только первых несколько »
Продолжу разработку только тогда, когда распакую архив с Вашей папкой, выложенный на RGhost.

Последний раз редактировалось Georgio, 21-11-2014 в 15:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:33, 21-11-2014 | #12


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


Цитата Georgio:
Не надо было удалять комментарий из кода! »
не удалял.

Цитата Georgio:
Продолжу разработку только тогда, когда распакую архив с Вашей папкой, выложенный на RGhost. »
все 2тб данных не реально выложить, я выложил для наглядности папку mail и входящие в неё профили, профили очистил.
может что бы скрипт работал быстрее и не спотыкался на чём то (например кириллицу в именах папок или файлов) рекурсию ограничить вхождением до одного.

да, и тут пока проверял оказалось что некоторые профили настроены по ip
т.е. часть строки с ip нужно заменить по аналогии с именем
т.е. 10.11.60.16 на допустим 10.11.60.228

http://rghost.ru/59192373

Отправлено: 23:59, 21-11-2014 | #13


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата batyaPS:
например кириллицу в именах папок или файлов »
В выложенном примере нет кириллицы.

Отправлено: 00:42, 22-11-2014 | #14


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


batyaPS,
Код: Выделить весь код
$maildir = "$env:userprofile\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
    
}
На PowerShell
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:50, 22-11-2014 | #15


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата batyaPS (из скрытого текста):
Код: Выделить весь код

[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=0
Path=\\S680000FILE\MAIL\almazova_iv
»


В реальных файлах:

Код: Выделить весь код
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=0
Path=\\S680000FILE\MAIL\almazova_iv
.

Отсюда и отсутствие первой строки.
batyaPS, просто уберите из кода пустую строку после "######################".




Цитата batyaPS:
например кириллицу в именах папок или файлов »

Данному коду кириллица в именах папок не страшна, а кириллические имена файлов и вовсе к нему не имеют отношеия, так как имена всех обрабатывемых файлов-- "profiles.ini".




Цитата batyaPS:
да, и тут пока проверял оказалось что некоторые профили настроены по ip
т.е. часть строки с ip нужно заменить по аналогии с именем
т.е. 10.11.60.16 на допустим 10.11.60.228 »

Код: Выделить весь код
@echo off

set "dir=D:\Work\583\MAIL"
set "file=profiles.ini"

:: Если нужно изменить строку, то "act=3".
:: Если нужно "отозвать" изменение, то "act=".
set act=

for /f "delims=" %%i in ('
 "2>nul dir /a-d/b/s "%dir%\%file%""
') do (
 for /f "tokens=2,4 delims=\" %%j in ('
  findstr /rc:"^Path=\\\\" "%%i"
 ') do (
  >"%%i" (
  <"%~f0" more +41
  <nul (
  set /p=Path=\\
  if defined act (
   if "%%j"=="S680000FILE" (
    set /p=S680000FILE%act%
   ) else (
    set /p=10.11.60.228
   )
  ) else (
   if "%%j"=="S680000FILE3" (
    set /p=S680000FILE
   ) else (
    set /p=10.11.60.16
   )
  )
  set /p=\MAIL\%%k
  )
  )
  )
 )

exit /b

######################
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=0
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:20, 22-11-2014 | #16


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


Georgio, работает
спасибо

Цитата Foreigner:
$m »
Foreigner, с повером что то не сложилось кучу ошибок высыпал
Скрытый текст

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


Отправлено: 11:10, 24-11-2014 | #17


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Цитата batyaPS:
$env:C:\1\MAIL »
Просто C:\1\Mail
В моем примере была системная переменная userprofile, я к ней обратился через "диск" переменных env:
Код: Выделить весь код
$env:userprofile
dir env:  -- выведет все переменные
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:13, 24-11-2014 | #18


Аватара для batyaPS

Ветеран


Сообщения: 968
Благодарности: 61

Профиль | Отправить PM | Цитировать


раз уж такое дело - а подскажите читабельную на выходе команду которая выведет по всем папкам в папке без рекурсии права ? т.е. запустив в папке что бы выдала какие права у вложенных в данную папку имеются .

Отправлено: 23:29, 09-01-2015 | #19


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата batyaPS:
раз уж такое дело - а подскажите »
batyaPS, читайте Правила: «Один вопрос — одна тема», а не «Один участник — одна тема».

Отправлено: 06:27, 10-01-2015 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - скрипт для замены текста в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
TextReplace - Программа для поиска и замены текста в любых файлах AZJIO AutoIt 6 02-02-2018 20:56
CMD/BAT - [решено] Нужен bat для замены значения в определенном файле. Asybra Скриптовые языки администрирования Windows 9 04-12-2013 05:12
Replacer - утилита для замены подстроки в файле apozlevich AutoIt 4 16-10-2013 23:37
Любой язык - Скрипт для замены Kira1 Скриптовые языки администрирования Windows 2 15-07-2013 18:39
CMD/BAT - [решено] Подскажите скрипт или утилиту для перевода текста в txt-файле в другую раскладку Trueman777 Скриптовые языки администрирования Windows 7 23-09-2011 22:43




 
Переход