Показать полную графическую версию : [решено] Вставить слово между текстом
megaloman
05-12-2022, 13:23
Вот еще вариант. Примеры файлов из предыдущего поста.@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
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
Перепевка этого скрипта@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
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
Спасибо, но я никак понять не могу, для чего такая перепевка скрипта если мы изначально можем вставить то что хотим ??? »Задача ведь была другая, а именно убрать нумерацию рождаемого файла, там где получали: »Возвращаемся к постановке:
Что дано? Если это результат отработки предыдущего скрипта, зачем нужен костыль для убирания нумерации?
Если исходный файл как в начальной постановке, то лучше сделать сразу требуемое без промежуточных костылей.
Не плодите новые сущности без крайней необходимости.@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
megaloman,
Спасибо батник очищает от 1= как раз что было нужно
Можно сделать один батник вместо двух чтобы изначально получалось без 1= ?
Да еще одно но..
если прописать так - Set "WordInExe=RunProgram="" то батник молчит, то есть дополнительный символ " как бы не переносится.
А в позапрошлом скрипте #17 переносится все что пропишешь.
Лучше скрипт #17 модифицировать как окончательный вариант и я решил бы все проблемы.
megaloman
11-12-2022, 19:25
Можно сделать один батник вместо двух чтобы изначально получалось без 1= ? »Не могу понять, чем вот этот скрипт, который всё делает (http://forum.oszone.net/post-2998498-23.html), Вас не устроил
minutka15
11-12-2022, 20:09
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]='; то строки переписываются.
Как этого избежать?
Первая строка в обязательном порядке должна быть на самом верху, а остальные три можно подсунуть в конец списка...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.