2016-12-29 1 views
-1

I가 요구되는 배치 파일을 만들려고 노력하고 있어요 :배치 파일이

  1. 실행 git describe을하고 file.txt에 출력을 저장;
  2. 파일의 내용을 동일하거나 다른 파일 (예 : v1.0으로서 "v1.0";
  3. 또는 v1.0의 앞뒤에 "을 추가하면됩니다.

배치 파일을 작성했지만 요구 사항에 따라 출력하지 않습니다.

cd C:path to project directory 
set /p=^"<nul > file.txt 
start cmd.exe /k "git describe >>"file.txt" & exit" 
set /p= ^"<nul >> file.txt 

내가 "v2.9"을 원하지만 출력은 v2.9입니다 : 여기에 내가 쓴 것입니다. 2 번과 4 번 라인이 작동하지 않는 이유는 무엇입니까?

+1

왜'start'와'cmd/K'를 사용하여'git describe'를 실행하고 있습니까? 나는 두 가지를 모두 제거 할 수 있다고 생각합니다. – aschipfl

+2

2 투표 또는 가까운 투표를 이해하지 못합니다. OP는 기존 코드를 제공하는 전반적인 목표를 명시하고 작동하지 않는 코드의 한 측면에 대한 특정 프로그래밍 질문을 요청했습니다. 모두 완벽하게 나에게 합리적이며, 우리가이 공동체에서 찾고 있다고 생각하는 것. – dbenham

답변

1

내가 자식이 출력에 줄 바꿈이 포함됩니다 확실 해요, 그래서 당신이 SET/P있어 경우에도 "를 인쇄하려면 출력은 다음과 같습니다

"v1.0 
" 

난에 간단한 해결책을 믿는다 문제는 FOR/F를 사용하여 git 명령의 출력을 캡처 한 다음 루프 내에 인용 된 값을 쓰는 것입니다.

당신은 START와 자식, 다음 종료를 시작하고 싶었 : 아래



@echo off 
cd /d "c:path to project directory" 
for /f "delims=" %%A in ('git describe') echo "%%A" >file.txt 

는 게시 된 코드를 사용하여 몇 가지 문제가 있습니다./K 옵션을 사용 했으므로 명령 실행 후 새 cmd 세션이 계속 활성화되어 EXIT 명령을 추가해야했습니다./C 옵션을 사용하는 것이 훨씬 간단합니다.

start cmd.exe /c "git describe >>"file.txt"" 

그러나 START는 전혀 필요하지 않습니다. 당신은 단순히 당신은 줄 바꿈없이 하나의 "를 출력 SET/P를 사용하려고 현재 세션

git describe >>"file.txt" 

에서 직접 명령을 실행할 수 있습니다. SET/P에 odd rules for how it handles leading quotes, white space, and =이 있기 때문에 실패했습니다.

중 하나의 파일에 하나의 "의 출력을 리디렉션하는 데 사용 될 수있는 다음과 같은 : 당신은 이상한 따옴표가 선회에 대해 걱정할 필요가 없습니다 그래서 나는 앞에 리디렉션을 넣어

<nul >file.txt set /p =""" 
<nul >file.txt set /p "="""" 

리터럴 문자열로 리디렉션. 끝에 리디렉션을 넣으면 따옴표 중 하나를 탈출해야합니다. 그것은 git-descr (확장자) 이름없는 당신의 %PATH%에 저장하고 명령 git descr로 전화 : 당신은 또한 (심지어 Windows의 경우) 실제 bash는 스크립트를 작성 고려할 수

set /p =^""" <nul >file.txt 
set /p =""^" <nul >file.txt 
set /p ^"="""" <nul >file.txt 
set /p "="^""" <nul >file.txt 
set /p "="""^" <nul >file.txt 
+0

자세한 설명을 주셔서 감사합니다. 나는 {/ g "delims ="%% A in ('git describe') echo "%% A"> file.txt}를 이해하기가 어려웠습니다. 키워드에 대한 "/ f"의 목적은 무엇입니까? 프로세스에 어떤 영향을 줍니까? – Learner

+0

@ Learner-'FOR/F ... IN ('명령') DO는 명령의 결과를 한 줄씩 반복합니다. ' "delims ="'는 토큰 구분 기호를 아무 것도 설정하지 않으므로 전체 줄을 보존합니다. 명령 프롬프트에서'help for'또는'for /?'를 사용하여 문서를보십시오. – dbenham

1

%PATH%의 모든 git-xxx 스크립트 것 git bash에 의해 실행될 수 있습니다.

Adding double-quotes is then easy.

#!/bin/bash 
cd /c/path/to/local/repo 
d=$(git describe) 
echo "\"${d}\"">file.txt 

다시 말하지만, Windows에서도 작동합니다.

관련 문제