2014-06-17 2 views
0

나는 이런 식으로하려고 노력하고 있지만 제대로 작동하지는 않습니다.배치 스크립트 - 동일한 변수에 변수 값 추가

for /F "tokens=1" %%a in (C:\Auxiliar4.txt) do (

if !counter! EQU 3 (set /A failed=%%a) 
if !counter! EQU 9 (set /A completed=%%a) 
if !counter! EQU 6 (set /A total=%%a) 

set /A counter+=1 

) 

set /A counter=0 

set /A failedday=%failedday%+%failed% 

if %total% NEQ 0 (set /A success=(%completed%*100)/%total%) 

내 문제는이 두 라인이다 :

set /A failedday=%failedday%+%failed% 

if %total% NEQ 0 (set /A success=(%completed%*100)/%total%) 

첫 번째 문제가 변수 "failedday"함께, 내가, TXT 파일에서 숫자 값을 읽을 필요가 실패 (해당 변수에 할당 , completed, total) "failed"값을 "failedday"에 할당합니다. 그런 다음 다른 FOR 루프가 동일한 형식의 다른 txt를 읽고 해당 숫자 값을 "failed", "completed", "total"(이전 값 손실)에 다시 할당하고 "failed"의 새 값을 "failedday"에 추가합니다. (예 : filedday = 2 후에 첫 번째 "for", 두 번째는 failedday = 2 + 새 "Failed"값이어야 함).

두 번째 문제는 "IF"구조입니다. "Total"이 0이 아닌 경우에만 "For"루프에서 값을 가져온 완료된 트랜잭션의 평균을 계산해야하지만이 줄을 추가하면 스크립트가 충돌합니다.

아무도 도와 줄 수 없습니까? 감사!!!

+1

있습니까 :

당신은 산술을 수행하는 지연 확장을 활성화해야? – Stephan

+0

예, 있습니다. 죄송합니다! – Iamthepowa

+0

실제로 문제가 무엇인지 알려 주셔야합니다. 눈에 띄는 점은 당신이 분명히 '실패한 날'에 값을 할당하지 않았다는 것입니다. 당신이 곤경에 처하게한다고 말하는 이유는 무엇입니까? 변수의 값은 무엇이고, 결과의 값은 무엇이며, 무엇을 기대 했습니까? – Magoo

답변

0

여기에 같은 종류의 것을 묻는 previous StackOverflow question이 있습니다.

doing arithmetic with DOS Batch files에 대한 또 다른 참고 자료입니다. 당신의 배치 파일의 시작 부분에 'SETLOCAL enabledelayedexpansion`이

@echo off & setlocal EnableDelayedExpansion 
set /A failed=0 
set /A completed=0 
set /A total=0 

for /F "tokens=1" %%a in (C:\Temp\test.txt) do (
if !counter! EQU 3 (set /A failed=%%a) 
if !counter! EQU 9 (set /A completed=%%a) 
if !counter! EQU 6 (set /A total=%%a) 

set /A counter+=1 
) 

echo Failed: %failed% 
echo Completed: %completed% 
echo Total: %total% 

set /A counter=0 

set /A failedday=failedday+failed 

if total NEQ 0 (set /A success=completed*100/total) 
echo Success: %success% 
+0

지연된 확장이 활성화되어 있습니다. 해당 부분을 붙여 넣는 것을 잊었습니다. 코드가 작동하지 않습니다. 나는 이러한 질문을 읽었지만 이것은 다른 상황이다 : 변수는 "For"루프 밖에있다. 두 번째 링크는 제가 찾고있는 것이 아닙니다. 어쨌든 고마워! – Iamthepowa

+0

Gotcha. Windows 컴퓨터에서 예제를 사용하여 문제를 해결했습니다. 미리 선언 한 다음 실패/완료/합계를 'for' 루프 내에서 특정 값으로 지정하여 루프가 실패한 후에도 값이 유지되는지 확인합니다. –

+0

'setlocal EnableDelayedExpansion'은'set/A failedday = failedday + failed' 같은 명령에는 필요 없습니다. 그것은 단지'!'-expansion 구문을 가능하게하고, 산술 표현식에서 변수 확장과는 아무런 관련이 없습니다. –