|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать??? |
|
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать???
|
Новый участник Сообщения: 5 |
|
|
Отправлено: 19:39, 19-09-2009 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
Цитата v79italya:
Цитата v79italya:
|
|||
Отправлено: 21:18, 23-03-2020 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 239
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Последний раз редактировалось v79italya, 16-07-2020 в 18:31. Отправлено: 21:31, 23-03-2020 | #22 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
Скрытый текст
Option Explicit Dim strSourceFolder Dim objFSO Dim objFile Dim strContent If WScript.Arguments.Count = 1 Then strSourceFolder = WScript.Arguments.Item(0) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then For Each objFile In objFSO.GetFolder(strSourceFolder).Files If StrComp(objFSO.GetExtensionName(objFile.Name), "csv", 0) = 0 Then Dim objTS With objFSO.OpenTextFile(objFile.Path) strContent = .ReadAll() .Close End With With WScript.CreateObject("VBScript.RegExp") .Pattern = "\n\d{4}-\d{2}-\d{2},null,null,null,null,null,null" .Global = True If .Test(strContent) Then strContent = .Replace(strContent, "") With objFSO.CreateTextFile(objFile.Path, True) .Write strContent .Close End With End If End With Else ' Nothing to do End If Next Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>" WScript.Quit 1 End If WScript.Quit 0 Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). Из каталога выбираются все .csv-файлы. |
|
Отправлено: 22:10, 23-03-2020 | #23 |
Старожил Сообщения: 239
|
Профиль | Отправить PM | Цитировать Iska, спасибо за скрипт. А можно путь к папке задать?
Еще я сразу написал что нужно скрипт VBS. Это же скрипт VBS? Почему VBS? Я хотел превратить его в макрос (обернуть содержимое в Sub ... End Sub) и использовать в Excel |
Отправлено: 22:26, 23-03-2020 | #24 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
Скрытый текст
Option Explicit Dim strSourceFolder Dim objFSO Dim objFile Dim strContent If WScript.Arguments.Count = 1 Then strSourceFolder = WScript.Arguments.Item(0) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then For Each objFile In objFSO.GetFolder(strSourceFolder).Files If StrComp(objFSO.GetExtensionName(objFile.Name), "txt", 0) = 0 Then Dim objTS With objFSO.OpenTextFile(objFile.Path) strContent = .ReadAll() .Close End With With WScript.CreateObject("VBScript.RegExp") .Pattern = "^(\d+):.*$" .Global = True .Multiline = True If .Test(strContent) Then strContent = .Replace(strContent, "$1") With objFSO.CreateTextFile(objFile.Path, True) .Write Replace(Replace(strContent, vbCr, ""), vbLf, vbCrLf) .Close End With End If End With Else ' Nothing to do End If Next Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>" WScript.Quit 1 End If WScript.Quit 0 Путь к целевому каталогу задаётся параметром скрипта (также можно просто перетащить папку на скрипт в Проводнике). Из каталога выбираются все .txt-файлы. Цитата v79italya:
Цитата Iska:
Цитата v79italya:
Цитата v79italya:
|
|||||
Отправлено: 22:30, 23-03-2020 | #25 |
Старожил Сообщения: 239
|
Профиль | Отправить PM | Цитировать Сохранил с расширением .vbs, закинул в папку с файлами CSV и запустил. Вышло окно с текстом : Usage: cscript.exe//nologo "vvbbss.vbs" <Source folder>
Цитата Iska:
Цитата Iska:
Что мешало? Я думал любой скрипт можно обернуть в sub и превратить в макрос. Получается, ошибался |
||
Отправлено: 22:36, 23-03-2020 | #26 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
|
|
------- Отправлено: 22:46, 23-03-2020 | #27 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
|
|
Отправлено: 22:48, 23-03-2020 | #28 |
Старожил Сообщения: 239
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Этот макрос заменяет null на 0. Мне это не подходит.Хотел другим макросом предварительно удалить строки с null
Цитата Iska:
![]() ![]() Второй скрипт тоже отлично работает. Спасибо большое |
||
Последний раз редактировалось v79italya, 23-03-2020 в 23:11. Отправлено: 22:54, 23-03-2020 | #29 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата v79italya:
Вот мой вариант vbs-скрипта чтобы удалить во всех файлах CSV в указанной папке строки, содержащие null
BoxIn0 = "Z:\Box_In"
BoxIn0 = ""
FileIn = "^.*\.csv$"
Repl = "\n.*,null.*"
BoxIn = ""
With WScript.Arguments
If .Count > 0 Then
BoxIn = Trim(.Item(0))
If Right(BoxIn, 1) = "\" Then BoxIn = Mid(BoxIn, 1, Len(BoxIn) - 1)
Else
Set objShell = CreateObject("Shell.Application")
Set objBoxIn = objShell.BrowseForFolder(0, "Выбирайте папку для обработки CSV-файлов", 1, BoxIn0)
If objBoxIn Is Nothing Then
MsgBox "Папка не выбрана, скрипт завершаем"
WScript.Quit 2
End If
BoxIn = objBoxIn.Self.Path
End If
End With
With CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set Folds = .GetFolder(BoxIn)
If Err.Number <> 0 Then
MsgBox "Ошибка при открытии папки" + vbCrLf + BoxIn + vbCrLf + vbCrLf + Err.Description
WScript.Quit 2
End If
On Error GoTo 0
Set RegMaska = CreateObject("VBScript.RegExp")
RegMaska.Pattern = FileIn
RegMaska.IgnoreCase = True
Set RegRepl = CreateObject("VBScript.RegExp")
RegRepl.Pattern = Repl
RegRepl.IgnoreCase = True
RegRepl.Global = True
Set Files = Folds.Files
For Each jf In Files
If RegMaska.Test(jf) Then
' MsgBox jf
On Error Resume Next
Err.Number = 0
Set fIn = .OpenTextFile(jf, 1, False)
If Err.Number <> 0 Then
MsgBox "Ошибка при открытии файла" + vbCrLf + .GetAbsolutePathName(jf) + vbCrLf + vbCrLf + Err.Description
On Error GoTo 0
' WScript.Quit 2
Else
Alls = ""
Alls = fIn.ReadAll
fIn.Close
On Error GoTo 0
If RegRepl.Test(Alls) Then
jfNew = jf.Path
If .FileExists(jf + ".bak") Then .DeleteFile jf + ".bak", True
.MoveFile jf, jf + ".bak" ' ==== Создание страх копии
With .CreateTextFile(jfNew, True)
.Write (RegRepl.Replace(Alls, ""))
.Close
End With
End If
End If
End If
Next
End With
Можете вызвать скрипт из командной строки, указав в аргументе скрипта в кавычках путь к папке. Можете простр вызвать скрипт, откроется интерфейс для открытия нужной папки. Я предусмотрел для изменяемых файлов создание страховой копии с расширением .bak |
|
------- Последний раз редактировалось megaloman, 26-03-2020 в 08:01. Отправлено: 18:03, 25-03-2020 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Найти и заменить в текстовом файле. Как? | Pozia | AutoIt | 15 | 11-03-2010 19:12 | |
подсчёт слов в текстовом файле | bakatum | Хочу все знать | 4 | 22-01-2010 21:10 | |
CMD/BAT - [решено] Отделить последние цифры из строчки в текстовом файле | ZeroCrash | Скриптовые языки администрирования Windows | 4 | 29-06-2009 16:03 | |
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? | Pozia | AutoIt | 23 | 14-05-2009 21:41 | |
Как оставить в файле Х первых строк? | Dan | Вебмастеру | 10 | 19-10-2002 00:41 |
|