Cómo establecer la variable desde la salida del command git usando windows cmd / batch

Tengo problemas para "reenviar" una salida a una variable. Estoy usando Atlassian SourceTree con mi versión de GIT. Ahí quiero crear una acción personalizada, con la que pueda crear fácilmente un file zip de todos los files modificados de una confirmación. El file creado debe tener una date formateada del time de confirmación en el nombre del file como update-<YYYYmmdd>T<hhMM>.zip .

Mi trabajo de file por lotes hasta el momento (numbers de línea para reference posterior) :

 1: setlocal enabledelayedexpansion 2: set output= 3: for /f "delims=" %%a in ('git diff-tree --no-commit-id --name-only -r %1^^') do ( set output=!output! "%%a" ) 4: set hours= 5: git show -s --format=%%ci %1 > tmptmptmp & set /p hours= < tmptmptmp & del tmptmptmp 6: set hours=%hours:~0,4%%hours:~5,2%%hours:~8,2%T%hours:~11,2%%hours:~14,2% 7: git archive -o update-%hours%.zip HEAD %output% 8: endlocal 

Tengo problemas para volver a escribir la línea 5 (líneas de time) para evitar crear un file temporal. Si hago lo mismo que en la línea 3 (línea de salida) como:

 for /f "delims=" %%a in ('git show -s --format=%%ci %1^^') do ( set hours=!hours! "%%a" ) 

Obtuve el siguiente error:

fatal: argumento ambiguo '% ci': revisión desconocida o ruta no en el tree de trabajo. Use '-' para separar las routes de las revisiones, como esta: git <command> [<revision>...] -- [<file>...]

Supongo que esto tiene algo que ver con el parámetro %ci necesario (para formatear la salida).

puede alguien ayudarme con esto?

No sé por qué se agrega ^ caret final (un acento circunflejo ) sobre el mismo command usado en la línea 5 git show -s --format=%%ci %1 .

Sin embargo, el signo = igual a --format=%%ci debe escaping de la siguiente manera:

 for /f "delims=" %%a in ('git show -s --format^=%%ci %1^^') do set hours=!hours! "%%a" 

Una muestra de testing :

 ==>type 29803777.bat IF NOT [%1]==[] dir /B %1= for /f "delims=" %%a in ('IF NOT [%1]==[] dir /B %1=') do @echo "%%a" for /f "delims=" %%a in ('IF NOT [%1]^=^=[] dir /B %1^=') do @echo "%%a" ==>29803777.bat x ==>IF NOT [x] == [] dir /B x= x.txt ==>for /F "delims=" %a in ('IF NOT [x] [] dir /B x ') do @echo "%a" [] was unexpected at this time. ==>for /F "delims=" %a in ('IF NOT [x]==[] dir /B x=') do @echo "%a" "x.txt" ==>