2015-03-22 1 views
5

मुझे वैश्विक पर्यावरण चर PATH स्थायी रूप से SETX के साथ सेट करने में समस्या हो रही है।दो तर्कों के लिए "सेटक्स" के साथ अमान्य वाक्यविन्यास, जब केवल दो तर्क हैं

मैंने Invalid syntax with setx जैसे समान प्रश्नों के उत्तर पढ़े हैं और साथ ही साथ SS64 पर वाक्यविन्यास पढ़ा है।

जहाँ तक मुझे पता है, निम्न पंक्ति सही ढंग से SETX की वाक्य रचना अनुसरण करता है और करता है नहीं उस में दो से अधिक तर्क है:

SETX PATH "%PATH%" 

लेकिन वह मुझे इस देने से SETX नहीं रुकती त्रुटि:

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s). 
Type "SETX /?" for usage. 

उपरोक्त आदेश cmd.exe के व्यवस्थापक उदाहरण पर रन था। समस्या क्या है और अधिक अजनबी यह है कि cmd.exe के उपयोगकर्ता उदाहरण पर एक ही आदेश पूरी तरह से काम करता है।

मैं इस समस्या पर जोर देना उपरोक्त आदेश को सरल बनाया है, लेकिन क्या मैं वास्तव में चलाने के लिए कोशिश कर रहा हूँ है:

SETX PATH "%PATH%;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" /M 
बेशक

, इस एक ही सटीक त्रुटि देता है, और मैं इसे नहीं चल सकता cmd.exe के उपयोगकर्ता उदाहरण पर क्योंकि मैं वैश्विक पर्यावरण परिवर्तनीय PATH को सेट करने की कोशिश कर रहा हूं। (जिसे व्यवस्थापक पहुंच की आवश्यकता है)

उत्तर

5
echo %PATH% 

अपने (मशीन स्तर) %path% एक अनुगामी \ रिवर्स सोलिडस (बैकस्लैश) के साथ समाप्त होता है, तो आप इसे दोगुना करना चाहिए इस प्रकार है:

if "%path:~-1%"=="\" (
    SETX PATH "%PATH%\" 
) else (
    SETX PATH "%PATH%" 
) 

संसाधन: Syntax : Escape Characters, Delimiters and Quotes (मेरे अपने मुख्य आकर्षण में ध्यान दें निम्नलिखित उद्धरण):

Some commands (e.g. REG and FINDSTR) use the standard escape character of \ (as used by C, Python, SQL, bash and many other languages.) The \ escape can cause problems with quoted directory paths that contain a trailing backslash because the closing quote " at the end of the line will be escaped \" .

To save a directory path with a trailing backslash (\) requires adding a second backslash to 'escape the escape' so for example instead of "C:\My Docs\" use "C:\My Docs\\"

पिछलापर बयान के ऊपर बयानSETX पर भी लागू होता है। यहाँ एक उदाहरण है:

==>set myPath 
myPath=D:\Program Files\OgreSDK\ 

==>setx myOgre "%myPath%" 
SUCCESS: Specified value was saved. 

==>reg query HKEY_CURRENT_USER\Environment /v myOgre 
HKEY_CURRENT_USER\Environment 
    myOgre REG_SZ D:\Program Files\OgreSDK" 

==>setx myOgre "%myPath%\" 
SUCCESS: Specified value was saved. 

==>reg query HKEY_CURRENT_USER\Environment /v myOgre 
HKEY_CURRENT_USER\Environment 
    myOgre REG_SZ D:\Program Files\OgreSDK\ 

==> 

Invalid syntax त्रुटि टूट करने के लिए पहले उपयोगकर्ता स्तर वातावरण चर के रूप में SETX PATH "%PATH%" का उपयोग करते हुए की वजह से उपयोगकर्ता स्तर %PATH% चर संबंधित है मशीन स्तर एक पर पूर्वता लेता है।समस्या को हल करने के लिए, उपयोगकर्ता के स्तर को समायोजित %PATH% चर (या बिल्कुल यह निकालने के लिए) पहले via Windows GUI (preferred):

