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

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

modzilla 24-11-2017 09:59 2779840

создание bat-файла с перезаписью другого .bat
 
Здравствуйте.
интересует вот такое вот дело.

Есть у меня, припустим текстовый файл
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 2779843

Изложите первичную задачу.

modzilla 24-11-2017 10:17 2779844

необходимо по запуску батника вторую строку с 1.тхт, вставить в четвертую строку файла 2.bat

megaloman 24-11-2017 16:30 2779910

modzilla,
Цитата:

Цитата modzilla
необходимо по запуску батника вторую строку с 1.тхт, вставить в четвертую строку файла 2.bat »

это не ответ, скорее упрямство и занудство (извините за хамство). Тем более смысл строк:
Цитата:

Цитата modzilla
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 2779911

при таком содержимом
1.txt

1.1.1.1
3.3.3.3

2.bat

@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

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

@Echo Off

Set ""
Set "var=3.3.3.3"
pause


modzilla 24-11-2017 16:38 2779914

Цитата:

alpap
Цитата:

megaloman
Спасибо вам, работают и подходит два варианта! С тонкостями далее сам разберусь, не знал даже с чего начать.
Цитата:

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

megaloman 24-11-2017 17:00 2779920

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%
::::
::::
::::
::::
::::
::::
::::
::::
::::



Время: 04:37.

Время: 04:37.
© OSzone.net 2001-