Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - Изменение строк в файле

Новый участник


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

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


Добрый день! Решил усложнить себе жизнь и начать оптимизировать некоторые процессы. Поэтому буду премного благодарен за ответ с комментариями, что где и почему пишем) Задача: в папке сложены Файлы 1, 2, 3... 1000. Формат txt. В этих файлах есть текст. Во всех разный. При этом есть строка (чаще первая) в которой написано «ааа_1#0», где 1 это число которое необходимо оставить, а все остальное надо (что в ковычках) надо удалить. Как это сделать через исполнительный файл, ибо файликов таких очень много??? Количество символов в ковычках всегда разное. Нужная комбинации всегда окружена _ и #

Отправлено: 15:32, 07-06-2018

 

Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Nikugorsk:
Не получается »
Если Win XP, то:
Код: Выделить весь код
dir *.txt|where{!$_.psiscontainer}|%{
	(gc $_.fullname) -replace '(?<=\")[^_]*_|#[^"]*(?=\")'|`
	set-content ($_.fullname)
}
если новее, то лучше обновить PoSh до актуальной версии...

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 08-06-2018 в 07:35.


Отправлено: 07:25, 08-06-2018 | #11



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

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


Ветеран


Contributor


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

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


Nikugorsk, Я не проверял код от Iska, уверен, он рабочий.
Вот еще вариант исполнимого vbs-скрипта.
Код: Выделить весь код
InBox = "Z:\Box_In"                 ' Папка с файлами
InExt = "txt"                       ' Расширение файлов для обработки
' --------------------------------

Set WArg = WScript.Arguments
If Not WArg.Count = 0 Then InBox = WArg.Item(0)

Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set InDir = FSO.GetFolder(InBox)
If Err.Number <> 0 Then
    MsgBox "Ошибка при открытии  " + CStr(Err.Number) + vbCrLf + vbCrLf + InBox + vbCrLf + vbCrLf + Err.Description
    WScript.Quit 2
End If

BakBox = InDir + "\" + Replace(Replace(CStr(Now), ":", "-"), "/", ".") + ".bak"
FSO.CreateFolder (BakBox)
If Err.Number <> 0 Then
    MsgBox "Ошибка при создании  " + CStr(Err.Number) + vbCrLf + vbCrLf + BakBox + vbCrLf + vbCrLf + Err.Description
    WScript.Quit 2
End If
On Error GoTo 0

Set AllFiles = InDir.Files

N = 0
For Each iFile In AllFiles       ' Цикл по файлам в папке (как вариант решения)
    If UCase(FSO.GetExtensionName(iFile)) = UCase(InExt) Then
        With FSO.OpenTextFile(iFile, 1, False)
            AllTxt = .ReadAll
            .Close
        End With
        Do
            i1 = InStr(1, AllTxt, """")
            If i1 = 0 Then Exit Do
            i2 = InStr(i1, AllTxt, "_")
            If i2 = 0 Then Exit Do
            i3 = InStr(i2, AllTxt, "#")
            If i3 = 0 Then Exit Do
            i4 = InStr(i3, AllTxt, """")
            If i4 = 0 Then Exit Do
        
            ii = InDir + "\" + iFile.Name
            i = FSO.MoveFile(iFile, BakBox + "\" + CStr(iFile.Name))
        
            With FSO.CreateTextFile(ii, True)
                .Write Mid(AllTxt, 1, i1) + Mid(AllTxt, i2 + 1, i3 - i2 - 1) + Mid(AllTxt, i4)
                .Close
            End With
            N = N + 1
        Loop While False
    End If
Next

If N = 0 Then
    MsgBox "В папке" + vbCrLf + vbCrLf + InDir + vbCrLf + vbCrLf + "файлы для обработки не найдены"
    FSO.DeleteFolder BakBox, True
    WScript.Quit 1
Else
    Msg = "В папке" + vbCrLf + InDir + vbCrLf + "обработано " + CStr(N) + " файлов"
    MsgBox Msg + vbCrLf + vbCrLf + "исходные файлы в папке" + vbCrLf + BakBox
    WScript.Quit 0
End If
Здесь исходные файлы, которые нуждаются в обработке, будут помещены в отдельную папку, что позволяет не смешивать обработанные и исходные файлы.
Папку с исходными файлами можно указать явным образом в тексте скрипта, либо указать в аргументе при вызове, также можно просто перетащить папку на скрипт в Проводнике, при этом явное указание папки в коде скрипта будет проигнорировано.

YuS_2, Помнится, WSH в Win XP уже был, и даже для него что-то дополнительно доустанавливать уже не нужно.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 08-06-2018 в 16:46.

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

Отправлено: 16:39, 08-06-2018 | #12


Ветеран


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

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


Цитата megaloman:
Я не проверял код от Iska, уверен, он рабочий. »
Я на это только надеюсь, поскольку работа регулярных выражений очень сильно завязано на предположения о конкретном содержимом искомого .

Цитата megaloman:
YuS_2, Помнится, WSH в Win XP уже был, и даже для него что-то дополнительно доустанавливать уже не нужно. »
Так он же предлагает не WSH, а PoSH.

Отправлено: 18:10, 08-06-2018 | #13


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата megaloman:
Помнится, WSH в Win XP уже был, и даже для него что-то дополнительно доустанавливать уже не нужно. »
Это да, powershell в XP надо установить и новее v2.0 туда не впихнуть, но в читабельности и краткости скриптов, а в некоторых случаях и просто функциональных возможностях, это не сравнимые вещи... просто взгляните на код - три командлета (по сути одна строка) делают то, что на wsh выглядит уже достаточно объемно и скорее всего, новичка оттолкнет от изучения...
А вообще, если будет больше вариантов решений той или иной задачи, разве это плохо?
Что из этого разнообразия выбрать, решит сам ТС, да и другим, столкнувшимся с аналогичной проблемой, может пригодиться...

Цитата Iska:
Так он же предлагает не WSH, а PoSH. »
Да, о том и речь, увы, в XP нет предустановленного PoSh

-------
scio me nihil scire. Ѫ


Отправлено: 18:32, 08-06-2018 | #14



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Нумерация строк в файле ВиталийВ Скриптовые языки администрирования Windows 2 25-09-2015 19:06
VBS/WSH/JS - Удаление строк в REG файле gen0m.rsw Скриптовые языки администрирования Windows 7 10-10-2014 21:17
CMD/BAT - Замена нескольких строк в файле bcubbs@fb Скриптовые языки администрирования Windows 3 24-01-2013 14:01
VBS/WSH/JS - Изменение времени строк в текстовом файле на определенную величину RadioSys Скриптовые языки администрирования Windows 6 31-07-2012 20:22
[решено] Количество строк в файле 0xDEADBEEF AutoIt 3 25-01-2010 21:47




 
Переход