![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск и замена строки в определенной папке и ее подпапках. |
|
CMD/BAT - Поиск и замена строки в определенной папке и ее подпапках.
|
Новый участник Сообщения: 3 |
]Имеется некая папка, в ней, возможно, находится файл "SH.INI" в котором обязательно содержится строка SIZE_LOG_FILE_KB=512 и куча других строк. Так вот, нужно найти все такие файлы "SH.INI" в конкретной папке и ее подкаталогах и заменить в них данную строку на SIZE_LOG_FILE_KB=5120.
Накидал собственными силами батник, находит и заменяет строку только в одном файле, который находится в папке с батником, но хоть убей, не понимаю как то же самое сделать для подпапок с одного батника. Подобных тем полно, но все одни связаны с заменой строки в конкретном файле в конкретном каталоге, я их пересмотрел все. Помогите пожалуйста, уже который день мучаюсь) @echo off set file=SH.INI set tmpfile=MYFILE.tmp set seek=SIZE_LOG_FILE_KB if exist %tmpfile% del /q %tmpfile% for /f "delims=" %%a in (%file%) do ( (echo %%a)|>nul find /i "%seek%="&&((echo %seek%=5120)>>%tmpfile%) (echo %%a)|>nul find /i "%seek%="||(echo %%a)>>%tmpfile% ) copy /y %tmpfile% %file% >nul del /f /q %tmpfile% >nul |
|
Отправлено: 14:36, 14-07-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Zhenyok21:
PowerShell будет проще и удобнее. Он Вас устроит? |
|
Отправлено: 14:57, 14-07-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Zhenyok21, правильно - задачу нужно разделять на простые части и решать их по-отдельности.
заменяете в своём батнике вторую строку на теперь он задаёт новое значение в любом файле переданном в качестве параметра: set_new_log_size.bat sh.ini set_new_log_size.bat c:\sh.ini set_new_log_size.bat catalog\sh.ini set_new_log_size.bat source_code.c (если использовать команду внутри батника, нужно писать %%, а не % перед переменной) |
Отправлено: 11:21, 15-07-2017 | #3 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Zhenyok21,
Вот так
@Echo Off cls Set "File=SH.INI" Set "Seek=SIZE_LOG_FILE_KB=" Set "Replace=SIZE_LOG_FILE_KB=5120" Set "BoxIn=Z:\Box_In" FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File%" /S /B /A:-D 2^>nul`) DO ( Echo %%f >"%%f.tmp" (FOR /F "usebackq tokens=*" %%s IN (`More "%%f"`) DO ( If Not "%%s"=="" ( Echo %%s|FindStr.exe /B /L /I /C:"%Seek%" >nul &&Echo %Replace%|| Echo %%s ) )) Move /Y "%%f.tmp" "%%f" >nul ) pause Или, ИМХО, быстрее работает так
@Echo Off cls Set "File=SH.INI" Set "Seek=SIZE_LOG_FILE_KB" Set "Replace=SIZE_LOG_FILE_KB=5120" Set "BoxIn=Z:\Box_In" FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%File%" /S /B /A:-D 2^>nul`) DO ( Echo %%f >"%%f.tmp" (FOR /F "usebackq tokens=*" %%s IN (`More "%%f"`) DO ( If Not "%%s"=="" ( For /F "tokens=1 delims==" %%i In ("%%s") Do If /I "%%i"=="%Seek%" (Echo %Replace%) Else (Echo %%s) ) )) Move /Y "%%f.tmp" "%%f" >nul ) pause Busla, для for /R ..... если файл называется, например, не "sh.ini", а "s h.ini", у меня этот номер не прошел:
если @Echo Off cls Set "File=S H.INI" Set "BoxIn=Z:\Box_In" FOR /R "%BoxIn%" %%f IN (%File%) DO Echo %%f pause Z:\Box_In\S Z:\Box_In\H.INI Z:\Box_In\Mail\S Z:\Box_In\Mail\H.INI Z:\Box_In\Mail jsdgjh\S Z:\Box_In\Mail jsdgjh\H.INI Z:\Box_In\Папка jsdgjh\S Z:\Box_In\Папка jsdgjh\H.INI если То получим: Z:\Box_In\"S H.INI" Z:\Box_In\Mail\"S H.INI" Z:\Box_In\Mail jsdgjh\"S H.INI" Z:\Box_In\Папка jsdgjh\"S H.INI" |
------- Последний раз редактировалось megaloman, 16-07-2017 в 14:15. Отправлено: 13:17, 16-07-2017 | #4 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
||
Отправлено: 08:40, 17-07-2017 | #5 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 08:42, 17-07-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Zhenyok21:
Цитата Zhenyok21:
PowerShell
$sSourceFolder = 'C:\Мои проекты\0100'
$sSourceFileName = 'SH.INI'
$sString4Found = 'SIZE_LOG_FILE_KB=512'
$sString4Replace = 'SIZE_LOG_FILE_KB=5120'
if(Test-Path -Path $sSourceFolder -PathType Container) {
Get-ChildItem -Path $sSourceFolder -Filter $sSourceFileName -File -Recurse | ForEach-Object -Process {
$sContent = Get-Content -Path $_.FullName -Encoding Oem
if($sContent -icontains $sString4Found) {
Write-Host $_.FullName
$sContent.Replace($sString4Found, $sString4Replace) | Set-Content -Path $_.FullName -Encoding Oem
}
}
} else {
Write-Host "Can't find source folder $sSourceFolder." -ForegroundColor Red
}
|
||
Отправлено: 11:13, 17-07-2017 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - Копирование файлов в папке и ее подпапках которые не старше 5минут | gremlintv2 | Скриптовые языки администрирования Windows | 1 | 30-03-2016 14:30 | |
CMD/BAT - Поиск и замена строки в txt файлах по содержанию этой строки. | sayyad | Скриптовые языки администрирования Windows | 1 | 06-12-2015 13:20 | |
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox | ultrarare | Скриптовые языки администрирования Windows | 11 | 03-07-2013 14:37 | |
CMD/BAT - [решено] Список файлов в папке и ее подпапках | popt2t | Скриптовые языки администрирования Windows | 9 | 19-02-2013 00:14 | |
VBS/WSH/JS - [решено] Замена определенной строки в скрипте vbs | neo21 | Скриптовые языки администрирования Windows | 0 | 28-10-2011 13:30 |
|