Control Panel | System | Advanced | Environment Variables

प्रमाण - दो चरणों में समस्या पुन: पेश:

चरण # 1: के साथ शुरू अच्छा %myPath% पिछला \ के साथ मशीन स्तर पर परिवर्तनीय; आखिरकार (ठीक में) इस उपयोगकर्ता को वर्तमान उपयोगकर्ता स्तर और exitcmd सत्र के लिए तोड़ दिया।

==>set myPath 
myPath=D:\temp\foo foo\ 

==>reg query HKEY_CURRENT_USER\Environment /v myPath 
ERROR: The system was unable to find the specified registry key or value. 

==>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v myPath 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 
    myPath REG_SZ D:\temp\foo foo\ 

==>setx myPath "%myPath%;D:\temp\bu bu bu" 
SUCCESS: Specified value was saved. 

==>reg query HKEY_CURRENT_USER\Environment /v myPath 
HKEY_CURRENT_USER\Environment 
    myPath REG_SZ D:\temp\foo foo\;D:\temp\bu bu bu 

==>rem fetch erroneous state 
==>setx myPath "%myPath%" 
SUCCESS: Specified value was saved. 

==>reg query HKEY_CURRENT_USER\Environment /v myPath 
HKEY_CURRENT_USER\Environment 
    myPath REG_SZ D:\temp\foo foo" 

==>exit 

चरण # 2: एक नया cmd सत्र में, " पूर्ण विराम वाले उपयोगकर्ता स्तर पर टूटा %myPath% चर के साथ शुरू; यह प्रश्न में वर्णित त्रुटि उठाता है।

==>set myPath 
myPath=D:\temp\foo foo" 

==>reg query HKEY_CURRENT_USER\Environment /v myPath 
HKEY_CURRENT_USER\Environment 
    myPath REG_SZ D:\temp\foo foo" 

==>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v myPath 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 
    myPath REG_SZ D:\temp\foo foo\ 

==>setx myPath "%myPath%;D:\temp\bu bu bu" 
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s). 
Type "SETX /?" for usage. 

==>reg query HKEY_CURRENT_USER\Environment /v myPath 
HKEY_CURRENT_USER\Environment 
    myPath REG_SZ D:\temp\foo foo" 

==> 
+0

वास्तव में, मुझे यकीन है कि यह एक 'के साथ समाप्त होता हूँ, तो साथ', अगर नहीं फ़ोल्डर नाम का अंत, लेकिन निश्चित रूप से \ के साथ नहीं। साथ ही, लेखन के समय, उपयोगकर्ता स्तर पर 'पथ' चर मौजूद नहीं था। – octopod

0

इसका मतलब है कि यह पहले से ही पथ में है (मैं कई दिनों के लिए सेटक्स से लड़ रहा हूं, यह बेवकूफ है)।

आप एक ही मौजूदा प्रविष्टि जोड़ सकते हैं या त्रुटि के बिना एक नई प्रविष्टि जोड़ सकते हैं, लेकिन एक अलग प्रविष्टि नहीं। पथ प्रति उपयोगकर्ता खाली है, पथ प्रति मशीन खाली नहीं है।

1

नीचे मेरे लिए काम किया:

चरण 1:

setx PATH "%PATH%;%GOPATH%bin" 

मैं गया निम्नलिखित प्रतिक्रिया:

WARNING: The data being saved is truncated to 1024 characters. 

SUCCESS: Specified value was saved. 

एक और सरल उदाहरण हो सकता है:

setx PATH "%PATH%;C:\Go\bin" 

चरण 2:

पुनः प्रारंभ कमांड लाइन, नया पथ को देखने के लिए सेटिंग्स

echo %PATH% 
संबंधित मुद्दे