Cmd.exe থেকে একটি স্থির পরিবেশের পরিবর্তনশীল সেট করুন


123

আমাকে বিভিন্ন উইন্ডোজ মেশিনে পরিবেশের ভেরিয়েবলগুলি সেট করতে হবে, তবে আমি "মাই কম্পিউটার" এর বৈশিষ্ট্যগুলির স্ক্রিনে গিয়ে ম্যানুয়ালি সেগুলি পরিবর্তন করতে বিরক্ত হতে চাই না

আমি একটি ব্যাচ ফাইল সহ কমান্ড লাইন থেকে এটি করতে চাই। আমি যতদূর বুঝতে পেরেছি, সেট ব্যবহার করা কেবল কমান্ড উইন্ডোতে কল করা প্রসেসের জন্য পরিবর্তনশীল পরিবর্তন করবে।

আমি অবশ্যই এটি সেট করতে চাই, সুতরাং পরে, যখন কোনও নতুন প্রক্রিয়া চলাকালীন, এটি আমার সেট করা new নতুন সেটিংসটি ব্যবহার করবে। কমান্ড লাইন থেকে এটি করার কোন উপায় আছে?


যদি তারা স্থায়ী হয় তবে কমান্ড লাইন থেকে সেটিংয়ের বিষয়টি কী? আপনার আবার এটি করার দরকার নেই।
d- লাইভ

12
হ্যাঁ, তবে বেশ কয়েকটি কম্পিউটারে আমাকে এটি করতে হবে, সুতরাং স্ক্রিপ্টটি চালানো আমার কিছুটা সময় সাশ্রয় করবে।
আর্থার

2
ঠিক আছে, সেক্ষেত্রে আপনি একটি কম্পিউটারে আপনার এনভীভ সেট করতে পারেন এবং নীচে বর্ণিত এন্ট্রিগুলির রফতানি করতে পারেন এবং SETX আপনার কাছে উপলব্ধ না থাকলে একটি .reg ফাইল রাখতে পারেন।
d-লাইভ

এটাই আমি করেছি। ধন্যবাদ।
আর্থার

1
আর: 'কমান্ড লাইন থেকে সেগুলি নির্ধারণের মূল বিষয়টি ...' আমি যেখানে কাজ করি সেখানে সফ্টওয়্যারটির বিভিন্ন সংস্করণ পরীক্ষা করতে / বিকাশের জন্য বিভিন্ন মানকে বিভিন্ন ধরণের পরিবেশগত পরিবর্তনশীলের ধ্রুবক প্রয়োজন। লাইসেন্সিং এর অর্থ এটি অন্য কোনও উপায়ে করা যায় না (যেমন কোনও ভিএম চালানো) সুতরাং আমাদের একমাত্র অবলম্বন হচ্ছে ব্যাচ স্ক্রিপ্টে SETX ব্যবহার করা। .Reg ব্যবহার করা নথিভুক্ত করা / ঠিক কী হচ্ছে তা দেখতে তার মতো শক্ত হিসাবে কম
টনি ইস্টউড

উত্তর:


189

ভেরিয়েবল সেট করতে SETX কমান্ড ('x' প্রত্যয় নোট করুন) ব্যবহার করুন যা সেমিডি উইন্ডোটি বন্ধ হওয়ার পরে অব্যাহত থাকে।

উদাহরণস্বরূপ, "বার" এর মান সহ একটি env var "foo" সেট করতে:

setx foo bar

যদিও আপনি ব্যবহারগুলি ( setx /?) মুদ্রণ করেন তবে প্রদর্শিত 'নোটগুলি' পড়ার পক্ষে এটি মূল্যবান :

২) একটি স্থানীয় সিস্টেমে, এই সরঞ্জামটি দ্বারা তৈরি বা সংশোধিত ভেরিয়েবলগুলি ভবিষ্যতের কমান্ড উইন্ডোগুলিতে পাওয়া যাবে তবে বর্তমান সিএমডি.এক্সএই কমান্ড উইন্ডোতে নয়।

3) একটি রিমোট সিস্টেমে, এই সরঞ্জাম দ্বারা তৈরি বা সংশোধিত ভেরিয়েবলগুলি পরবর্তী লগন সেশনে উপলব্ধ হবে।

