PDA

Показать полную графическую версию : [решено] создание bat-файла с перезаписью другого .bat


modzilla
24-11-2017, 09:59
Здравствуйте.
интересует вот такое вот дело.

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

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

и есть файл 2.bat
с содержимым, припустим.

@Echo Off

Set ""
Set "4.4.4.4"

Под это всё мне необходим третий контрольный батник, который будет с
1.тхт строку ставить под set четвертой строкой в 2.bat заместо существующего текста ( в данном примере, нужно что бы стало
@Echo Off

Set ""
Set "3.3.3.3"


Такое реально сделать?

Iska
24-11-2017, 10:15
Изложите первичную задачу.

modzilla
24-11-2017, 10:17
необходимо по запуску батника вторую строку с 1.тхт, вставить в четвертую строку файла 2.bat

megaloman
24-11-2017, 16:30
modzilla, необходимо по запуску батника вторую строку с 1.тхт, вставить в четвертую строку файла 2.bat »это не ответ, скорее упрямство и занудство (извините за хамство). Тем более смысл строк:Set ""
Set "3.3.3.3" » мне не ясен. @Echo Off
Set "Txt=Z:\Soft_In\1.txt"
Set "Bat=Z:\Soft_In\2.bat"

Set /A NstrBat=4
Set /A NstrTxt=2

Set /A i=%NstrTxt%-1

>"%Bat%.tmp" (
Echo @Echo Off
Echo:
Echo Set ""

FOR /F "usebackq delims=" %%s IN (`more +%i% "%Txt%"`) DO Echo Set "%%s" &GoTo :Cont1)
Del "%Bat%.tmp"
GoTo :Eof

:Cont1
>>"%Bat%.tmp" (FOR /F "usebackq delims=" %%s IN (`more +%NstrBat% "%Bat%" 2^>nul`) DO Echo %%s)

Move /Y "%Bat%.tmp" "%Bat%" >nul
Скрипт заменяет первые 3 строки в 2.bat на то, что указано в скрипте:Echo @Echo Off
Echo:
Echo Set ""
Четвёртой строкой записывает
Set "вторую строку из 1.txt"
и затем все оставшиеся строки из 2.bat
Единственное, все пустые строки в 2.bat будут съедены.
В Вашей постановке мне кажется какое-то извращение.

alpap
24-11-2017, 16:31
при таком содержимом

1.1.1.1
3.3.3.3


@Echo Off

Set ""
Set "var=4.4.4.4"
pause

и коде:

@echo off
set "f1=1.txt"
set "f2=2.bat"
set ns=4

<"%f1%" (set /p=& set /p s2=)
<"%f2%">+ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @echo [%%a]|>nul find "[%ns%]" && (
echo Set "var=%s2%"
) || (
<nul set /p="%%b"& echo:
)
)& >nul move+ "%f2%"
pause


получим вывод (новое содержимое)

@Echo Off

Set ""
Set "var=3.3.3.3"
pause

modzilla
24-11-2017, 16:38
alpapmegaloman
Спасибо вам, работают и подходит два варианта! С тонкостями далее сам разберусь, не знал даже с чего начать.

это не ответ, скорее упрямство и занудство (извините за хамство). Тем более смысл строк:
Я пытался просто объяснить как мог кратко и с моим уровнем знания, то, что необходимо было.
Золотой вы человек, Итого вы даже не понимая меня написали именно ТО, что я искал :)
спасибо вам

megaloman
24-11-2017, 17:00
modzilla, Почему нельзя в 2.bat непосредственно обратиться к 1.txt и забрать там нужную строку? Например, 2.bat записать в виде @Echo Off
Set "Txt=Z:\Soft_In\1.txt"
Set /A NstrTxt=2

Set /A i=%NstrTxt%-1
FOR /F "usebackq delims=" %%s IN (`more +%i% "%Txt%"`) DO Set "Something="%%s"" &GoTo :Continue
:Continue
Echo %Something%
::::
::::
::::
::::
::::
::::
::::
::::
::::




© OSzone.net 2001-2012