दिलचस्प पोस्ट
यदि उपयोगकर्ता नाम पहले से ही अस्तित्व में है, तो जांचने के लिए jQuery के दूरस्थ विधि उपयोग मान्य करें React.js – घटक विधियों तक पहुंच एंड्रॉइड एप्लिकेशन में com.android.internal.telephony.ITelephony को कैसे आयात करें जावास्क्रिप्ट जो पेज लोड के बाद निष्पादित होता है अमान्य UTF-8 वर्णों के उपयोगकर्ता इनपुट को कैसे नियंत्रित करें? जावा – POST विधि के माध्यम से HTTP मापदंड आसानी से भेज रहा है I बहुआयामी सरणी से नेस्टेड सूची बनाएं तर्क प्रकार के आधार पर __init__ पद्धति को अधिभार कैसे करें? वाईएक्स की स्थापना रद्द करते समय फ़ाइलों को निकालना urlencode बनाम rawurlencode? MATLAB में फ़ंक्शन तर्कों के नाम / मान जोड़े से कैसे निपटें छोटी URL सेवाएं कैसे काम करती हैं? अजगर में आइटम आवृत्ति गणना ngRepeat – प्रदर्शित परिणामों की संख्या सीमित करें जावा इंटरफेस और वापसी प्रकार

अन्य फ़ोल्डर पथ को सिस्टम पैथ में SEX के साथ भी क्यों जोड़ा गया है और न केवल निर्दिष्ट फ़ोल्डर पथ?

मेरे पास एक बैच फ़ाइल है जो मैं system("name.bat") का उपयोग करके C ++ से कॉल कर रहा हूं। उस बैच फ़ाइल में मैं एक रजिस्ट्री कुंजी के मान को पढ़ने की कोशिश कर रहा हूं I बैच फ़ाइल को C ++ से कॉल करने से विफल करने के लिए set KEY_NAME=HKEY_LOCAL_MACHINE\stuff

हालांकि, जब मैं सीधे बैच फ़ाइल चलाता हूं (डबल क्लिक करने पर), यह ठीक चलती है। निश्चित नहीं कि मुझसे कौन सी गलती हो रही है।

बैच फ़ाइल:

 set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Ansoft\Designer\2014.0\Desktop set VALUE_NAME=InstallationDirectory REG QUERY %KEY_NAME% /v %VALUE_NAME% 

सी ++ फ़ाइल:

 int main(void) { system("CALL C:\\HFSS\\setup_vars.bat"); return 0; } 

अद्यतन 1:

मुझे पता चला कि कुंजी वास्तव में 64-बिट रजिस्ट्री में है, और मैं 32-बिट के रूप में अपने C ++ समाधान का निर्माण कर रहा था एक बार मैंने तय किया कि, यह रजिस्ट्री कुंजी ठीक पाया।

अब मेरे पास पाथ चर में जोड़ने का एक मुद्दा है। एक सिस्टम चर बनाने के बजाय, यह एक उपयोगकर्ता चर PATH बना रहा है और वहां इसे जोड़ रहा है

कमांड लाइन से काम चल रहा है

कोड:

 set KEY_NAME=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop\ set VALUE_NAME=InstallationDirectory FOR /F "usebackq skip=1 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME%`) DO ( set ValueName=%%A set ValueType=%%B set ValueValue=%%C ) if defined ValueName ( @echo Value Value = %ValueValue% ) else ( @echo %KEY_NAME%\%VALUE_NAME% not found. ) :: Set PATH Variable set path_str=%PATH% set addPath=%ValueValue%; echo %addPath% echo %ValueValue% echo %PATH%| find /i "%addPath%">NUL if NOT ERRORLEVEL 1 ( SETX PATH "%PATH% ) else ( SETX PATH "%PATH%;%addPath%;" /M ) 

अद्यतन 2:

मैंने विकल्प / एम के प्लेसमेंट को स्थानांतरित कर दिया और अब यह सही पैथ चर में जोड़ रहा है

हालांकि, जब मैं यह कर रहा हूं, यह एक बार (3 गुना) से अधिक पाथ को जोड़ रहा है और फिर यह दृश्य स्टूडियो एमडी 64 फ़ोल्डर के लिए एक पथ भी जोड़ रहा है।

मुझे यकीन है कि ऐसा क्यों हो रहा है

Solutions Collecting From Web of "अन्य फ़ोल्डर पथ को सिस्टम पैथ में SEX के साथ भी क्यों जोड़ा गया है और न केवल निर्दिष्ट फ़ोल्डर पथ?"

विंडोज नई प्रक्रिया के लिए एक नई प्रक्रिया शुरू करने की प्रक्रिया की संपूर्ण वातावरण तालिका की प्रतिलिपि बनाता है। इसलिए आपके सी ++ एप्लिकेशन की शुरुआत के दौरान, आपकी एप्लिकेशन को पाथ प्रोसेस, विंडोज एक्सप्लोरर या आपके केस विज़ुअल स्टूडियो से पैटएच सहित वातावरण तालिका मिलती है। और यह पाथ बैच फ़ाइल की शुरुआत पर cmd.exe लिए कॉपी की गई है।

