Вопрос № 148882: Здравствуйте, подскажите как написать скрипт (vbs) для следующих действий: Указываем в скрипте каталог ( например: c: est ), скрипт должен в этом каталоге и подкаталогах искать файлы (например test.txt), затем в этом файле заменять строку (напи...
Вопрос № 148.882
Здравствуйте, подскажите как написать скрипт (vbs) для следующих действий: Указываем в скрипте каталог ( например: c: est ), скрипт должен в этом каталоге и подкаталогах искать файлы (например test.txt), затем в этом файле заменять строку (напимер строка 3 с содержанием: teststroka1 = "1", "2") на test_stroka_234, сохраняет изменения в этом файле и ищет файлы с названием test.txt далее, находя файлы делает теже действия, после того как поиск закончн в данном каталоге и подкаталогах, скрипт
завершает свою работу.
Отправлен: 29.10.2008, 14:38
Вопрос задал: Alexrub (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Alexrub! Думаю это решение Вашей задачи:
Код:
Dim FSO, WSH, TheExtension, sTxtFile Dim TheFolder, Message, YesNo Const sStartFolder = "C: est" 'стартовый каталог Const sFileName = " est.txt" 'искомый файл Const sFindTxt = "MAUG"
'искомый текст Const sNewTxt = "New Text" 'заменяющий текст Set FSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("WScript.Shell") Set TheFolder = FSO.GetFolder(sStartFolder) ' Message = "Текст стартового диалога Да/Нет ?" YesNo = MsgBox(Message, vbYesNo) If YesNo = vbYes Then WorkWithSubFolders TheFolder, sFileName, sFindTxt, sNewTxt End If
Sub WorkWi
thSubFolders(ByVal AFolder, ByVal sFile, ByVal sFtxt, ByVal sNtxt) Dim MoreFolders, TempFolder, sTempTxt TempFolder = AFolder & sFile sTempTxt = ReadAllTextFile(TempFolder) sTempTxt = Replace(sTempTxt, sFtxt, sNtxt) WriteAllTextFile TempFolder, sTempTxt Set MoreFolders = AFolder.SubFolders For Each TempFolder In MoreFolders WorkWithSubFolders TempFolder, sFile, sFtxt, sNtxt Next End Sub Function ReadAllTextFile(sFilePath) Const ForReading
= 1, ForWriting = 2 Dim FSO, ts Set FSO = CreateObject("Scripting.FileSystemObject") Set ts = FSO.OpenTextFile(sFilePath, ForReading) ReadAllTextFile = ts.ReadAll End Function Sub WriteAllTextFile(sFilePath, sFileTxt) Dim FSO Dim ts Set FSO = CreateObject("Scripting.FileSystemObject") Set ts = FSO.OpenTextFile(sFilePath, 2, True) ts.Write sFileTxt ts.Close End Sub
#thank 148882 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 4 Комментарий оценки: Евгений, большое спасибо за скрипт, но дело в том что он ищет файл test.txt только в каталоге (C:\\test\\), а если файл лежит скажем (C:\\test\\test1\\), то он его не находит. Суть скрипта в том что бы он сканировал ВСЕ подкаталоги каталога C:\\test\\
Отвечает: megaloman
Здравствуйте, Alexrub! В приложении предлагаю свой вариант решения, также можете загрузить готовый файл Почему при наличии ответа Тесленко Евгений Алексеевич я всё же счел возможным дать еще один: 1. ИМХО приведенный скрипт Тесленко Евгений Алексеевич требует, чтобы в каждой директории находился файл с указанным именем. Если такого файла нет, скрипт сваливается в ошибку (скрипт его не находит, говорит что файл не найден ) 2. Вы требовали, чтобы замена проводилась в конкретной строке.
Тесленко Евгений Алексеевич сделал скрипт, который меняет подстроки во всём тексте, а не в указанной строке. Задача показалась мне интересной с точки зрения обучения: обязан заметить - использование рекурсивного вызова подпрограммы подсмотрел у Тесленко Евгений Алексеевич. Не понял Ваш вопрос в минифоруме: попробуйте его объяснить понятнее (не надо писать код, объясните подробнее словами), постараюсь помочь.
Приложение:
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Нет времени на медленные танцы
Ответ отправил: megaloman (статус: Практикант)
Ответ отправлен: 30.10.2008, 20:36
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 148882 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Огромное спасибо !!!
Всё отлично работает, можно было бы поставить 100 балов, поставил бы. :-)
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.