পাওয়ারশেলে, [পরিবেশ] :: সেট পরিবেশে পরিবর্তনশীল কমান্ড।


মনে হচ্ছে SETX মত শুধুমাত্র Windows XP SP2 পাওয়া যায়
আর্থার

2
এটি আমার জন্য উইন্ডোজ 7 এ কাজ করেছিল। আপনি উইন্ডোজের কোন সংস্করণ ব্যবহার করছেন?
ভিক ডেভিড

@ জুলেস: আপনি এটি এখন রিসোর্স কিট থেকে পেতে পারেন।
জয়ে

45
এসইটিএক্সের সাথে যত্ন নিন, এটি আপনার চলক দৈর্ঘ্যকে 1024 চর কেটে দেয় ...% পাথ% কে হেরফের করার সময় অত্যন্ত বিপজ্জনক।
এটিয়েন দেসগাগ্ন

2
পাওয়ার শেলটির সাহায্যে আপনি ঠিক [Environment]::SetEnvironmentVariable('PATH', "Whatever you need it to be", "Machine")দেখতে পারেন , এমএসডিএন.মাইক্রোসফট /en-us/library/96xafkes(v=vs.110).aspx
গ্রেডিয়েন্ট

21

বিভিন্ন পরিবেশের জন্য MSDN ডকুমেন্টেশন আপনি বলে কি করতে:

প্রোগ্রামগতভাবে সিস্টেম এনভায়রনমেন্ট ভেরিয়েবলগুলি যুক্ত বা সংশোধন করতে, তাদেরকে HKEY_LOCAL_MACHINE \ সিস্টেম \ কারেন্টকন্ট্রোলসেট \ কন্ট্রোল Manager সেশন ম্যানেজার \ পরিবেশ রেজিস্ট্রি কীতে যুক্ত করুন, তারপরে "পরিবেশ" স্ট্রিংটিতে এলপামের সাহায্যে একটি WM_SETTINGCHANGE বার্তা সম্প্রচার করুন । এটি শেল এর মতো অ্যাপ্লিকেশনগুলিকে আপনার আপডেটগুলি তুলতে অনুমতি দেয়।

এটি করার জন্য অবশ্যই আপনার অবশ্যই প্রশাসনের অধিকারের প্রয়োজন হবে। আমি উইন্ডোজ ব্যাচ থেকে উইন্ডোজ বার্তা সম্প্রচার করার কোনও উপায় জানি না তাই এটি করার জন্য আপনাকে একটি ছোট প্রোগ্রাম লিখতে হবে।


1
ঠিক আছে, সুতরাং আপনার সমাধান বিবেচনা করে, আমি একটি পরিবেশনা ভেরিয়েবল যুক্ত / পরিবর্তন করতে চাইলে একটি রেজিস্ট্রি (.reg) ফাইল তৈরি করেছি। আমি তখন এই ফাইলটি সমস্ত টার্গেট পিসিতে চালাব। আমার আসলে উইন্ডোজ বার্তা প্রেরণের দরকার নেই, কারণ আমি প্রভাবিত হওয়া অ্যাপ্লিকেশনটি পুনরায় চালু করব। ধন্যবাদ।
আর্থার 13

1
আমি এখানে আপনার অন্য উত্তর যোগ করছি যেমন আমি যা খুঁজছেন ঠিক হয় যখন আমি এই প্রশ্নের উপর পদস্খলিত ছিল: stackoverflow.com/a/19705691/3543437
kayleeFrye_onDeck

1
@ ডেভিড, তাহলে setxনীচে প্রতি কেন নয় ?
পেসারিয়ার

আমি মনে করি এই রেজগের কাটা না পাওয়ার এবং পাওয়ারশেল না হওয়ার সুবিধা রয়েছে
এরি0o

2
' SetVar.vbs
Sub sety(wsh, action, typey, vary, value)
  Dim wu
  Set wu = wsh.Environment(typey)
  wui = wu.Item(vary)
  Select Case action
    Case "ls"
      WScript.Echo wui
    Case "del"
      On Error Resume Next
      wu.remove(vary)
      On Error Goto 0
    Case "set"
      wu.Item(vary) = value
    Case "add"
      If wui = "" Then
        wu.Item(vary) = value
      ElseIf InStr(UCase(";" & wui & ";"), UCase(";" & value & ";")) = 0 Then
        wu.Item(vary) = value & ";" & wui
      End If
    Case Else
      WScript.Echo "Bad action"
  End Select
