2012-06-14 2 views
1

오케이 그래서 내장 된 업데이터로 스크립트를 만들고, 다음 코드로 새 파일을 만들고 여러 변수를 업데이트하지만, 어떤 이유로 이건 작동하지 않습니다. 아이디어를 수정하는 방법 또는 비슷한 스크립트를 작성하는 방법.배치 파일에 대해 찾기 및 바꾸기가 작동하지 않습니다.

@echo off 
setlocal enabledelayedexpansion 

set /p "findthis"="1" 
set /p "replacewith"="1.2.3" 
call:updater 
set /p "findthis"="2" 
set /p "replacewith"="2.3.4" 
call:updater 
set /p "findthis"="3" 
set /p "replacewith"="3.4.5" 
call:updater 
goto:eof 

:updater 
for /f "tokens=*" %%a in (updateme.bat) do (

    set write=%%a 
    if %%a==%findthis% set write=%replacewith% 

    echo !write! 
    echo !write! >>%~n1.replaced%~x1 
) 
goto:eof 

답변

1

이 BAT에는 몇 가지 오류가 있습니다.

일부는 명백한 구문 오류입니다.

  1. 읽기 help set 및 수정 모든 set /p "this"="value" (힌트 :/p 옵션을 사용하여 변수 이름 "의 사용을 수정하지 않습니다) 당신이 호출 된 라벨 % 1을 사용하려고

  2. 을 .이 전달 된 매개 변수입니다, 당신은 당신의 CALL에 전달되지 않습니다. HELP CALL을 읽어보십시오.

일부는 논리 오류이다.

  1. : 업데이터 코드는 업데이트 된 문자열을 출력 파일에 추가합니다. 이렇게 세 번 반복되므로 마지막 코드는 문자열이 변경된 원래 코드의 세 배입니다.

  2. 또한 코드는 문자열을 전체 행으로 찾으려고 시도하지만 BAT 파일에 "1"이 포함 된 행은 나에게별로 의미가 없습니다. 당신은 아마도 "1"의 텍스트 발생을 찾고 싶을 것입니다.

  3. 이전 문제를 해결하고 코드의 의도를 올바르게 이해하면 결국 "1"을 "1.2.3"으로 바꾸고 "2"를 모두 "2.3"으로 바꿉니다. .4 "이므로 원래의"1 "은"1.2.3.4.3 "으로 바뀌고 나중에 다시"1.2.3.4.5.4.3.4.5 "가됩니다. 그걸 조심해.

관련 문제