0

I want to get output in simple txt file inside git repo folder:

About:
date = (2022_06_04)
version = (1d34a1b1)

And I stuck with formatting data in ( ) brackets.

Here is my attempt:

@echo off
set dt=%DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%%
set dt=%dt: =0%
set wrap=About:
set file_name="vers.txt"
set git_cmd=git describe --abbrev=8 --always
echo %wrap% >%file_name%
echo.date = (%dt%)>>%file_name%
echo|set /p ="version = (" >>%file_name%
%git_cmd% >>%file_name%
echo.) >>%file_name%
%NL%>>%file_name% 

Problem is with ')' for git output formatting. Here is what I'm getting:

About: 
date = (2022_06_04)
version = (1d34a1b1
) 

I've tried to play with echo -n, but it doesn't work on Windows.

UPDATE

NL is just new line:

set NL=echo.

Here is example of command line with whole git command output:

USR@DESKTOP-N1 MINGW64 /c/project/prj (v1.1.2)<CR><LF>
$ git describe --abbrev=8 --always<CR><LF>
1d34a1b1<CR><LF>
<CR><LF>
USR@DESKTOP-N1 MINGW64 /c/project/prj (v1.1.2)<CR><LF>

And here is how my output text file looks like:

About:<CR><LF>
date = (2022_06_06)<CR><LF>
version = (1d34a1b1<LF>
) <CR><LF>

Seems <LF> appeared at some stage. For me it looks like <CR> was cutted but <LF> stayed because of some Windows standard formatting or something like that, I'm no sure.

M_V
  • 3
  • 3

1 Answers1

0

Two possibilities leap to mind

%git_cmd%|set /p ="version = (" >>%file_name%
echo.) >>%file_name%

and

for /f "delims=" %%e in ('%git_cmd%') do echo version = (%%e)>>%file_name%

but I've no git applications, so this is a guess...


This worked for me to give the output desired:

@ECHO Off
SETLOCAL
set dt=%date%
set wrap=About:
set file_name="u:\vers.txt"
set git_cmd=q72496859s describe --abbrev=8 --always
echo %wrap% >%file_name%
echo.date = (%dt%)>>%file_name%
for /f "delims=" %%e in ('%git_cmd%') do echo version = (%%e)>>%file_name%

TYPE %file_name%

GOTO :EOF

Noting:
My %date% format is YYYYMMDD

I've removed the %NL%... line. NL is not defined in the original post. I'd guess it's supposed to add a new line.

q72496859s is a batch file that simply responds 1d34a1b1 on a single line.

I've no idea what git actually generates - does it contain empty lines or perhaps <CR><LF><CR> sequences?

It's SOP for me to use set "var=value" for setting string values - this avoids problems caused by trailing spaces and not assign a terminal \, Space or " - but build pathnames from the elements - counterintuitively, it is likely to make the process easier.

Using these principles, this batch becomes

@ECHO Off
SETLOCAL
set "dt=%date%"
set "wrap=About:"
set "file_name=u:\vers.txt"
set "git_cmd=q72496859s describe --abbrev=8 --always"
echo %wrap% >"%file_name%"
ECHO date = (%dt%)>>"%file_name%"
for /f "delims=" %%e in ('%git_cmd%') do echo version = (%%e)>>"%file_name%"

TYPE "%file_name%"

GOTO :EOF

Edit to second version of above.

@ECHO Off
SETLOCAL
set "dt=%date%"
set "wrap=About:"
set "file_name=u:\vers.txt"
set "git_cmd=q72496859s describe --abbrev=8 --always"
echo %wrap% >"%file_name%"
ECHO date = (%dt%)>>"%file_name%"

for /f "delims=" %%e in ('%git_cmd% ^|findstr /v "/ -"') do echo version = (%%e)>>"%file_name%"

TYPE "%file_name%"

GOTO :EOF

I set q72496859s to deliver the git response described.

The pipe needs to be escaped (by a caret) to tell cmd that it's part of the command-to-be-executed, not of the actual for command.

The findstr ignores empty lines and reports those lines that do not (/v) contain either / or - - the / needs to be escaped (using backslash this time), which should isolate the required data.

The result I obtained was

About:
date = (06/06/2022)
version = (1d34a1b1)
Magoo
  • 77,302
  • 8
  • 62
  • 84
  • Unfortunately, this didn't work. First one gives: _version = ()_ and second dont print nothing at all in row with version. First 2 lines with "about" and "date" I didn't mention as they print as expected. – M_V Jun 04 '22 at 19:06
  • Here is example of whole git command output: USR@DESKTOP-N1 MINGW64 /c/project/prj (v1.1.2)`` $ git describe --abbrev=8 --always`` 1d34a1b1`` `` USR@DESKTOP-N1 MINGW64 /c/project/prj (v1.1.2)`` Your last batch file gives nothing in last sequence for some reason. Also I have examined initial output (pls see update of question), it occurs there are `` appeared before ')'. – M_V Jun 06 '22 at 13:35
  • I have updated question header, to keep better formatting – M_V Jun 06 '22 at 13:44
  • thanks for assistance! Your last modification worked if change `findstr` to `find` (its happened because of command line text encoding, `find` command supports UTF-16, `findstr` dont. But now my output as I wanted! – M_V Jun 06 '22 at 14:21