2013-07-24 14 views
18

Ho provato di recente a modificare le variabili di ambiente per impostare i percorsi su javac.exe (tra le altre cose). Funzionava bene fino a quando, all'improvviso, ho iniziato a ricevere questo errore. Per esempio, ho dichiarato una variabile JAVA_HOME essereErrore "C: Program" non riconosciuto

C:\Program Files\Java\jdk1.7.0_25

Dopo di che, aggiungo

%JAVA_HOME%\bin

alla variabile PATH, ma questo mi dà un errore:

'C:\Program' is not recognized as an internal or external command, operable command or batch file.

Questo errore sembra che si stiano verificando problemi con lo spazio in "Programmi". Questo è strano, però, dal momento che non stava facendo questo per un bel po ', poi ha iniziato. Inoltre, ci sono altre variabili con spazi in esse che funzionano bene. Ho provato a eliminare la variabile e a ricrearla, inserendo virgolette su JAVA_HOME (che va al percorso corretto, ma non trova javac.exe correttamente) ..

Qualche consiglio su cosa potrei fare?

Questo è su Windows 7.

EDIT:

Le variabili d'ambiente sono stati fissati andando Pannello di controllo> Impostazioni di sistema avanzate> Variabili d'ambiente. Il valore delle variabili è stato impostato copiando l'indirizzo della cartella che voglio attraverso una finestra di Explorer. Ho aggiunto alla variabile ambiente PATH aggiungendo l'indirizzo con uno spazio tra la variabile precedente e una virgola alla fine, come ad esempio:

C:\Users\Demo_User_1\AppData\Roaming\npm; %JAVA_HOME%

dove la variabile JAVA_HOME è definita come tale:

C:\Program Files\Java\jdk1.7.0_25

ho verificare il valore della variabile attraverso un prompt dei comandi digitando% JAVA_HOME%, ed è lì che ho l'errore risultante di " 'C: \ Program' non è riconosciuto ..."

I risultati di 'set' sono come segue:

