2016-06-23 24 views
7

Ho un file batch che funzionava abbastanza felicemente, fino all'ultimo paio di corse, e ora non lo è. Il codice incriminato è il seguente:"For" con "usebackq" che non utilizza le virgolette posteriori

set uncommittedchanges=1 
for /f "tokens=* usebackq" %%a in (`"C:\Program Files\Git\cmd\git" -C "\my\git\repository" status`) do (
    if "%%a" == "nothing to commit, working directory clean" (
     set uncommittedchanges=0 
    ) 
) 

E l'errore che sto ottenendo è

'C: \ Program' non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.

Sono sicuro di non aver apportato alcuna modifica a queste righe dal momento dell'ultimo funzionamento e non riesco a vedere nulla di sbagliato nel codice così com'è.

Qualcuno può individuare ciò che è sbagliato o suggerire un'impostazione che potrebbe essere stata inavvertitamente modificata che influenza usebackq?

+0

Il nuovo cmd è in modalità di amministratore? – Mekap

+0

Sì, ho eseguito cmd.exe come amministratore. – BeanFrog

+2

Non riesco a rispondere al motivo per cui hai misteriosamente perso il lavoro, ma potresti aggirare il problema usando l'alias breve 8.3: "C: \ PROGRA ~ 1 \ Git \ cmd \ git" -C "\ mio \ git \ repository "status' –

risposta

3

È un bug del richiamo dell'istanza cmd.exe del bambino.
È necessario utilizzare una soluzione alternativa per evitare che il primo token utilizzi spazi senza caratteri di escape.

Il modo più semplice è utilizzare CALL mentre sposta il token di programma al secondo posto, e lì funziona senza problemi.

for /f "tokens=* usebackq" %%a in (`CALL "C:\Program Files\Git\cmd\git" -C "\my\git\repository" status`) do (

Windows start command not able to execute batch file