2014-12-05 3 views
0

지금까지 유일한 것은 내가 할 수있었습니다 no에서 yes로 프로그램 B.cmd에서 변수를 교체하지하는 명령을 실행하는 데 사용할 프로그램 A.bat을 시도하고 다른 파일에 변수를 대체하는 방법 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

마이크로 타스크. 여러분이 우리에게 말했던 것 중에서 가장 간단한 방법은'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 

가능한 짧은 길; if/else 비트 대신 echo !myTMP:variable^=no=variable^=yes! >> B-new.cmd입니다. 그래도 대체물을 만들기 위해 equals를 제대로 이스케이프 처리하지 못했습니다.

1

사용 FINDSTR 새 파일에 원치 않는 라인을 제외한 모든 쓰기.
원본 파일 이름을 다시 출력을 이동 새로운 라인
을 추가

>B.cmd.new (
    findstr /vxc:"set variable=no" B.cmd 
    echo set variable=yes 
) 
move /y B.cmd.new B.cmd >nul 
난 당신이 질문을 확장하여 우리에게 왜 이런 일을하는 대신에 초점을하려고에 대해 좀 더 말해 좋을 것