2009-03-16 6 views
1

cmd 파일의 호출 횟수는 어떻게 계산합니까?cmd 파일의 호출 횟수는 어떻게 계산합니까?

나는이 같은과 사투를 벌인거야하지만 작동하지 않았다 :

@IF NOT EXIST Calls.log echo. > Calls.log 
@for %%i in (Calls.log) do set size=%%~zi 
@IF %size% EQU 0 (
@ECHO 1 > Calls.log 
) ELSE (
@set /p v=<Calls.log 
@set /A v+=1 
@echo %v% > Calls.log 
) 

답변

1

전체 if 블록을 한 번에 분석하고, 따라서 모든 환경 변수가 시간에 자신의 값으로 대체지고 전에if 블록이 실행됩니다. 당신은 지연 변수 확장을 활성화하고 !v! 사용할 필요가 :

@setlocal enabledelayedexpansion 
@IF NOT EXIST Calls.log echo. > Calls.log 
@for %%i in (Calls.log) do set size=%%~zi 
@IF %size% EQU 0 (
    @ECHO 1 > Calls.log 
) ELSE (
    @set /p v=<Calls.log 
    @set /A v+=1 
    @echo !v! > Calls.log 
) 

을 그리고 당신은 다음과 같이 코드를 단순화 할 수 있습니다 사전에 파일을 생성 할 필요가 없습니다

@echo off 
setlocal enabledelayedexpansion 
IF NOT EXIST Calls.log (
    ECHO 1 > Calls.log 
) ELSE (
    set /p v=<Calls.log 
    set /A v+=1 
    echo !v! > Calls.log 
) 

(심지어 내가 거라고 copy nul Calls.log으로 해결하면 파일 크기가 0이됩니다. 당신이 cmd를 스크립트가 호출 횟수를 계산하면된다하려는 모든, 당신은 단지마다 파일에 하나 개의 문자를 추가 할 수있는 경우

@if not exist Calls.log (
echo 0 > Calls.log 
) 
@set /p v=< Calls.log 
@set /a v=v+1 
echo %v% > Calls.log 
+0

여러분을 환영합니다. 이 경우 답변을 수락 할 수있는 옵션이 있습니다. :) – Joey

0

다음 코드는 내 컴퓨터에서 작동 스크립트가 실행될 때마다 표현식 평가를 수행하는 대신 실행됩니다. 이것은 또한 카운트의 분석이 다른 곳으로 옮겨 졌기 때문에 스크립트를 더 빨리 만들 수 있다는 장점이 있습니다.

카운터 파일은 매번 1 바이트 씩 확장되므로 파일이 확장되므로 실제로 많은 횟수로 호출해야합니다. 그러나 1 초에 한 번 호출해도 1G 파일은 30 년 후에 만 ​​발생합니다. 스크립트의 상단에

, 그냥 넣어 :

set >>countfile.txt <nul: /p x=X 

이 단순히 countfile.txt 파일의 끝에 스크립트가 호출 될 때마다 문자 X를 추가합니다. "set/p"명령을 사용하여 입/출력 리다이렉션을 수행합니다.이 방법은 문자 뒤에 CR/LF (UNIX "echo -n"처럼)를 사용하지 않고 문자를 가져 오는 유일한 방법입니다.

다음 호출과 같이 파일 크기 환경 변수 수정자를 사용할 수 있습니다 (스크립트 실행보다 실행 빈도가 적기를 기대합니다. 여기 꿀꿀 작품은) 사실, 그것은 오히려 디렉토리 항목에서 직접 정보를 얻을, 그것은 문자를 계산하지 이후 고된 많은 일이 아니다] :

@echo off 
    goto :main 
:getsize 
    echo %~z1 
    goto :eof 
:main 
    setlocal enableextensions enabledelayedexpansion 
    call :getsize countfile.txt 
    endlocal 

이 카운트를 재설정 극단적으로 다음을 사용하려면 복잡한 명령 (나는 이것을 특허로 생각하고있다) :

del countfile.txt 

다른 제안 사항 - 에코를 방지하기 위해 모든 명령 앞에 "@"을 붙일 필요가 없습니다. "@echo off"을 전역 노 에코를위한 스크립트 상단에 간단하게 입력 할 수 있습니다. 일부 명령을 선택적으로 에코하려면이 단락을 무시하십시오.

관련 문제