2016-03-08 13 views
6

Ho un problema con l'esecuzione di un altro comando all'interno di un comando FOR su Windows 7 Ultimate. Il comando for fa parte di un file batch e deve analizzare le uscite di un altro comando.Batch di Windows: comando di esecuzione con FOR/F - "comando non trovato"

solito questo:

for /f %%a IN ('tasklist') DO echo %%a 

deve eseguire il comando "Tasklist" e l'uscita suoi risultati tramite eco. Ma ottengo sempre "comando non trovato".

Ho provato a eseguire il comando all'esterno del forloop e funziona. Ho anche provato a eseguire molti comandi esterni all'interno di for, ma ogni comando diceva "comando non trovato".

Ho provato anche gli esempi di questo post:

Batch: Execute command with quotes in for loop with piping to find

`m sicuro

  • che i comandi esiste
  • di aver preso visione e di esecuzione dei diritti ad esso
  • che il mio utente è nel gruppo di amministratori
  • che eseguo t comanda con "Esegui come amministratore"

Ma niente funziona su questo pc. Gli stessi comandi funzionano su un altro PC che esegue anche Windows 7 Ultimate.

Quindi qualcuno potrebbe avere un'idea che potrebbe non funzionare sul PC dove non vengono trovati tutti i comandi?

Ecco un esempio delle uscite della mia console quando provo con il comando "ls". ls.exe è un file eseguibile dal progetto gun4win e si trova nella stessa cartella in cui è in esecuzione il mio file batch. Le finestre sono in tedesco, quindi l'output dell'errore è anche in tedesco.

C: \ test> test_for.bat

C:\test>rem --- test a command stand-alone --- 

C:\test>ls 
ls.exe  test_for.bat  

C:\test>rem --- test same command in a FOR-Loop --- 

C:\test>for /F "delims=" %a in ('ls') do echo FOR-OUTPUT: %a 
Der Befehl "ls" ist entweder falsch geschrieben oder konnte nicht gefunden 
werden. 

montaggio finale: Il problema era valore errato per la variabile di sistema envoirement "ComSpec".

Ho modificato ComSpec in "Erweiterte Systemeigenschaften-> Erweitert-> Umgebungsvariaben-> Systemvariablen" in "C: \ Windows \ system32 \ cmd.exe" e il problema è stato risolto.

Grazie alla @foxidrive e @jeb

+3

Il vostro scri pt usa una variabile con il nome 'path'? – foxidrive

+2

... o 'pathext'? si potrebbe provare a eseguire lo script nella directory '% SystemRoot% \ System32 \', dove si trova il comando' tasklist' ... – aschipfl

+0

Questo non importa dove si trova il comando. Ho anche provato un comando che si trova nella stessa cartella del mio batchfile. Il suo dice "comando non trovato" per tutto. Ma posso eseguire tutti i comandi all'esterno del for. Solo all'interno di "no" si trova – Radon8472

risposta

4

Se si utilizza FOR /F e l'errore 'something' is not recognized as an internal or external command, operable program or batch file per ogni programma, anche i comandi interni, la causa più comune è una variabile ComSpec sbagliata.

È possibile controllare la variabile con set ComSpec, deve essere C:\Windows\System32\cmd.exe.

Non aiuterà a cambiare la variabile sulla riga di comando, la causa è descritta in DosTips: ComSpec strange behaviour

Se la variabile contiene un valore diverso, si dovrebbe correggere questo sotto

Per un sistema tedesco:
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen

Per un sistema inglese:
Win Key+Pause Key->Advanced System Settings->Environment Variables->System Variables