![]() |
Вставить слово между текстом
Всем доброго дня
Имеется текстовый файл такого порядка: 1=имя 2=имя 3=имя и так далее.. Как вставить слово между - например: 1=слово\имя 2=слово\имя 3=слово\имя То есть нужно вставить одно и тоже слово после = В начало и в конец строки я могу, но как добавить слово между ? Буду благодарен за помощь! |
Код:
@Echo Off |
megaloman,
С первого раза заработало! Супер! Все коды с заменой текста перелопатил но все они не подходили в случае с '=' Либо была ошибка либо вообще ничего. Спасибо огромное! пойду дальше ковырять. |
У меня есть одна задача с которой мне никак в одиночку не справится.
Не хочу выглядеть как-бы посади его за стол а он и ноги на стол. в общем если есть время и нервы: В этом текстовом файле возможны более 200 имен Есть текстовый файл с примерно вот такой переченью: 1=первое_имя 2=второе_имя 3=третье_имя 4=четвертое_имя 5=пятое_имя ну и т.д тут внизу список, мы сами его составили и он меняться не будет тогда как верхний список будет сгенерирован. Однако получим мы те-же имена с нижнего списка но неизвестно какие и сколько. ниже этого листа те-же имена но с дополнениями. Дополнительные имена мы тоже знаем. 1=первое_имя +дополнительное слово 2=второе_имя +дополнительное слово 3=третье_имя +дополнительное слово 4=четвертое_имя +дополнительное слово 5=пятое_имя +дополнительное слово Так вот, задача такая что-бы в верхний список мы добавили +дополнительным словом из нижнего списка в зависимости какое имя выпало. Как бы нужно просканировать верхний список с нижним и если он найден добавить к нему дополнительное слово. Возможно ли решить такую задачу? |
Код:
@Echo Off |
Цитата:
Но есть одна загвоздка и вот какая: Дело в том, что генерируемый текст не совпадает с постоянным из-за: 1=первое_имя 2=второе_имя 3=третье_имя Потому, что Х=имя не будет под таким же номером как в постоянном. К примеру постоянный номер у 85= в генерируемом может стать 14= или какой угодно. В общем я удалил в обоих текстах все "1= 2= 3= и тд." и оставил только названия. И вот запуская батник все делается точь в точь как я и хотел! Подводя итоги - Батник нужно переделать с учетом изменений: 1) Подготавливаю постоянный файл без "1= 2= 3=" 2) Запуском скрипта из непостоянного файла нужно удалить все "Х=" и затем скрипт продолжает свою работу. 3) По завершению пронумеровываем обратно как должно быть в окончательном варианте то есть 1= 2= 3= и тд. Третье действие я смогу припаять самостоятельно. Осталось недоделанным 2е действие по удалению 1= 2= 3= из генерируемого.txt (по другому никак нельзя он только так и генерируется) Признаюсь в своей безграмотности, самостоятельно с этой задачей я бы не справился никогда. |
Код:
@Echo Off Пример файлов
Цитата:
Цитата:
Цитата:
|
megaloman,
Отлично! А можно подкорректировать батник таким образом что-бы в последнем действии добавлялось то что я описывал в своем самом первом посту + pdf ? То есть где 1=Алиса +дополнительное слово 9 было 1=мое-слово\Алиса.pdf +дополнительное слово 9 мое-слово будет единым для всех имен. -- Да и вот еще что в завершенном файле в самом начале получаю [AllNames]=ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*. То есть крякозябры. Дело в том что когда генерируется "непостоянный файл.txt" то в самом верху прописано: [AllNames] а ниже 1=имя 2=имя [AllNames] Должно оставаться нетронутым в самом верху. Решил добавив команду внизу скрипта powershell "Get-ChildItem непостоянный файл.txt | ForEach-Object { $f=$_ | Get-Content -ReadCount 0; $f[0]='[AllNames]'; Set-Content $_.FullName $f }" .. |
Код:
@Echo Off |
megaloman
Все что нужно! Скрипт работает суперски. 140 строк как часики заполнились и везде все как надо ! Вот что значит поддержка мастера. В моем проекте всегда была эта задача как самая трудная и из за этого я всегда откладывал в надежде найти другой способ. Но как оказалось все решил этот скрипт. Без вашей помощи я продолжал бы вынюхивать информацию по различным форумам в надежде найти адекватного специалиста! Огромная вам благодарность за помощь которую вы мне оказали! |
megaloman
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя: 1=_Саша Когда такое имя которое начинается с символом _имя выпадет в "непостоянный файл.txt" то мы просто создаем текстовый файл _имя.txt в той же папке. и это имя не вносим в преобразованный файл. |
Код:
@Echo Off |
megaloman
Спасибо большое, однако эти имена вносятся в завершенный список чего следует исключить. В моем проекте не предусмотрен вариант где можно отменить действие с существующим именем в завершенном списке. Хотя если поправить в завершенном списке эти имена: вместо 1=_Саша вписывать F1=1, _Саша превращается в F1 Чтобы все имена с началом _ получались в завершенном списке F1=1 F2=1 F3=1 Как вариант можно сделать отдельный батник для таких _имя файлов и отдельный завершенный список. В проекте я могу запустить его второй командой и получить второй список. это не страшно. |
Для начала
Цитата:
Цитата:
"постоянный справочник.txt"
Код:
Аня +дополнительное слово 1 "непостоянный файл.txt"
Код:
[AllNames] "непостоянный файл.txt после обработки
Код:
[AllNames] Что Имеем Что надо получить, а то тихо шифером шурша крыша едет неспеша, приходится фантазировать. |
megaloman,
Я извиняюсь. Код:
Но вы противоречите сами себе Совершенно верно. Дело в том, что я поправил для себя исключение _ в виде _М в скрипте в верхней части а в нижней части забыл поправить >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr /V "=_" "%FileIn%"`) DO ( вот и стал велосипед изобретать. Как говорится старость не радость... Все супер, скрипт работает четко и без помех! |
Уважаемый megaloman,
У меня последняя просьба. В виду того что я тут по своей же вине напортачил, оказалось что для таких 1=_Саша создавать текстовый файл не нужно. Извиняюсь что ошибся, понял только после дальнейшего анализа. Однако для смогу задействовать такой скрипт если вдруг понадобится. Все что нужно это задействовать в скрипте второй (Set "WordIn2=слово\") для слов которые начинаются с _имя. И эти слова в завершенном списке как и все другие, но начальное слово будет отличаться от других. то есть если у нас 1=слово\Алиса +дополнительное слово то в 2=слово2\_Имя +дополнительное слово Я самостоятельно смог бы наковырять второй батник из строчек, однако хотелось бы завершить весь сценарий одним скриптом. |
Код:
@Echo Off Примеры файлов
Код:
Аня +дополнительное слово 1 Код:
[AllNames] Код:
[AllNames] |
megaloman,
Вот Спасибо! После того как это действие выполняется на все 100% - мой проект ожил после долгой спячки. Как раз то что хотел иметь долгое время но никак не получалось. Благодарю из глубины души ! Жму руку! |
Цитата:
Set "WordIn_=выражение\" где мы ищем первую букву _ Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%" Заменить на поисковое слово ".chm" в конце слова... Одним словом вместо поиска значения в начале слова "_" искать только расширения файлов *.chm |
Код:
@Echo Off Файлы
"непостоянный файл.txt"
Код:
[AllNames] Код:
Аня +дополнительное слово 1 Код:
[AllNames] |
Вот еще вариант. Примеры файлов из предыдущего поста.
Код:
@Echo Off |
megaloman
Код:
@Echo Off Огромная вам благодарность за проделанную работу! С уважением! |
Перепевка этого скрипта
Код:
@Echo Off |
megaloman
Спасибо, но я никак понять не могу, для чего такая перепевка скрипта если мы изначально можем вставить то что хотим ??? Единственное что делает скрипт так это меняет Set WordInExe, Set WordInMsi с одного имени на другое. Задача ведь была другая, а именно убрать нумерацию рождаемого файла, там где получали: 1=Start /W SetupName.exe -y чтобы стало Start /W SetupName.exe -y То есть добавление в прошлый скрипт команды на удаление всех 1=, 2=, 3= |
Цитата:
Цитата:
Что дано? Если это результат отработки предыдущего скрипта, зачем нужен костыль для убирания нумерации? Если исходный файл как в начальной постановке, то лучше сделать сразу требуемое без промежуточных костылей. Не плодите новые сущности без крайней необходимости. Костыль
Код:
@Echo Off |
megaloman,
Спасибо батник очищает от 1= как раз что было нужно Можно сделать один батник вместо двух чтобы изначально получалось без 1= ? Да еще одно но.. если прописать так - Set "WordInExe=RunProgram="" то батник молчит, то есть дополнительный символ " как бы не переносится. А в позапрошлом скрипте #17 переносится все что пропишешь. Лучше скрипт #17 модифицировать как окончательный вариант и я решил бы все проблемы. |
Цитата:
|
megaloman
С тем скриптом нет возможности передавать такие" значения. Если на выходе делать батник то он пойдет т.к. мы передаем start /w без специальных символов. В случае если на выходе иметь конфиг для 7z sfx то нам нужно передать слово с символом RunProgram=" и скрипт не работает. С прошлым скриптом все получается. Собрал таким образом, вроде бы работает: Код:
@Echo Off команды идут в таком порядке RunProgram="имя-установщика.exe -y" осталось допилить начало и конец Спасибо за помощь !!!! P.S Мне на самом верху рожденного файла нужно добавить 4 строчки не затрагивая сам текст первую я добавляю так: Код:
powershell "Get-ChildItem run.txt | ForEach-Object { $f=$_ | Get-Content -ReadCount 0; $f[0]=';!@Install@!UTF-8!'; Set-Content $_.FullName $f }" Как этого избежать? Первая строка в обязательном порядке должна быть на самом верху, а остальные три можно подсунуть в конец списка... |
Время: 16:29. |
Время: 16:29.
© OSzone.net 2001-