সেটেক্সের সাহায্যে 1024 অক্ষর সীমা অতিক্রম করে


73

আমি setxনিম্নলিখিত কমান্ডটি ব্যবহার করে পরিবেশের ভেরিয়েবলগুলি সেট করার চেষ্টা করছি am

setx PATH "f: \ সাধারণ সরঞ্জাম \ git \ bin; f: \ সাধারণ সরঞ্জাম \ পাইথন \ অ্যাপ্লিকেশন বিন; এফ: \ Borland \ BCC55 \ বিন;% পাথ% "

তবে, মানটি 1024 টি অক্ষরের চেয়ে বেশি হলে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

সতর্কতা: সংরক্ষণ করা হচ্ছে এমন ডেটা 1024 টি অক্ষরে কেটে গেছে।

ব্যর্থতা: নির্দিষ্ট মানটি সংরক্ষণ করা হয়েছিল।

তবে শেষের কয়েকটি পথ চলকতে সংরক্ষণ করা হয় নি, ত্রুটিটি প্রস্তাবিত হওয়ার সাথে সাথে অক্ষর সীমাবদ্ধতার কারণে আমার ধারণা।


সেখানে বিকল্প উপায় সম্পাদনা করতে হল তার একটি তালিকা %PATH%superuser.com/questions/297947
Ehtesh চৌধুরী

1
দেখব রাপিড পরিবেশ সম্পাদক আপনি (আপনার কাছে একটি ব্যাকআপ এছাড়াও সংরক্ষণ করতে পারেন) গ্রাফিক্যালি সব envirnoment ভেরিয়েবল সম্পাদনা করতে দেয় পারে।
ja72

3
অন্য কেউ কি এই দাবি সাফল্যের দ্বারা বিরক্ত হচ্ছে যখন এটি স্পষ্টভাবে অনুরোধ করা হয়নি? পথটি ঠিক কীভাবে রেখে যাওয়ার সময় এটি ব্যর্থ হয় না এমন সমস্যা হয় না?
চাদ শোগগিন্স

এটি এখনও উইন্ডোজ 10 এ ছাঁটাই করে?
কাপলিনেটর

1
হ্যাঁ, এটি উইন্ডোজ 10
ইভান

উত্তর:


48

আপনার সেরা বাজি সরাসরি রেজিস্ট্রি সম্পাদনা করা হয়।

নেভিগেট করুন HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environmentএবং Pathমানটি সম্পাদনা করুন (তারপরে নতুন মানটি সক্রিয় করতে পুনরায় বুট করুন)।

তবে নোট করুন যে আপনি যখন খুব দীর্ঘ পথে প্রবেশ করতে পারেন, (সর্বাধিক পরিবেশের পরিবর্তনশীল দৈর্ঘ্য; উত্স অনুসারে 2,048 বা 32,768 বাইট), সমস্ত সফ্টওয়্যার এটি খুব দীর্ঘ হলে সঠিকভাবে এটি পড়তে এবং হ্যান্ডেল করতে সক্ষম হবে না।


1
সত্যিই কি এখানে পুনরায় বুট করা দরকার? সেটেক্স কীভাবে এটি করে? সেটেক্সের পুনরায় বুটের প্রয়োজন হয় না।
মধুর আহুজা

11
হ্যাঁ, একটি রিবুট প্রয়োজন। setxআমি উল্লিখিত হিসাবে রেজিস্ট্রি সম্পাদনা করে, তারপর একটি WM_SETTINGCHANGEবার্তা সম্প্রচারিত । এটি সমস্ত শীর্ষ-স্তরের উইন্ডোকে বলে যে একটি সিস্টেম সেটিংস পরিবর্তিত হয়েছে (এই ক্ষেত্রে পরিবেশ পরিবর্তনশীল)) এটি ছাড়া, আপনি এটি দিয়ে খোলার এক্সপ্লোরার এবং প্রোগ্রামগুলি পরিবর্তন সম্পর্কে জানতে পারবেন না। আপনি নিজেই বার্তাটি সম্প্রচারিত করতে পারেন (আমি ঠিক এটি করার জন্য একটি প্রোগ্রাম লিখেছি এবং প্রতিস্থাপনের জন্য একটি ব্যাচ ফাইল SETXযা ব্রডকাস্টারের পরে একটি রেজিস্ট্রি সম্পাদনা করে) তবে ঠিক যেমন setxএবং সিস্টেম প্রোপার্টি এনভ্যাভার ডায়ালগের পার্শ্ব-প্রতিক্রিয়া রয়েছে পুনরায় বুট করা পছন্দনীয় করুন।
Synetech