End Sub

Dim wsh, args
Set wsh = WScript.CreateObject("WScript.Shell")
Set args = WScript.Arguments
Select Case WScript.Arguments.Length
  Case 3
    value = ""
  Case 4
    value = args(3)
  Case Else
    WScript.Echo "Arguments - 0: ls,del,set,add; 1: user,system, 2: variable; 3: value"
    value = "```"
End Select
If Not value = "```" Then
  ' 0: ls,del,set,add; 1: user,system, 2: variable; 3: value
  sety wsh, args(0), args(1), UCase(args(2)), value
End If

21
আপনার কোডটি সহ আপনার কিছু প্রসঙ্গ বা ব্যাখ্যা যুক্ত করা উচিত।
অ্যাডামডনসন

1
কোড +1 এর শক্তিশালী টুকরা। এক্সপিতে কাজ করে setx(এবং এটি ইনস্টল করার সম্ভাবনা ছাড়াই)। সাধারণ ব্যবহার (আমার ক্ষেত্রে):wsh.Environment("user").Item("myVar") = "my value"
মেরেক

2
যেহেতু কেউই সমস্যাটি গ্রহণ করেনি, এক্সপি ব্যবহার করার জন্য (কোনও রিসোর্স কিট বা সেটেক্সের প্রয়োজন নেই), সমস্ত (অন্যান্য) ডস উইন্ডোজের জন্য {সেট foo = বার accomp সম্পাদন করতে: ১. উপরের কোডটি সেটওয়্যার.ভিবিএস হিসাবে সংরক্ষণ করুন ২. সেটওয়ার। vbs সেট সিস্টেম foo "বার" নোট, বর্তমান ডস উইন্ডো এ থেকে এফইও পাবেন না। এটি অর্জনের জন্য ইস্যু foo = বার সেট করুন
মাইক্রোসফ্টসহোল্ডবিকিকডইননাটস

2
এছাড়াও নোট করুন, এটি পুনরায় বুট থেকে যায় (যখন আপনি সিস্টেম পারম ব্যবহার করবেন)
মাইক্রোসফ্টসহোল্ডবিকিকডইননাটস

1

প্রকৃতপক্ষে SET TEST_VARIABLE = মান কেবলমাত্র বর্তমান প্রক্রিয়ার জন্য কাজ করে, তাই SETXপ্রয়োজন। স্থায়ীভাবে ব্যবহারকারী পর্যায়ে পরিবেশ পরিবর্তনশীল সংরক্ষণের জন্য একটি দ্রুত উদাহরণ।

  1. সেন্টিমিটারে SETX TEST_VARIABLE etc,। এখনও প্রয়োগ করা হয়নি ( echo %TEST_VARIABLE%দেখায় %TEST_VARIABLE%,
  2. দ্রুত চেক: ওপেন সেন্টিমিডি, echo %TEST_VARIABLE%শো etc
  3. জিইউআই চেক: সিস্টেমের বৈশিষ্ট্য -> উন্নত -> পরিবেশের ভেরিয়েবল -> এর জন্য ব্যবহারকারীর ভেরিয়েবলগুলি -> আপনার মান সহ ভেরিয়েবল TEST_VARIABLE দেখতে হবে etc

0
:: Sets environment variables for both the current `cmd` window 
::   and/or other applications going forward.
:: I call this file keyz.cmd to be able to just type `keyz` at the prompt 
::   after changes because the word `keys` is already taken in Windows.

@echo off

:: set for the current window
set APCA_API_KEY_ID=key_id
set APCA_API_SECRET_KEY=secret_key
set APCA_API_BASE_URL=https://paper-api.alpaca.markets

:: setx also for other windows and processes going forward
setx APCA_API_KEY_ID     %APCA_API_KEY_ID%
setx APCA_API_SECRET_KEY %APCA_API_SECRET_KEY%
setx APCA_API_BASE_URL   %APCA_API_BASE_URL%

:: Displaying what was just set.
set apca

:: Or for copy/paste manually ...
:: setx APCA_API_KEY_ID     'key_id'
:: setx APCA_API_SECRET_KEY 'secret_key'
:: setx APCA_API_BASE_URL   'https://paper-api.alpaca.markets'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.