
Tengo algunos archivos que acabo de enviar en mi repositorio de git:
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>git diff --name-only head^^ ClaimCenter/modules/configuration/config/web/pcf/TabBar.pcf ClaimCenter/modules/configuration/config/web/pcf /team/user/TeamUserClaims.pcf ClaimCenter/modules/configuration/gsrc/citizens/cc/pcf_gs/team/TeamTabLastUser.gs
Ahora quiero capturar las rutas y hacer algo más con ellas, pero el git diff
comando no produce (?) ninguna línea para FOR /F
iterar:
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>for /f %p in ('git diff --name-only head^^') hacer @( echo %p )
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>
¿Que está pasando aqui?Al principio esperaba que hubiera algún error en mi sintaxis, pero la diferenciación con otros objetivos funciona dentro del bucle for. Por ejemplo, "maestro^^" demuestra que no es sólo el personaje de escape el que causa estragos:
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>for /f %p in ('git diff --name-only master^^') do @( echo %p ) ClaimCenter/modules/configuration/config/rules /Reopened/ClaimReopened_dir/CRO05000ApplyCustomReopenRule_dir/CRO05010AssignToOriginalAdjuster.gr ClaimCenter/modules/configuration/config/rules/Reopened/ClaimReopened_dir/CRO05000ApplyCustomReopenRule_dir/CRO05030DefaultAssignment.gr ClaimCenter/modules/configura tion/config/web/pcf/TabBar.pcf ClaimCenter/modules/configuration/ config/web/pcf/team/user/TeamUserClaims.pcf ClaimCenter/modules/configuration/gsrc/citizens/cc/pcf_gs/team/TeamTabLastUser.gs
Respuesta1
Doble escape de "cabeza^" a "cabeza^^^^":
C:\core\guidewire\Release\5.3_MT1\ClaimCenter>for /f %p in ('git diff --name-only head^^^^') do @(echo %p)
ClaimCenter/modules/configuration/config /web/pcf/TabBar.pcf
ClaimCenter/modules/configuration/config/web/pcf/team/user/TeamUserClaims.pcf
ClaimCenter/modules/configuration/gsrc/citizens/cc/pcf_gs/team/TeamTabLastUser.gs
Cuando CMD ejecuta el comando citado, se lleva a cabo una segunda ronda de expansión, por lo que ^^
se convierte en ^
y luego . De hecho, el caso de prueba que se diferencia de "master^^" no prueba nada ya que termina sin signos de intercalación. La línea de comando original simplemente diferenciaba HEAD de HEAD, que por supuesto no modifica ningún archivo.