Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вставить слово между текстом (http://forum.oszone.net/showthread.php?t=352434)

minutka15 22-11-2022 13:33 2997083

Вставить слово между текстом
 
Всем доброго дня
Имеется текстовый файл такого порядка:
1=имя
2=имя
3=имя
и так далее..

Как вставить слово между - например:
1=слово\имя
2=слово\имя
3=слово\имя
То есть нужно вставить одно и тоже слово после =
В начало и в конец строки я могу, но как добавить слово между ?
Буду благодарен за помощь!

megaloman 22-11-2022 22:18 2997112

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\Имеется текстовый файл такого порядка.txt"
        Set "WordIn=слово\"

    >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                If Not "%%j"=="" (Echo %%i=%WordIn%%%j) Else (%%i)
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B


minutka15 22-11-2022 22:45 2997113

megaloman,
С первого раза заработало! Супер!

Все коды с заменой текста перелопатил но все они не подходили в случае с '='
Либо была ошибка либо вообще ничего.
Спасибо огромное! пойду дальше ковырять.

minutka15 22-11-2022 23:12 2997114

У меня есть одна задача с которой мне никак в одиночку не справится.
Не хочу выглядеть как-бы посади его за стол а он и ноги на стол.
в общем если есть время и нервы:

В этом текстовом файле возможны более 200 имен
Есть текстовый файл с примерно вот такой переченью:

1=первое_имя
2=второе_имя
3=третье_имя
4=четвертое_имя
5=пятое_имя
ну и т.д

тут внизу список, мы сами его составили и он меняться не будет тогда как верхний список будет сгенерирован.
Однако получим мы те-же имена с нижнего списка но неизвестно какие и сколько.
ниже этого листа те-же имена но с дополнениями. Дополнительные имена мы тоже знаем.

1=первое_имя +дополнительное слово
2=второе_имя +дополнительное слово
3=третье_имя +дополнительное слово
4=четвертое_имя +дополнительное слово
5=пятое_имя +дополнительное слово

Так вот, задача такая что-бы в верхний список мы добавили +дополнительным словом из нижнего списка
в зависимости какое имя выпало.
Как бы нужно просканировать верхний список с нижним и если он найден добавить к нему дополнительное слово.
Возможно ли решить такую задачу?

megaloman 23-11-2022 00:03 2997115

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"

        >"%FileIn%.tmp" (FOR /F "usebackq delims=" %%i In ("%FileIn%") DO (
                FindStr /B /I "%%i" "%Fsprav%" ||Echo %%i
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B


minutka15 23-11-2022 01:25 2997119

Цитата:

Цитата megaloman
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
>"%FileIn%.tmp" (FOR /F "usebackq delims=" %%i In ("%FileIn%") DO (
FindStr /B /I "%%i" "%Fsprav%" ||Echo %%i
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B »

Все на столько четко что я и не ожидал!
Но есть одна загвоздка и вот какая:
Дело в том, что генерируемый текст не совпадает с постоянным из-за:
1=первое_имя
2=второе_имя
3=третье_имя

Потому, что Х=имя не будет под таким же номером как в постоянном.
К примеру постоянный номер у 85= в генерируемом может стать 14= или какой угодно.
В общем я удалил в обоих текстах все "1= 2= 3= и тд." и оставил только названия.
И вот запуская батник все делается точь в точь как я и хотел!
Подводя итоги - Батник нужно переделать с учетом изменений:

1) Подготавливаю постоянный файл без "1= 2= 3="
2) Запуском скрипта из непостоянного файла нужно удалить все "Х=" и затем скрипт продолжает свою работу.
3) По завершению пронумеровываем обратно как должно быть в окончательном варианте то есть 1= 2= 3= и тд.

Третье действие я смогу припаять самостоятельно.
Осталось недоделанным 2е действие по удалению 1= 2= 3= из генерируемого.txt (по другому никак нельзя он только так и генерируется)

Признаюсь в своей безграмотности, самостоятельно с этой задачей я бы не справился никогда.

megaloman 23-11-2022 09:52 2997153

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"

        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                <nul Set /P Str=%%i=
                FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

Пример файлов
Цитата:

Цитата "непостоянный файл.txt"
1=Алиса
2=Саша
3=третье_имя
4=dfygt3
5=Сергей
6=ejhgrgej
7=Петя

Цитата:

Цитата "постоянный справочник.txt"
Аня +дополнительное слово 1
Ася +дополнительное слово 2
Саша +дополнительное слово 3
Вася +дополнительное слово 4
Петя +дополнительное слово 5
Ваня +дополнительное слово 6
Инокентий +дополнительное слово 7
Филипп +дополнительное слово 8
Алиса +дополнительное слово 9
Эллис +дополнительное слово 10
Сергей +дополнительное слово 11

Цитата:

Цитата "непостоянный файл.txt" -преобразованный
1=Алиса +дополнительное слово 9
2=Саша +дополнительное слово 3
3=третье_имя
4=dfygt3
5=Сергей +дополнительное слово 11
6=ejhgrgej
7=Петя +дополнительное слово 5


minutka15 23-11-2022 12:44 2997168

megaloman,
Отлично!
А можно подкорректировать батник таким образом что-бы в последнем действии добавлялось то что я описывал в своем самом первом посту + pdf ?
То есть где
1=Алиса +дополнительное слово 9
было
1=мое-слово\Алиса.pdf +дополнительное слово 9
мое-слово будет единым для всех имен.
--
Да и вот еще что
в завершенном файле в самом начале получаю

[AllNames]=ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*.

То есть крякозябры. Дело в том что когда генерируется "непостоянный файл.txt" то в самом верху прописано:
[AllNames]
а ниже
1=имя
2=имя

[AllNames] Должно оставаться нетронутым в самом верху.
Просто предпоследнее действие батника - удаление первой строки и затем добавление первой строки [AllNames]
Решил добавив команду внизу скрипта
powershell "Get-ChildItem непостоянный файл.txt | ForEach-Object { $f=$_ | Get-Content -ReadCount 0; $f[0]='[AllNames]'; Set-Content $_.FullName $f }"
..

megaloman 23-11-2022 17:36 2997183

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
        Set "WordIn=слово\"

        >nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)

        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                If "%%j"=="" (Echo %%i
                ) Else (
                        <nul Set /P Str=%%i=%WordIn%
                        FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
                )
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B


minutka15 23-11-2022 17:53 2997184

megaloman
Все что нужно!
Скрипт работает суперски. 140 строк как часики заполнились и везде все как надо !
Вот что значит поддержка мастера.
В моем проекте всегда была эта задача как самая трудная и из за этого я всегда откладывал в надежде найти другой способ.
Но как оказалось все решил этот скрипт.
Без вашей помощи я продолжал бы вынюхивать информацию по различным форумам в надежде найти адекватного специалиста!
Огромная вам благодарность за помощь которую вы мне оказали!

minutka15 24-11-2022 20:28 2997257

megaloman
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:

1=_Саша

Когда такое имя которое начинается с символом _имя выпадет в "непостоянный файл.txt" то мы просто создаем текстовый файл _имя.txt в той же папке.
и это имя не вносим в преобразованный файл.

megaloman 25-11-2022 16:12 2997308

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
        Set "WordIn=слово\"

        >nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)

        For %%d In ("%FileIn%") Do (
                FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr "=_" "%FileIn%"`) DO >"%%~dpd%%j.txt" cd.
        )

        Set /A N=0
        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr /V "=_" "%FileIn%"`) DO (
                If "%%j"=="" (Echo %%i
                ) Else (
                        Call Set /A N+=1
                        <nul Call Set /P Str=%%N%%=%WordIn%
                        FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
                )
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B


minutka15 25-11-2022 18:27 2997319

megaloman
Спасибо большое, однако эти имена вносятся в завершенный список чего следует исключить.
В моем проекте не предусмотрен вариант где можно отменить действие с существующим именем в завершенном списке.
Хотя если поправить в завершенном списке эти имена:
вместо
1=_Саша вписывать F1=1, _Саша превращается в F1
Чтобы все имена с началом _
получались в завершенном списке

F1=1
F2=1
F3=1

Как вариант можно сделать отдельный батник для таких _имя файлов и отдельный завершенный список.
В проекте я могу запустить его второй командой и получить второй список. это не страшно.

megaloman 25-11-2022 19:20 2997322

Для начала
Цитата:

Цитата minutka15
Подготавливаю постоянный файл без "1= 2= 3=" »

Цитата:

Цитата minutka15
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:
1=_Саша »

Но вы противоречите сами себе. Я понимаю так:
"постоянный справочник.txt"
Код:

Аня +дополнительное слово                1
Ася +дополнительное слово                2
Саша +дополнительное слово                3
Вася +дополнительное слово                4
Петя +дополнительное слово                5
Ваня +дополнительное слово                6
Инокентий +дополнительное слово        7
Филипп +дополнительное слово        8
Алиса +дополнительное слово                9
Эллис +дополнительное слово                10
Сергей +дополнительное слово        11

"непостоянный файл.txt"
Код:

[AllNames]
1=Алиса
2=Саша
3=_Марина
4=третье_имя
5=dfygt3
6=Сергей
7=_Вера
8=ejhgrgej
9=Петя

"непостоянный файл.txt после обработки
Код:

[AllNames]
1=слово\Алиса +дополнительное слово                9
2=слово\Саша +дополнительное слово                3
3=слово\третье_имя
4=слово\dfygt3
5=слово\Сергей +дополнительное слово        11
6=слово\ejhgrgej
7=слово\Петя +дополнительное слово                5

Как видите, нет там этих строк. Файлы создаются. Мне не надо предлагать, Как решить. Мне надо понимать:
Что Имеем
Что надо получить, а то тихо шифером шурша крыша едет неспеша, приходится фантазировать.

minutka15 25-11-2022 19:35 2997323

megaloman,
Я извиняюсь.
Код:

Но вы противоречите сами себе
Я не только себе противоречу но и логике))
Совершенно верно.
Дело в том, что я поправил для себя исключение _ в виде в скрипте в верхней части
а в нижней части забыл поправить
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr /V "=_" "%FileIn%"`) DO (

вот и стал велосипед изобретать. Как говорится старость не радость...

Все супер, скрипт работает четко и без помех!

minutka15 25-11-2022 22:31 2997341

Уважаемый megaloman,
У меня последняя просьба.
В виду того что я тут по своей же вине напортачил, оказалось что для таких 1=_Саша создавать текстовый файл не нужно.
Извиняюсь что ошибся, понял только после дальнейшего анализа. Однако для смогу задействовать такой скрипт если вдруг понадобится.

Все что нужно это задействовать в скрипте второй (Set "WordIn2=слово\") для слов которые начинаются с _имя.
И эти слова в завершенном списке как и все другие, но начальное слово будет отличаться от других.
то есть если у нас
1=слово\Алиса +дополнительное слово
то в
2=слово2\_Имя +дополнительное слово

Я самостоятельно смог бы наковырять второй батник из строчек, однако хотелось бы завершить весь сценарий одним скриптом.

megaloman 26-11-2022 10:47 2997418

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
        Set "WordIn=слово\"
        Set "WordIn_=выражение\"

        >nul 2>&1 Find "=%WordIn%"  "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
        >nul 2>&1 Find "=%WordIn_%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)


        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                If "%%j"=="" (Echo %%i
                ) Else (
                        Set "WordAdd=%WordIn%"
                        Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
                        <nul Call Set /P Str=%%i=%%WordAdd%%
                        FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
                )
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

Примеры файлов
Код:

Аня +дополнительное слово                1
Ася +дополнительное слово                2
Саша +дополнительное слово                3
Вася +дополнительное слово                4
_Петя +дополнительное слово                5
Ваня +дополнительное слово                6
Инокентий +дополнительное слово        7
_Филипп +дополнительное слово        8
Алиса +дополнительное слово                9
Эллис +дополнительное слово                10
Сергей +дополнительное слово        11
Вера  +дополнительное слово                12
Марина +дополнительное слово        13

Код:

[AllNames]
1=Алиса
2=Саша
3=_Филипп
4=dfygt3
5=Сергей
6=ejhgrgej
7=_Петя

Код:

[AllNames]
1=слово\Алиса +дополнительное слово                9
2=слово\Саша +дополнительное слово                3
3=выражение\_Филипп +дополнительное слово        8
4=слово\dfygt3
5=слово\Сергей +дополнительное слово        11
6=слово\ejhgrgej
7=выражение\_Петя +дополнительное слово                5


minutka15 26-11-2022 15:17 2997423

megaloman,
Вот Спасибо!
После того как это действие выполняется на все 100% - мой проект ожил после долгой спячки.
Как раз то что хотел иметь долгое время но никак не получалось.
Благодарю из глубины души !
Жму руку!

minutka15 02-12-2022 00:50 2997801

Цитата:

Цитата megaloman
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
Set "WordIn=слово\"
Set "WordIn_=выражение\"
>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>nul 2>&1 Find "=%WordIn_%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If "%%j"=="" (Echo %%i
) Else (
Set "WordAdd=%WordIn%"
Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
<nul Call Set /P Str=%%i=%%WordAdd%%
FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
)
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B »

Если вас не затруднит могли бы вы показать каким образом можно переделать поисковое слово например:
Set "WordIn_=выражение\" где мы ищем первую букву _
Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
Заменить на поисковое слово ".chm" в конце слова...
Одним словом вместо поиска значения в начале слова "_" искать только расширения файлов *.chm

megaloman 04-12-2022 18:43 2997982

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
        Set "WordIn=слово\"
        Set "WordInChm=выражение\"
        Set "Chm=.Chm"

        >nul 2>&1 Find "=%WordIn%"  "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
        >nul 2>&1 Find "=%WordInChm%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)


        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                If "%%j"=="" (
                        Echo %%i
                ) Else (
                        >nul FindStr /I /C:"%%j%Chm% " "%Fsprav%"&&(<nul Call Set /P Str=%%i=%WordInChm%&FindStr /I /C:"%%j%Chm%" "%Fsprav%")
                        >nul FindStr /I /C:"%%j%Chm%" "%Fsprav%"||(
                                >nul FindStr /I "%%j " "%Fsprav%"||(Echo %%i=%%j)
                                >nul FindStr /I "%%j " "%Fsprav%"&&(<nul Call Set /P Str=%%i=%WordIn%&FindStr /I /C:"%%j" "%Fsprav%")
                ))
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

Файлы
"непостоянный файл.txt"
Код:

[AllNames]
1=Алиса
2=Саша
3=Филипп
4=dfygt3
5=Сергей
6=ejhgrgej
7=Петя

"постоянный справочник.txt"
Код:

Аня +дополнительное слово                1
Ася +дополнительное слово                2
Саша +дополнительное слово                3
Вася +дополнительное слово                4
Петя.chm +дополнительное слово                5
Ваня +дополнительное слово                6
Инокентий +дополнительное слово        7
Филипп.chm +дополнительное слово        8
Алиса +дополнительное слово                9
Эллис +дополнительное слово                10
Сергей +дополнительное слово        11
Вера  +дополнительное слово                12
Марина +дополнительное слово        13

"непостоянный файл.txt" после обработки
Код:

[AllNames]
1=слово\Алиса +дополнительное слово                9
2=слово\Саша +дополнительное слово                3
3=выражение\Филипп.chm +дополнительное слово        8
4=dfygt3
5=слово\Сергей +дополнительное слово        11
6=ejhgrgej
7=выражение\Петя.chm +дополнительное слово                5


megaloman 05-12-2022 13:23 2998049

Вот еще вариант. Примеры файлов из предыдущего поста.
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\непостоянный файл.txt"
        Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
        Set "WordIn=слово\"
        Set "WordInChm=выражение\"
        Set "Chm=.Chm"

        >nul 2>&1 Find "=%WordIn%"  "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
        >nul 2>&1 Find "=%WordInChm%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)

        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                If "%%j"=="" (Echo %%i) Else (Call :Out "%%i" "%%j")
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B

:Out
        >nul FindStr /I /B /C:"%~2%Chm% " /C:"%~2 " "%Fsprav%"||(<nul Set /P Str=%~1=%~2&Echo.&Exit /B 0)
        >nul FindStr /I /B "%~2%Chm% " "%Fsprav%"&&(<nul Set /P Str=%~1=%WordInChm%&FindStr /I "%~2%Chm% " "%Fsprav%"&Exit /B 0)
        >nul FindStr /I /B "%~2 " "%Fsprav%"&&(<nul Set /P Str=%~1=%WordIn%&FindStr /I "%~2 " "%Fsprav%"&Exit /B 0)
Exit /B


minutka15 05-12-2022 19:43 2998089

megaloman

Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\run.ini"
        Set "Fsprav=Z:\Box_In\setup.ini"
        Set "WordInExe={src}\"
        Set "WordInMsi=msiexec.exe /i {src}\"

        >nul 2>&1 Find "%WordInExe%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
        >nul 2>&1 Find "%WordInMsi%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)

        FOR /F "usebackq tokens=1* delims= " %%i In ("%Fsprav%") DO (
                If /I "%%~xi"==".exe" Set "%%i=%WordInExe%%%i %%j" 
                If /I "%%~xi"==".msi" Set "%%i=%WordInMsi%%%i %%j" 
        )
        Set /A N=1000000
        (Set /P @@@1000000=<"%FileIn%")
        FOR /F "usebackq skip=1 tokens=1* delims==" %%i In ("%FileIn%") DO (
                Call Set /A N+=%%i
                Call Set "@@@%%N%%=%%i=%%%%j%%"
                Call :Missing "%%%%j%%" "@@@%%N%%" "%%i=%%j"
        )
        >"%FileIn%" (FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO Echo %%j)
pause
Exit /B

:Missing
        If "%~1"=="" (Set %~2=%~3)
Exit /B

Мне этот скрипт который вы написали подходит на все 100%
Огромная вам благодарность за проделанную работу!
С уважением!

megaloman 11-12-2022 11:01 2998498

Перепевка этого скрипта
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\run.ini"
        Set "Fsprav=Z:\Box_In\setup.ini"

rem        Set "WordInExe={src}\"
        Set "WordInExe=Start /W "

rem        Set "WordInMsi=msiexec.exe /i {src}\"
        Set "WordInMsi=Start /W msiexec.exe /i "

        >nul 2>&1 Find "%WordInExe%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
        >nul 2>&1 Find "%WordInMsi%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)

        FOR /F "usebackq tokens=1* delims= " %%i In ("%Fsprav%") DO (
                If /I "%%~xi"==".exe" Set "%%i=%WordInExe%%%i %%j" 
                If /I "%%~xi"==".msi" Set "%%i=%WordInMsi%%%i %%j" 
        )
        Set /A N=1000000
        (Set /P @@@1000000=<"%FileIn%")
        FOR /F "usebackq skip=1 tokens=1* delims==" %%i In ("%FileIn%") DO (
                Call Set /A N+=%%i
                Call Set "@@@%%N%%=%%%%j%%"
                Call :Missing "%%%%j%%" "@@@%%N%%" "%%i=%%j"
        )
       
        >"%FileIn%" (
                Call :Begin
                FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO (Echo %%j)
                Call :End
        )
pause
Exit /B

:Missing
        If "%~1"=="" (Set %~2=)
Exit /B

:Begin
        (Echo What animal can jump)
        (Echo higher than a house?)
Exit /B

:End
        (Echo Any animal.)
        (Echo Houses can't jump.)
Exit /B


minutka15 11-12-2022 14:24 2998516

megaloman
Спасибо, но я никак понять не могу, для чего такая перепевка скрипта если мы изначально можем вставить то что хотим ???
Единственное что делает скрипт так это меняет Set WordInExe, Set WordInMsi с одного имени на другое.
Задача ведь была другая, а именно убрать нумерацию рождаемого файла, там где получали:
1=Start /W SetupName.exe -y
чтобы стало
Start /W SetupName.exe -y
То есть добавление в прошлый скрипт команды на удаление всех 1=, 2=, 3=

megaloman 11-12-2022 16:52 2998529

Цитата:

Цитата minutka15
Спасибо, но я никак понять не могу, для чего такая перепевка скрипта если мы изначально можем вставить то что хотим ??? »

Цитата:

Цитата minutka15
Задача ведь была другая, а именно убрать нумерацию рождаемого файла, там где получали: »

Возвращаемся к постановке:
Что дано? Если это результат отработки предыдущего скрипта, зачем нужен костыль для убирания нумерации?
Если исходный файл как в начальной постановке, то лучше сделать сразу требуемое без промежуточных костылей.
Не плодите новые сущности без крайней необходимости.
Костыль
Код:

@Echo Off
cls
        Set "FileIn=Z:\Box_In\run.ini.1.txt"
        Set /A N=1000000
        FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                Call Set /A N+=1
                Set "Name=%%i"
                If "%%j"=="" (Call Set @@@%%N%%=%%i) Else (Call Set @@@%%N%%=%%j)
        )
        >"%FileIn%" (FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO Echo %%j)
pause
Exit /B


minutka15 11-12-2022 17:22 2998533

megaloman,
Спасибо батник очищает от 1= как раз что было нужно
Можно сделать один батник вместо двух чтобы изначально получалось без 1= ?
Да еще одно но..
если прописать так - Set "WordInExe=RunProgram="" то батник молчит, то есть дополнительный символ " как бы не переносится.

А в позапрошлом скрипте #17 переносится все что пропишешь.
Лучше скрипт #17 модифицировать как окончательный вариант и я решил бы все проблемы.

megaloman 11-12-2022 19:25 2998552

Цитата:

Цитата minutka15
Можно сделать один батник вместо двух чтобы изначально получалось без 1= ? »

Не могу понять, чем вот этот скрипт, который всё делает, Вас не устроил

minutka15 11-12-2022 20:09 2998556

megaloman
С тем скриптом нет возможности передавать такие" значения.
Если на выходе делать батник то он пойдет т.к. мы передаем start /w без специальных символов.
В случае если на выходе иметь конфиг для 7z sfx то нам нужно передать слово с символом RunProgram=" и скрипт не работает.
С прошлым скриптом все получается.
Собрал таким образом, вроде бы работает:
Код:

@Echo Off
cls
        Set "FileIn=run.txt"
        Set "Fsprav=setup.ini"
        Set "WordIn=RunProgram=""
        Set "WordIn_=RunProgram=""

        >nul 2>&1 Find "=%WordIn%"  "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Exit /B)
        >nul 2>&1 Find "=%WordIn_%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Exit /B)

        >"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                If "%%j"=="" (Echo %%i
                ) Else (
                        Set "WordAdd=%WordIn%"
                        Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
                        <nul Call Set /P Str=%%i=%%WordAdd%%
                        FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
                )
        ))
        >nul Move /Y "%FileIn%.tmp" "%FileIn%"

        Set /A N=1000000
        FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
                Call Set /A N+=1
                Set "Name=%%i"
                If "%%j"=="" (Call Set @@@%%N%%=%%i) Else (Call Set @@@%%N%%=%%j)
        )
        >"%FileIn%" (FOR /F "usebackq tokens=1* delims==" %%i In (`Set "@@@"`) DO Echo %%j)
Exit /B

В данном случае на выходе будет конфиг для сборки 7z sfx
команды идут в таком порядке
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 }"
Но когда я начинаю добавлять вторую третью -ReadCount 0; $f[1]='; -ReadCount 0; $f[2]='; то строки переписываются.
Как этого избежать?
Первая строка в обязательном порядке должна быть на самом верху, а остальные три можно подсунуть в конец списка...


Время: 16:28.

Время: 16:28.
© OSzone.net 2001-