2014-12-05 95 views
0

我想使用程序A.bat來執行一個命令來替換程序B.cmd中的變量從no到yes,到目前爲止我唯一能夠do是使用批處理 - 如何替換不同文件中的變量

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' - 但這不可能解決你的* actual *問題。 – Magoo 2014-12-05 03:48:12

回答

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將除了不需要的行之外的所有內容寫入新文件。
追加新線
回移動輸出到原來的文件名

>B.cmd.new (
    findstr /vxc:"set variable=no" B.cmd 
    echo set variable=yes 
) 
move /y B.cmd.new B.cmd >nul