2016-08-23 4 views
1

폴더가 c : \ Scripts입니다. 나는 거기에 세 개의 파일에 넣어 :파일을 읽고 Windows 배치 파일 내에서 다른 .bat를 호출하는 중

build.txt 
trigger.bat 
deploy.bat 

은 내가 자동화 된 방식으로 매일 하나씩 증가 버전을 통과하려고

1.2.3.4 

처럼 내 build.txt 뭔가 내부 빌드 번호가 있습니다. 그래서 오늘 내 .txt 파일은 1.2.3.4이고, 내 trigger.bat는 명령 행 인자 1.2.3.5 (1 씩 증가)로 deploy.bat를 호출해야합니다. 또한 .txt 파일 내용을 예약하기 때문에 1.2.3.5로 덮어 써야합니다. 그래서, 내일, 자동으로 1.2.3.6으로 증가 할 것입니다. 나는 내가 얻을려고 버전을 구분하므로 증가하는 방법을 모른다

  1. :

    @echo off 
    set /p build=<version.txt 
    FOR /f "tokens=4* delims=." %%a IN ("%build%") DO (
    set ver=%%a 
    ) 
    set /A ver=ver+1 
    .\deploy.bat -version "1.2.3.%ver%" 
    

    내가 거기에 두 가지 문제가 있습니다 지금 내 trigger.bat 안에 이것을 가지고와

    마지막 자릿수를 증가시킨 다음 연결하여 내 버전으로 전달하십시오. 그것은 누구나 할 수있는 최악의 방법입니다. 나는 그것을 증가시킬 수있는 방법에 대한 도움이 필요하다.

  2. 어떻게하면 텍스트 파일을 덮어 쓸 수 있습니까? 그래서, 만약 내가 증가한 가치에 대한 도움을 얻을 수 있다면, 나는 단지 echo %version% > version.txt을 할 수 있다고 생각한다. 그것은 내 텍스트 파일을 덮어 쓸 것이라고 가정한다. 그렇지 않다면이 문제도 도와주세요.

PowerShell 솔루션에서도 문제가 없습니다. Windows 일괄 스크립팅에 대한 기본 사항을 알고 있으므로 해당 경로를 선택했습니다.

+1

버전 1.2.3.9 이후에는 1.2.3.10 또는 1.2.4.0으로 이동 하시겠습니까? – SomethingDark

+1

표준 버전 관리 규칙에 따라 1.2.3입니다.10 (슬프게도 정렬이나 비교하기가 어렵습니다) – Stephan

+0

예, 1.2.3.9 이후 1.2.3.10입니다. –

답변

2

1)을 사용하면 분해 할 때 이 있습니다. 그래서 당신의 접근 방식은 올바른 방향으로 나아갑니다. 그냥 더 유연하게 그것을 조금 확장 :

올바른
setlocal enabledelayedexpansion 
set /p build=<version.txt 
for /f "tokens=1-4 delims=." %%a in ("%build%") do (
    set /a last=%%d + 1 
    set ver=%%a.%%b.%%c.!last! 
) 
echo %ver% > version.txt 
.\deploy.bat -version "%ver%" 

2), > 대상 파일을 덮어 씁니다 (또는 존재하지 않는 경우)을 만듭니다. (>> 추가 할 것입니다)

+0

안녕하세요, 스테판, 고마워요! 질문이 하나 있습니다. 그것은 10 일 스프린트입니다. 따라서 매 10 일 후에는 3 자릿수를 변경해야합니다. 예를 들어, 1.2.3.1, 1.2.3.2, 1.2.3.3, 1.2.3.4, .... 최대 1.2.3.10입니다. 그리고 11 일에는 새로운 스프린트가 될 것입니다. 1.2.4.1. 배치 스크립트에서이 10 일을 조작 할 방법이 있습니까? 버전의 마지막 자릿수 일 수 있습니까? 10이되면 1.2.3.11이 아니라 1.2.4.1이되어야합니다. 고맙습니다! –

+1

(10 일 기준) 또는 버전 번호를 기반으로합니까? 둘 다 가능하지만 방법은 완전히 다릅니다. – Stephan

+1

@BhavaniKannan, 버전 문자열의 세 번째 부분 번호가 * date *에 의해 수행되는 경우, 별도의 일괄 스크립트에서이를 수행하고 이에 따라 일정을 잡습니다. 날짜 계산은 일괄 스크립팅에 기본이 아니기 때문에 이에 해당합니다. 이자형. 예를 들어'08 : 00','trigger.bat','07 : 50'의 10 일마다 새로운 스크립트가 실행됩니다 ... – aschipfl

1

파일 내용을 변수로 먼저 읽는 이유는 무엇입니까? for /F? 즉시 for /F에 의해 파일을 읽을 수 있습니다. > 리디렉션 연산자를 사용하면 텍스트 파일을 마지막으로 덮어 쓸 수 있습니다. 당신이 나중에이 배치 파일로 돌아갑니다 call 명령을 사용한다 deploy.bat

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 

rem // Define constants here: 
set "FILE=%~dp0build.txt" 

for /F "usebackq tokens=1-4 delims=." %%A in ("%FILE%") do (
    set "VER=%%A" & set "MAJ=%%B" & set "MIN=%%C" & set "BLD=%%D" 
    set /A "BLD+=1" 
    rem // Rules for incrementing the numeric parts: 
    if !BLD! GTR 10 (set /A "BLD=1, MIN+=1") 
    set "VERSION=!VER!.!MAJ!.!MIN!.!BLD!" 
) 
> "%FILE%" echo %VERSION% 

call "%~dp0deploy.bat" -version "%VERSION%" 

endlocal 
exit /B 

다른 배치 파일을 호출하기 : 여기

는 배치 스크립트 trigger.bat의 업데이트 된 코드입니다. %~dp0이라는 접두어는이 스크립트의 상위 디렉토리에있는 deploy.bat을 검색하도록 스크립트에 지시합니다.이 경우 trigger.bat (귀하의 경우 C:\Scripts\)은 .\과 반대로 현재 작업 디렉토리를 검색합니다. 특히 Windows 작업 스케줄러에서 trigger.bat을 실행할 때 기본 작업 디렉토리가 %SystemRoot%\System32 일 수 있다고 가정합니다.

관련 문제