C:\Users\Demo_User_1>set 
ALLUSERSPROFILE=C:\ProgramData 
ANDROID_HOME=C:\Users\Demo_User_1\Desktop\Android\adt-bundle-windows-x86_64-2013 
0717\sdk 
APPDATA=C:\Users\Demo_User_1\AppData\Roaming 
CommonProgramFiles=C:\Program Files\Common Files 
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files 
CommonProgramW6432=C:\Program Files\Common Files 
COMPUTERNAME=DEMO_USER_1-HP 
ComSpec=C:\Windows\system32\cmd.exe 
FP_NO_HOST_CHECK=NO 
HOMEDRIVE=C: 
HOMEPATH=\Users\Demo_User_1 
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_25 
LOCALAPPDATA=C:\Users\Demo_User_1\AppData\Local 
LOGONSERVER=\\DEMO_USER_1-HP 
NUMBER_OF_PROCESSORS=4 
OnlineServices=Online Services 
OS=Windows_NT 
Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Clien 
t\;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files 
(x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows; 
C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program 
Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\ 
x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Intel\I 
ntel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Managem 
ent Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engin 
e Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Compone 
nts\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\Wir 
elessCommon\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files 
(x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows 
Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\ 
Tools\Binn\;C:\Program Files\nodejs\; C:\Users\Demo_User_1\Desktop\Android\adt-b 
undle-windows-x86_64-20130717\sdk/platform-tools; C:\Users\Demo_User_1\Desktop\A 
ndroid\adt-bundle-windows-x86_64-20130717\sdk\tools; %JAVA_HOME%; %ANT_HOME%/bin 
; C:\Program Files\Java\jdk1.7.0_25\bin; C:\Users\Demo_User_1\AppData\Roaming\np 
m; "%JAVA_HOME%"; ;C:\Users\Demo_User_1\Desktop\Android\adt-bundle-windows-x86_6 
4-20130717\sdk/tools; C:\Users\Demo_User_1\Desktop\Android\adt-bundle-windows-x8 
6_64-20130717\sdk/platform-tools 
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC 
PCBRAND=Pavilion 
Platform=MCD 
PROCESSOR_ARCHITECTURE=AMD64 
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 58 Stepping 9, GenuineIntel 
PROCESSOR_LEVEL=6 
PROCESSOR_REVISION=3a09 
ProgramData=C:\ProgramData 
ProgramFiles=C:\Program Files 
ProgramFiles(x86)=C:\Program Files (x86) 
ProgramW6432=C:\Program Files 
PROMPT=$P$G 
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\ 
PUBLIC=C:\Users\Public 
SESSIONNAME=Console 
SystemDrive=C: 
SystemRoot=C:\Windows 
TEMP=C:\Users\DEMO_U~1\AppData\Local\Temp 
TMP=C:\Users\DEMO_U~1\AppData\Local\Temp 
USERDOMAIN=Demo_User_1-HP 
USERNAME=Demo_User_1 
USERPROFILE=C:\Users\Demo_User_1 
VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools 
\ 
windir=C:\Windows 
windows_tracing_flags=3 
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log 
+0

prega di essere più specifico/dettagliata. Come hai impostato la variabile? Come l'hai aggiunto al percorso? Quando/dove ricevi l'errore? Inoltre, sarebbe di grande aiuto se si pubblica un elenco delle variabili di ambiente (digitare 'set' a un prompt di ** cmd ** e copiare i risultati). –

+0

Le tue domande hanno ricevuto risposta in una modifica. Grazie! – derekahc

risposta

20

Ok, che rende più chiaro.

Ci sono due problemi principali qui.

Prima di tutto, il motivo per cui stai ricevendo 'C:\Program' is not recognized... è, ovviamente, perché contiene spazi. Il fatto di averlo quotato nella variabile d'ambiente PATH non ha alcuna relazione con il modo in cui % JAVA_HOME% viene interpretato al prompt. Hai due opzioni.

  1. Citazione quando si definisce la variabile, cioè impostare JAVA_HOME-"C:\Program Files\Java\jdk1.7.0_25"
  2. Citazione quando lo si richiama. Digitare "%JAVA_HOME%\bin" al prompt. Naturalmente, riceverai il messaggio di errore "non riconosciuto come comando interno o esterno, programma eseguibile o file batch" a meno che non termini il percorso con un eseguibile (ad es."%JAVA_HOME%\bin\javac.exe"), ma vedrete che in questo modo si lamenta di "C: \ Programmi \ Java \ jdk1.7.0_25" ' anziché di ' C: \ Program '.

In secondo luogo, non è possibile utilizzare le variabili di ambiente nel percorso. È possibile possibile utilizzare le variabili di ambiente quando si imposta il percorso al prompt dei comandi. Ad esempio,

set PATH=%PATH%;%JAVA_HOME% 

funzionerà, ma è perché % JAVA_HOME% viene espanso sulla linea di comando e PATH è impostato al risultato. Se controlli il valore di PERCORSO, vedrai che termina con C: \ Programmi \ Java \ jdk1.7.0_25, non % JAVA_HOME%.

Inoltre, se javac.exe è nel bin sottodirectory, è necessario includere tale nel percorso, vale a dire aggiungi ;C:\Program Files\Java\jdk1.7.0_25\bin al percorso.

(a proposito, avete % JAVA_HOME% nel percorso due volte, e c'è un punto e virgola in più dopo la seconda.)

+1

Perché hai un 'alla fine del penultimo snippet di codice? –

+1

@kayleeFrye_onDeck Sembra un errore di modifica. Probabilmente lo avevo originariamente come intervallo di codice inline, poi lo ho cambiato in un blocco rientrato e ho dimenticato di cancellare il backtick di chiusura. L'ho rimosso. –

1

Anche se Adi Inbar è abbastanza chiaro sul problema, penso che il suo isn soluzione è la soluzione migliore, perché cerca di risolvere il problema originale: gli spazi nel percorso della tua installazione JDK.

Il modo migliore per risolvere il problema è in realtà reinstallare JDK in un percorso senza spazio. Tutti gli altri workaround ti causeranno mal di testa a lungo termine.

+0

Non potrei non essere più d'accordo. Gli spazi nei percorsi sono una realtà della vita in Windows e c'è uno spazio nella posizione standard per i programmi installati. Lasciando il "mal di testa" degli spazi di gestione, è necessario dettare le posizioni che si utilizzano come "soluzione". Imparare a gestire gli spazi correttamente fa parte delle basi dell'uso del sistema operativo ed è molto più prezioso nel lungo periodo. Installazione di programmi in posizioni non standard solo per evitare uno spazio nel percorso conduce a un filesystem disorganizzato e, infine, crea un sacco * più * mal di testa. Consiglio vivamente * contro * farlo. –

25

Un'altra soluzione è quella di fare questo: C:\Program Files ha un nome breve

C:\Progra~1

in finestre.

quindi è sufficiente scrivere Progra ~ 1 anziché i file di programma. {aggiunto mancante 'r'}

+2

Questo non sembra più funzionare come di Windows 8. –

+0

@MattCraig: che può essere maneggiato con [junction] (https://technet.microsoft.com/en-us/sysinternals/bb896768.aspx). dove possiamo creare un link simbolico come: 'incrocio c: \ Program Files "C: \ Programmi"' –

+0

Grazie @adhg, ha funzionato dopo aver configurato JAVA_HOME con C: \ Progra ~ 1 invece C: \ Program Files \ .. –

2

È il percorso che si imposta la variabile di ambiente JAVA_HOME in una variabile utente o una variabile di sistema? Non è possibile utilizzare le variabili utente all'interno delle variabili di sistema. Quindi se JAVA_HOME è definito come variabile utente e lo stai aggiungendo al tuo percorso di sistema che non funzionerà.

Dall'output del comando set sembra che% JAVA_HOME% non sia stato risolto. Dovrebbe mostrare la versione espansa e non quella con% di segni.

Aggiungere una variabile utente Path e aggiungere% JAVA_HOME% \ bin a quello. Windows aggiungerà il percorso dell'utente alla fine del percorso di sistema.

Non è necessario disporre di virgolette nella variabile JAVA_HOME anche se contiene spazi.

0

basta aggiungere cd prima di aggiungere la posizione esempio: invece di

C:\Program Files\Java\jdk1.7.0_25

uso

cd C:\Program Files\Java\jdk1.7.0_25

questo mi ha aiutato.

Problemi correlati