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

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

Ответить
Настройки темы
CMD/BAT - [решено] Переименование строк

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


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

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


Извиняюсь за банальность вопроса, но появилась такая вот задача:
Есть файл с данными в формате txt, к каждому "id" присвоено значение, в моём случае описания различных штуковин.
В оригинальном файле:
В роли "id" выступают строки - от STRING 3 до STRING 2788
Нужно их заменить на - от STRING 468 до STRING 3262
Так как ручками делать это довольно долго, решил обратиться к cmd, но особо не понял как в нём работать.
Полученный скрипт : (да, это всё что я понял)
FINDSTR STRING... C:\Users\User\Desktop\items.wts
Дальше просто не знаю как записать:
К результату каждого поиска прибавлять по 465 и перезаписывать в файл.
Откуда расхождение в 8 цифр, буду выяснять, видимо что-то упущено.

Отправлено: 14:44, 15-02-2018

 

Ветеран


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

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


NightSiren,
очень желательно знать что в STRING, можно ли считать STRING N шаблоном
а что в дальнейшем будет с этими строками, может проще сделать код, который меняет выходную строку перед выполнением действия над ней
команда STRING N+465 (ну это если намечаются какие-то действия, а не просто перезапись, но для чего-то и она нужна ведь)
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:31, 15-02-2018 | #2



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

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


Ветеран


Contributor


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

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


NightSiren, Не догоняю. Надо взять строки с 468 по 3262, удалить кусок с 3 по 2788 и вставить, начиная с 3 строки, взятые строки. Иначе непонятно, ведь 2788-3+1=2786<>2795=3262-468+1
Вам что, надо получить в файле 2 одинаковых куска?
Или, начиная с 468 строки взять 2786 значений и заменить строки с 3 по 2788 ???

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

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

Отправлено: 15:37, 15-02-2018 | #3


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


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

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


Смотрите, нужно просто взять и переименовать строки:
STRING 3 --> STRING 468
STRING 4 --> STRING 469
STRING 5 --> STRING 470
....
STRING 2788 --> STRING 3253
После того как найду, куда делись 8 строк, запущу скрипт ещё раз.
Я не знаю как это должно быть реализовано, но я выложил свои мысли по этому поводу. Может есть способ сделать это легче.

Отправлено: 19:04, 15-02-2018 | #4


Ветеран


Contributor


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

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


vbs-скрипт
Код: Выделить весь код
Txt = "Z:\Box_In\Эпидерсия.txt"
N1 = 3
N2 = 2788
M1 = 468
M2 = 3262

Set FSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set inFile = FSO.OpenTextFile(Txt, 1)
If Err.Number <> 0 Then
    MsgBox Txt + vbCrLf + Err.Description
    WScript.Quit 1
End If
On Error GoTo 0

AllTxt = inFile.ReadAll
inFile.Close

Mas = Split(AllTxt, vbCrLf)
UMas = UBound(Mas)
LMas = LBound(Mas)

For i = N1 To N2
    If i + LMas - 1 <= M2 - LMas And i + LMas - 1 <= UMas Then
        Mas(i + LMas - 1) = Mas(i + LMas - 1 + M1 - N1)
    End If
Next

On Error Resume Next
Set inFile = FSO.OpenTextFile(Txt, 2, True)

If Err.Number <> 0 Then
    MsgBox Txt + vbCrLf + Err.Description
    WScript.Quit 1
End If
On Error GoTo 0

For Each S In Mas
    inFile.WriteLine S
Next
inFile.Close

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

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

Отправлено: 20:51, 15-02-2018 | #5


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


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

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



megaloman
Спасибо за скрипт, но он работает немного кривовато:
Под строкой я имел ввиду слово STRING, но не номер строки.
Сам файл выглядит вот так:
file.png

Отправлено: 22:22, 15-02-2018 | #6


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


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

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


Ладно, спасибо за помощь, найден другой способ это сделать (занять друга на 6 часов за небольшую сумму)

Отправлено: 22:39, 15-02-2018 | #7


Ветеран


Contributor


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

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


NightSiren,
Oм мани падме хум! Мне Ваших денег не жалко, напрягает, что кто-то сделает мартышкин труд. Вот вариант после Вашего уточнения постановки
Код: Выделить весь код
Txt = "Z:\Box_In\Эпидерсия2.txt"
N1 = 3
N2 = 2788
M1 = 468

Set FSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set inFile = FSO.OpenTextFile(Txt, 1)
If Err.Number <> 0 Then
    MsgBox Txt + vbCrLf + Err.Description
    WScript.Quit 1
End If
On Error GoTo 0

AllTxt = inFile.ReadAll
inFile.Close

Mas = Split(AllTxt, vbCrLf)
UMas = UBound(Mas)
LMas = LBound(Mas)

i1 = N1
For k = LMas To UMas
    i = InStr(1, Mas(k), "STRING")
    If i > 0 Then
        Mas2 = Split(Mas(k), " ")
        If i1 = CInt(Mas2(LMas + 1)) Then
            Mas(k) = "STRING " + CStr(i1 + M1 - N1)
            i1 = i1 + 1
            If i1 > N2 Then Exit For
        End If
    End If
Next

On Error Resume Next
Set inFile = FSO.CreateTextFile(Txt, True)

If Err.Number <> 0 Then
    MsgBox Txt + vbCrLf + Err.Description
    WScript.Quit 1
End If
On Error GoTo 0

For Each s In Mas
    inFile.WriteLine s
Next
inFile.Close

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

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

Отправлено: 00:53, 16-02-2018 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление пустых строк, пробелов и/или конца строк blackeangel Скриптовые языки администрирования Windows 12 11-03-2016 21:49
Переименование файлов B1010 Видео и аудио: обработка и кодирование 0 28-09-2014 11:38
Разное - переименование папки Drec555 Microsoft Windows 7 3 26-02-2013 18:49
CMD/BAT - Поиск слова в тексте, удаление строки, удаление 8 строк выше и 3 строк ниже Alk-13 Скриптовые языки администрирования Windows 0 10-02-2012 18:06
Переименование домена skif_anapster Microsoft Windows NT/2000/2003 1 25-09-2006 16:52




 
Переход