2
ওহ এবং একটি env.var সম্পাদনা করছি। আপনি রিবুট না করলে আসলে সমস্যা দেখা দেয় কারণ অন্যান্য ভেরিয়েবলগুলি যুক্ত কোনও পরিবেশের ভেরিয়েবলগুলি প্রসারিত হওয়া বন্ধ করবে। উদাহরণস্বরূপ, আমি এটা সম্প্রচার এবং এখন এই আমার পথ নেই এবং কারণ পাথ এখন "ভাঙা" / খালি আমি কোনো ত্রুটির সম্মুখীন হয়েছেন। আমি রিবুট না হওয়া পর্যন্ত কোনওটিই আবার ভালভাবে প্রসারিত হবে না। দুর্ভাগ্যক্রমে এটি "স্বাভাবিক"। :-|
Synetech

3
আমি একটি ছোট পাওয়ারশেল স্ক্রিপ্ট পেয়েছি যা WM_SETTINGCHANGE বার্তা সম্প্রচার করবে।
জাস্টিন প্রিয়

10
আপনি আরইজি অ্যাড কমান্ডের মাধ্যমে উপরের রেজিস্ট্রি পদ্ধতিটি ব্যবহার করতে পারেন এবং তারপরে নিজের কাছে কিছু অন্যান্য ভেরিয়েবল সেট করতে SETX ব্যবহার করতে পারেন (যেমন: SETX / M USERNAME% USERNAME%)। এর ফলে ডাব্লুএম_সেটটিংচেঞ্জ বার্তা সেট হয়ে যাবে এবং ব্যাচের ফাইল থেকে আপনার পথ নির্ধারণের ক্ষমতা প্রদান করবে।
আর্ট

29

যদি আপনি উইন্ডো ভিস্তা বা উচ্চতর ব্যবহার করে থাকেন তবে আপনি symbolic linkফোল্ডারে একটি করতে পারেন । উদাহরণ স্বরূপ:

mklink /d C:\pf "C:\Program Files"
mklink /d C:\pf86 "C:\Program Files (x86)"

একটি লিঙ্ক তৈরি করবে তাই c:\pfআপনার প্রোগ্রাম ফাইল ফোল্ডার হবে। আমি এই কৌশলটি ব্যবহার করে আমার পথ থেকে 300 টি চরিত্রের ছাঁটাই করেছি।

(আমি জানি এটি সেটেক্সের সাথে সম্পর্কিত নয় তবে এটি এমন লোকদের জন্য দরকারী যা 1024 চর সীমাতে ওভার কমিং অনুসন্ধান করছে)


18

আপনি নিম্নলিখিত পাওয়ার মতো একটি পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করতে পারেন:

$newPath = 'f:\common tools\git\bin;f:\common tools\python\app;f:\common tools\python\app\scripts;f:\common tools\ruby\bin;f:\masm32\bin;F:\Borland\BCC55\Bin'
$oldPath = [Environment]::GetEnvironmentVariable('path', 'machine');
[Environment]::SetEnvironmentVariable('path2', "$($newPath);$($oldPath)",'Machine');

Environment.SetEnvironmentVariable () API কল প্রচার করবে WM_SETTINGCHANGEযাতে আপনি পুনরায় বুট করার প্রয়োজন হবে না।


আপনার নীচের লাইনেরও দরকার নেই: [পরিবেশ] :: সেটএইনভার্ভেটিভেরিয়েবল ('পথ', "P নতুনপথ", 'মেশিন');
ফেডার স্টিমন

