2014-01-06 2 views
0

Windows 배치 스크립팅을 사용하여 파일 내의 변수 할당을 검색하고 바꾸려고합니다.라인 끝에 변수 할당을 찾아 바꾸는 방법은 무엇입니까?

할당 된 값이 항상 변경되고 변수가 줄의 끝에 있기 때문에 이상하게 보입니다. 나는 APP-배달 변수의 할당 된 값을 대체하기 위해 노력하고, 그래서 예를 들어 36에 35을 변경 할 스크립트를 작성하고 싶습니다

*##======================================================== 
*## This file was generated on 09-18-2007 at 10:21:56 
*##======================================================== 
DEBUG-LEVEL = 10  APP-DELIVERY = 35 

PROGRAM-CONTROL... 
    DUPLICATE-CONDITION-CHECK = N 
    GENERATE-SETUP    = N 
    GENERATE-ENV    = Y 

다음은 파일에 포함 된 것입니다.

정적 문자열을 다른 문자열로 바꾸는 방법에 대한 많은 답을 찾았지만 변수의 값을 변경하는 것과 관련하여 아직 아무것도 찾지 못했습니다. 줄 끝의 변수는 훨씬 적습니다. . 또한 내가 찾은 답을 가지고, 나는 등호를 다루는 방법을 확신하지 못했다.

+0

당신이하고 싶은 것이 나에게 불분명하지만 ... 나는'sed' 유틸리티의 Windows 버전을 살펴볼 것을 제안합니다. – JimR

+0

명확성이 부족하다는 것에 대해 사과드립니다. 당신이 볼 수있는 것은 (APP-DELIVERY) 값을 바꾸고 싶은 변수가있는 파일의 내용입니다. 현재 35의 값으로 설정되어 있지만 배치 스크립트를 사용하여 다른 값으로 설정하려고합니다. – RYC

+0

모든 파일 내용을 읽고 필요한 내용을 변경하고 결과를 출력 파일에 써야합니다. 변경 사항은 많은 파일 내용에 달려 있습니다. 따라서 줄 끝 부분에서 일부 텍스트를 변경하는 방법을 알고 싶습니까? –

답변

0
@ECHO OFF 
SETLOCAL 
(
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "^" q20958786.txt') DO (
SET line=%%b 
CALL :subs %1 
) 
)>newfile.txt 

GOTO :EOF 
:subs 
:: Empty line? 
IF NOT DEFINED line echo(&GOTO :EOF 
:: What's after APP-DELIVERY[space]? 
SET lineend=%line:*APP-DELIVERY =% 
:: No APP-DELIVERY[sp]? 
IF "%lineend%"=="%line%" echo(%line%&GOTO :EOF 
:: Does the end part start "= " ? 
IF NOT "%lineend:~0,2%"=="= " echo(%line%&GOTO :EOF 
:: If so, see whether it terminates with a decimal number 
SET lineend=%lineend:~2% 
SET "value=" 
SET /a value=%lineend% >NUL 2>NUL 
:: Value will now have that decimal or be empty 
IF NOT "%value%"=="%lineend%" echo(%line%&GOTO :EOF 
:: Valid decimal - lop off the end of the line, character-by-character 
:loploop 
SET line=%line:~0,-1% 
SET lineend=%lineend:~1% 
IF DEFINED lineend GOTO loploop 
:: Plug our replacement supplied as %1 to the batch. 
ECHO(%line%%1 
GOTO :eof 

여기에 필요한 배치가 있습니다. 그것은 당신의 입력 파일을 읽습니다. (나는 이것을 q20958786.txt으로 지명했습니다. 당신이 말하는 것은 당신에게 달려 있습니다.) 출력 파일 newfile.txt을 생성합니다.

의견에 와타가 표시되어야합니다.

실행이

+0

고맙습니다, 이건 아름답게 작동합니다, failsafes는 또한 좋은 손길입니다. – RYC

0

thisbatch replacementvalue 이것은 당신이 원하는대로에 35을 변경해야합니다. 아래 코드에서 36입니다. 배치 파일이나 경로에있는 폴더에 같은 폴더에 https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

장소 repl.bat :에서 다운로드 -

그것은 도우미 배치 repl.bat라는 파일을 사용합니다.

type "file.log" | repl "(^DEBUG-LEVEL = .*APP-DELIVERY =).*" "$1 36" >"newfile.log" 
+0

이 방법도 작동하지만 휴대용은 아닙니다. 그래도 고마워! – RYC

관련 문제