Crear file de files modificados en GIT a través de file por lotes

Estoy usando este command git para crear un file de los files modificados dentro de una confirmación específica:

git archive -o update.zip HEAD $(git diff --name-only COMMITID^) 

donde COMMITID es la identificación del compromiso que estoy buscando archivar. Esto funciona bien desde la command-line, pero me gustaría ejecutarlo desde un file por lotes. Aquí están los contenidos del file por lotes que estoy usando:

 git archive -o update.zip HEAD $(git diff --name-only %1^^) 

donde% 1 es la identificación de confirmación pasada a través de SourceTree. El problema que tengo es que este command cuando se ejecuta desde un file por lotes devuelve el siguiente error:

error: opción desconocida `nombre-solo '

Supongo que puede haber algunos problemas de escape de personajes, pero no puedo encontrar lo que específicamente se está rompiendo.

¿Cómo escribiría ese command git para que funcione desde un file por lotes?

ACTUALIZAR

Intenté eliminar la opción –name-only y recibí el siguiente error al probar el script por lotes a través de SourceTree:

fatal: ruta no encontrada: $ (git

Con suerte, eso ayuda a networkingucir lo que puede estar pasando.

ACTUALIZACIÓN ADICIONAL

Resulta que mi syntax era incorrecta para capturar solo los files modificados de una confirmación específica, pero con la respuesta de msandiford se me ocurrió este script de file por lotes que funciona perfectamente:

 setlocal enabledelayedexpansion set output= for /f "delims=" %%a in ('git diff-tree --no-commit-id --name-only -r %1^^') do ( set output=!output! "%%a" ) git archive -o update.zip HEAD %output% endlocal 

Suponiendo que necesita un file por lotes de Windows, y no un script bash, aquí hay un file por lotes mínimo que puede hacer lo que quiera:

 setlocal enabledelayedexpansion set output= for /f "delims=" %%a in ('git diff --name-only %1^^') do ( set output=!output! "%%a" ) git archive -o update.zip HEAD %output% endlocal 

Funciona al recostackr todas las líneas de la salida del command git diff ... en una variable de entorno, y luego usar esto para realizar la operación de git archive ...

La documentation para el command Windows for está aquí , incluido el /f . La documentation para el command setlocal está aquí .