1
তৃতীয় লাইনে, আমি নিশ্চিত নই যে অতিরিক্ত ডলারের লক্ষণ এবং প্রথম বন্ধনী কী লাভ করবে। তুমি [Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')কি বলতে পার না ?
twasbrillig

1
@ টিটসব্রিলিগ যখন আমি একটি স্ট্রিংয়ে ভেরিয়েবল অন্তর্ভুক্ত করি তখন আমি ঠিক যত্নবান। এই ক্ষেত্রে এটি অপ্রয়োজনীয়।
জাস্টিন প্রিয়ঙ্ক

3
আপনি অ্যাডমিনিস্ট্রেটর কমান্ড প্রম্পট থেকে এটি কল করতে পারেন:@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
সি

7

এই ওপেন-সোর্স সেটইএনভি কমান্ড-লাইন সরঞ্জামটি সীমাবদ্ধতা ছাড়াই PATH এবং অন্যান্য পরিবেশের ভেরিয়েবলগুলি সম্পাদনা করা ভাল। এটি ডায়নামিক বাফার ব্যবহার করে সুতরাং 1024 এর মতো স্থির সীমাবদ্ধতা নেই।

http://www.codeproject.com/Articles/12153/SetEnv

একটি ভেরিয়েবলের সাথে যুক্ত করার জন্য একটি উপসর্গ হিসাবে% এর পছন্দটি আরও ভাল হতে পারে, কারণ বাকী বাক্যটিকে স্থানীয় ব্যাখ্যার সাথে যদি কখনও কখনও ব্যবহার করা হয় ...


> SetEnv সরঞ্জামটি সীমাবদ্ধতা ছাড়াই PATH এবং অন্যান্য পরিবেশের ভেরিয়েবলগুলি সম্পাদনা করা ভাল । প্রকৃতপক্ষে, আমি সেটেনেভকে আরও উন্নত করতে সহায়তা করার জন্য ব্যক্তিগতভাবে সেই পৃষ্ঠায় ডারকার সাথে কাজ করেছি যাতে এটি সম্প্রসারণ / উপ-ভেরিয়েবলগুলি (ডায়নামিক ভেরিয়েবল এক্সপেনশন বিভাগ) সম্পূর্ণরূপে সমর্থন করতে পারে যা কাঁচা পথের দৈর্ঘ্য হ্রাস করতে সহায়তা করে ।
Synetech

4

পাথ ম্যানিপুলেশনের জন্য সেটেক্সের চেয়ে অনেক উন্নত একটি সরঞ্জাম হ'ল প্যাশেড.এক্সে । দুর্ভাগ্যক্রমে, এটি পথ সম্পাদনার মধ্যে সীমাবদ্ধ।

সেটেক্সের চেয়ে উচ্চতর ব্যবহারকারীর অভিজ্ঞতা ছাড়াও আপনার 1024 বর্ণের সীমা নেই। সরাসরি রেজিস্ট্রি ম্যানিপুলেশন থেকে পৃথক, এই অ্যাপ্লিকেশনটি পরিবেশ.সেট পরিবেশে পরিবর্তনশীল () API কল ব্যবহার করে যা সম্প্রচার করবে WM_SETTINGCHANGE


2
Superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7
এহতেশ চৌধুরী


2

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


আপনি যদি ব্যবহার করে থাকেন তবে সাবধান হন fsutil.exe behavior set disable8dot3 1
অ্যান্ড্রু মর্টন

@ অ্যান্ড্রুমার্টন ভাল পয়েন্ট তবে স্ক্রিপ্টটি 8.3 নামটি "জেনারেট" করে না, তা কি "হ্যান্ডেল" করা হবে না, এটি কেবলমাত্র ফাইল সিস্টেম দ্বারা নির্ধারিত 8.3 নামটির রিপোর্ট করে? সুতরাং যদি কোনও ফোল্ডারে একটি 8.3 নাম না থাকে তবে স্ক্রিপ্টটির বিকল্পের প্রস্তাব দেওয়া হবে না। তবে fsutil 8dot3name stripস্ক্রিপ্টটি ব্যবহারের পরে এফেক্টর ব্যবহার করলে প্রভাবিত ফোল্ডারগুলিতে অবশ্যই সমস্যা দেখা দেবে।
অ্যান্ড্রু স্টিৎজ

দুর্ভাগ্যক্রমে আমার এটি পরীক্ষা করার জন্য অতিরিক্ত ড্রাইভ বা সিস্টেম নেই system তবে, fsutil 8dot3name stripআজ আগে কিছুটা ব্যবহার করে এবং (ক) এটি প্রথমে রেজিস্ট্রি পরীক্ষা করে এবং (খ) পাথরটি রেজিস্ট্রিতে সঞ্চিত রয়েছে তা বিবেচনা করে আমার পূর্বের উদ্বেগটি অনিচ্ছাকৃত হতে পারে, যতক্ষণ না ব্যবহারকারী /f(জোর) বিকল্পটি ব্যবহার না করে ।
অ্যান্ড্রু মর্টন

2

আপনি আপনার বিএটিতে এই লাইনটি রাখতে পারেন:

setx path "%%path%%;c:\drive\fr;c:\drive\installs\7z"

ডাবল দেখুন %%

(তথ্যসূত্র: https://support.microsoft.com/en-us/kb/75634 )


লিঙ্কটি এখন ভেঙে গেছে
ইভান

1
সতর্কবার্তা! এটি সম্ভবত জিনিসগুলি ভেঙে ফেলবে, এটি %path%;c:\...[snip]...\7zব্যবহারকারী pathভেরিয়েবলকে লিখবে , আপনার যা কিছু ছিল তা ফেলে দেবে।
ইউজিন পেট্রভ

প্রোগ্রামগুলির দ্বারা ব্যবহৃত PATH পরিবেশ পরিবর্তনশীল হ'ল মেশিন এবং স্থানীয় PATH ভেরিয়েবলগুলির সংমিশ্রণ। স্থানীয় পথে বর্তমান ডেটা ধ্বংস করার পাশাপাশি আমি মনে করি এটি কিছু করে না। %path%স্থানীয় পথের পরিবেশে পরিবর্তনশীল থাকার কোনও প্রভাব নেই।
আনান

0

যদি সিস্টেম PATH এবং ব্যবহারকারী PATH পৃথক রাখার প্রয়োজন হয় না:

::setx /m truncate variable length to 1024 REG ADD 
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH /t REG_SZ /f /d "%PATH%"
::empty local path, use system wide only, else it will enlarge with every setx /m
setx PATH ""
::setx is dummy but propagate system wide variables with it
setx /m A A

1
আপনি এখানে পরামর্শ দিচ্ছেন সে সম্পর্কে আপনি আরও কিছুটা ব্যাখ্যা করতে পারেন?
জি ম্যান

সেটাকে 1024 অক্ষরের সীমা নির্ধারণের জন্য কমান্ডটি ব্যবহারের জন্য প্রস্তুত। উদাহরণ সরাসরি PATH ভেরিয়েবলে প্রদর্শিত হয়। পূর্ববর্তী উত্তরগুলি সহায়ক হলেও এগুলির চূড়ান্ত সমাধানের অভাব রয়েছে।
চমত্কার

0

আমি মনে করি সেরা উপায়টি পরের (পাওয়ারশেল সহ) এই পদ্ধতিতে আপনি 1024 অক্ষরের লিটমিট এড়াতে পারেন।

আপনি কোডটি দেখতে পাবেন: https://gist.github.com/drazul/b92f780689bd89a0d2a7

#------------ Add path to system variable -------------------------------------

$path2add = ';C:\path;'
$systemPath = [Environment]::GetEnvironmentVariable('Path', 'machine');

If (!$systemPath.contains($path2add)) {
    $systemPath += $path2add
    $systemPath = $systemPath -join ';'
    [Environment]::SetEnvironmentVariable('Path', $systemPath, 'Machine');
    write-host "Added to path!"
    write-host $systemPath
}

#------------ Delete path from system variable --------------------------------

$path2delete = 'C:\path;'
$systemPath = [Environment]::GetEnvironmentVariable('Path', 'machine');

$systemPath = $systemPath.replace($path2delete, '')
$systemPath = $systemPath -join ';'

[Environment]::SetEnvironmentVariable('Path', $systemPath, 'Machine');

write-host "Deleted from path!"
write-host $systemPath

#------------ Clean system variable -------------------------------------------

$systemPath = [Environment]::GetEnvironmentVariable('Path', 'machine');

while ($systemPath.contains(';;')) {
    $systemPath = $systemPath.replace(';;', ';')
}

[Environment]::SetEnvironmentVariable('Path', $systemPath, 'Machine');

write-host "Cleaned path!"
write-host $systemPath
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.