2014-12-05 4 views
0

Я пытаюсь использовать программу A.bat для выполнения команды для замены переменной в программе B.cmd от нет до да, пока единственная вещь, которую я смог это использоватьBatch- Как заменить переменную в другом файле

set variable=yes >>B.cmd 

Но это только добавляет новую переменную и не избавиться от старого, есть ли способ сделать это?

::B.cmd Says 
set variable=no 
::A.bat executes the command 
set variable=yes >>B.cmd 
::B.cmd now says 
set variable=no 
set variable=yes 
+0

Я предлагаю вам расширить свой вопрос и рассказать нам немного о том, почему вы делаете это, а не пытаться сосредоточиться на microtask. Самый простой метод, учитывая то, что вы нам сказали, - «set variable = yes> B.cmd», но это вряд ли разрешит вашу * актуальную проблему. – Magoo

ответ

0

Задайте переменную окружения в сценарии A, затем запустите B в той же среде.

Или сделайте AB-helper.cmd, который содержит только строку, которая устанавливает переменную окружения, и вы можете легко перезаписать ее без проблем. B.cmd может call AB-helper.cmd вместо установки переменной.

В противном случае вы ищете запуск цикла for в строках в файле, установление их в качестве переменных среды, а затем использование расширения с заменой и наделение на то, что вы не перепутаете что-либо еще в файле. Он будет выглядеть так:

setlocal ENABLEDELAYEDEXPANSION 
for /f "tokens=* delims=" %%l in (B.cmd) do (
    set myTMP=%%l 
    if "!myTMP!"=="set variable=no" (
     echo set variable=yes >> B-new.cmd 
    ) else (
     echo !myTMP! >> B-new.cmd 
    ) 
) 
ren B.cmd B-old.cmd 
ren B-new.cmd B.cmd 

Возможный более короткий путь; echo !myTMP:variable^=no=variable^=yes! >> B-new.cmd вместо if/else бит. Тем не менее, я не смог получить равные возможности, чтобы выполнить замену.

1

Используйте FINDSTR для записи всего, кроме нежелательной строки, в новый файл.
Append новой линии
Переместить вывод обратно в исходное имя файла

>B.cmd.new (
    findstr /vxc:"set variable=no" B.cmd 
    echo set variable=yes 
) 
move /y B.cmd.new B.cmd >nul 
Смежные вопросы