विंडोज़ डेस्कटॉप से ​​बैच फ़ाइल में पूरे प्रोसेस ट्री को लेते हुए, पैथ के लिए कई प्रतिलिपियां बनाई गईं हैं और कुछ प्रक्रियाओं ने पाथ के स्थानीय प्रतिलिपि को कुछ जोड़ा था जैसे विजुअल स्टूडियो ने किया है, या पैट से पथ हटा दिए हैं।

अब आप SETX PATH "%PATH% साथ क्या कर रहे हैं, SETX PATH "%PATH% के स्थानीय प्रतिलिपि को प्रक्रिया पेस्ट में मूल रूप से संशोधित किया गया है जो पूरी तरह से सिस्टम पाथ को डुप्लिकेट पथ की जांच किए बिना।

बेहतर होगा कि सभी कोड को पाथ की स्थानीय प्रति का उपयोग करके फेंक दें और इसके बजाय सिस्टम पाथ का मूल्य पढ़ें, जांचें कि आप जिस पाथ को जोड़ना चाहते हैं, वह पहले से ही सिस्टम पैथ में नहीं है और यदि ऐसा नहीं है, तो जिस पथ को आप चाहते हैं उसे जोड़ें setx का उपयोग करके सिस्टम पाथ को जोड़ने के लिए

और यह सिस्टम पाथ में पर्यावरण चर जैसे %SystemRoot%\System32 को C:\Windows\System32 विस्तार के बिना किया जाना चाहिए।


अद्यतन करें

विंडोज 7 एक्स 64 और विंडोज एक्सपी x 86 पर आपके कार्य के लिए आवश्यक बैच कोड की आवश्यकता है।

 @echo off setlocal EnableExtensions DisableDelayedExpansion set "KeyName=HKLM\SOFTWARE\Ansoft\Designer\2014.0\Desktop" set "ValueName=InstallationDirectory" for /F "skip=2 tokens=1,2*" %%N in ('%SystemRoot%\System32\reg.exe query "%KeyName%" /v "%ValueName%" 2^>nul') do ( if /I "%%N" == "%ValueName%" ( set "PathToAdd=%%P" goto GetSystemPath ) ) echo Error: Could not find value "%ValueName%" under key echo %KeyName% echo/ endlocal pause goto :EOF :GetSystemPath for /F "skip=2 tokens=1,2*" %%N in ('%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v "Path" 2^>nul') do ( if /I "%%N" == "Path" ( set "SystemPath=%%P" goto CheckPath ) ) echo Error: System environment variable PATH not found. echo/ endlocal pause goto :EOF :CheckPath setlocal EnableDelayedExpansion set "Separator=" if not "!SystemPath:~-1!" == ";" set "Separator=;" set "PathCheck=!SystemPath!%Separator%" if "!PathCheck:%PathToAdd%;=!" == "!PathCheck!" ( %SystemRoot%\System32\setx.exe Path "!SystemPath!%Separator%%PathToAdd%" /M ) endlocal endlocal 

उपर्युक्त बैच कोड एक सरल केस-असंवेदनशील स्ट्रिंग प्रतिस्थापन और एक केस-सेंसिस्ट स्ट्रिंग तुलना का उपयोग करता है, यह जांचने के लिए कि क्या फ़ोल्डर पथ पहले से मौजूद है, सिस्टम पैथ में मौजूद है। यह केवल तभी काम करता है जब यह ज्ञात है कि फ़ोल्डर पथ पहले कैसे जोड़ा गया था और इस दौरान उपयोगकर्ता ने इस फ़ोल्डर पथ को पाथ में संशोधित नहीं किया है। जाँच करने के लिए एक सुरक्षित विधि के लिए यदि पथ पथ में एक फ़ोल्डर पथ है, तो कैसे देखें कि डायरेक्टरी% PATH% में मौजूद है या नहीं? डेव बेनेम द्वारा लिखित

ध्यान दें: Command SETX डिफ़ॉल्ट रूप से Windows XP पर उपलब्ध नहीं है।

बैच लिपि को पाथ के साथ परीक्षण किया गया जिसमें वर्तमान में एक विस्मयादिबोधक चिह्न के साथ एक फ़ोल्डर पथ होता है और एक फ़ोल्डर पथ के साथ डबल कोट्स में संलग्न होता है जो केवल आवश्यक है कि फ़ोल्डर पथ में अर्धविराम होता है

उपयोग किए गए कमांडों को समझने के लिए और कैसे काम करते हैं, एक कमांड प्रॉम्प्ट विंडो खोलें, वहां निम्न कमांड निष्पादित करें, और प्रत्येक निर्देश के लिए पूरी तरह से सभी सहायता पृष्ठों को बहुत सावधानी से पढ़ें।

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • reg /? और reg query /?
  • set /?
  • setlocal /?
  • setx /?