সিএমডি: ডুপ্লিকেট না করে পথের সাথে যুক্ত?


12

একটি CMDসেশনের জন্য আমি সহজেই একটি নতুন পথ নির্ধারণ করতে পারি:SET PATH=%PATH%;"insert custom path here"

ব্যাচ ফাইলে এটি করা কাস্টম পাথ ইতিমধ্যে অন্তর্ভুক্ত রয়েছে কিনা তা বিবেচনা করে না। আমি কীভাবে এটির সদৃশতা এড়াতে পারি (যেমন এটি ইতিমধ্যে "PATH" স্ট্রিংয়ে রয়েছে কিনা তা পরীক্ষা করে দেখুন)।

মন্তব্য:

  1. সম্পর্কিত: আমি কীভাবে উইন্ডোজ 7 এর সিস্টেম ভেরিয়েবল PATH- র সাথে ব্যবহারকারী-সংজ্ঞায়িত পরিবেশের ভেরিয়েবল যুক্ত করব?
  2. সম্পর্কিত: আমি কীভাবে স্থায়ীভাবে কমান্ড লাইনের মাধ্যমে সিস্টেমের PATH ভেরিয়েবলের প্রবেশের জন্য যুক্ত করতে পারি?
  3. ইউনিক্সের জন্য একই প্রশ্ন: ডিরেক্টরিটি ইতিমধ্যে সেখানে না থাকলে $ PATH এ যুক্ত করুন
  4. কিছু "সিএমডি" স্ট্রিং অপ্স ব্যাখ্যা করেছেন: http://ss64.com/nt/syntax-replace.html

এটি উল্লেখ করা উচিত যে এই প্রসঙ্গে, সদৃশটি নিরীহ is এটিকে এড়াতে এবং মিথ্যা ধনাত্মক হওয়ার ঝুঁকিটি প্রবর্তনের চেয়ে অনুলিপিটি ঘটানোর অনুমতি দেওয়া আরও বোধগম্য হবে।
হ্যারি জনস্টন

উত্তর:


14

ম্যাডহ্যাকার্স উত্তরগুলির মতো, আরও কমপ্যাক্ট।
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np%আপনার নতুন পথটি অবশ্যই এর পরিবর্তে আপনি আক্ষরিক ব্যবহার করতে পারেন। এটি কী করে: echo %path%|find /i "%np%">nulআউটপুট বাতিল করে স্ট্রিংয়ের জন্য বিদ্যমান পথ অনুসন্ধান করে arding ||ব্যর্থতায় মৃত্যুদণ্ড কার্যকর করা, সুতরাং এর অর্থ: যুক্ত হওয়া স্ট্রিংয়ের জন্য অনুসন্ধানের পথ এবং যদি খুঁজে পাওয়া না যায় তবে এটি যুক্ত করুন।

সম্পাদনা: সাধারণত পাথগুলি এমনকি এমন কন্টিনগ স্পেসের উদ্ধৃতি দেওয়ার প্রয়োজন হয় না, তবে আপনি যদি সেগুলি উদ্ধৃত করতে চান তবে এই সংস্করণটি দ্বিগুণ উদ্ধৃত পাথের সাথে কাজ করবে:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

সম্পাদনা: পরিবর্তিত findstr /i /c:করতে find /iযেমন findstrযেমন মন্তব্য KubaOber দ্বারা লক্ষনীয় কিছু সিকোয়েন্স ভুল ব্যাখ্যা হতে পারে


ভাল লাগল, আমি জানতাম যে এটি করার একটি পরিষ্কার উপায় আছে ... তবুও বাশ পছন্দ করে তবে আমি কেবল: ডি সহায়তার জন্য ধন্যবাদ!
ম্যাডহ্যাকার

চমৎকার, তবে এটি কি ফাঁকা জায়গাগুলির সাথে কাজ করে? আমি এটি আমার নির্দিষ্ট পাথ দিয়ে পরীক্ষা করেছি, একটি "উদ্ধৃত এবং স্পেস সহ" পুনরায় যুক্ত হয়। একটি মাত্র উদ্ধৃত হয়েছে তবে কোনও স্পেস কাজ করছে বলে মনে হচ্ছে না।
হোর্স্ট ওয়াল্টার

1
@ হার্স্টওয়াল্টার হ্যাঁ এটি যে কোনও পথ নিয়ে কাজ করা উচিত (আমি সবেমাত্র কিছু জায়গাগুলি সহ পরীক্ষা করেছি)। "উদ্ধৃত" বলতে কী বোঝ? পাথগুলিতে আপনার এমনকি কোটগুলি ব্যবহার করার প্রয়োজন নেই even যদি আপনার %np%কোটগুলি থাকে - হ্যাঁ, এটি এতে খারাপ আচরণ করবে।
wmz

2
আমার প্রথম পাতা দেখুন এটি কেবলমাত্র যদি আপনি ভেরিয়েবল ব্যবহার করেন, আক্ষরিক (যেমন হিসাবে echo %path%|findstr /i /c:"my path">nul || set path=%path%;"my path") ব্যবহার করে ভাল কাজ করা উচিত fine
wmz

1
@ ডব্লিউএমজেড echo d\. | findstr /c:"d\."ব্যর্থ হয়েছে, তবে echo d\. | find "d\."সফল হয়
মনিকা ১৯

4

আমি জানি এটি নোংরা, তবে এটি কাজ করা উচিত:

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')

%checkstr%PATH এ যাচাই করার জন্য স্ট্রিংটি কোথায় %newpath%এবং বর্তমান প্যাথ-এ সংযুক্ত করার জন্য নতুন PATH

আশা করি এটি সহায়তা করে এবং আমি নিশ্চিত একটি সহজ উপায় আছে তবে এটি এখনকার কৌশলটি করা উচিত।

সম্পাদনা

সুতরাং আপনি যদি উইন্ডোজে ইউনিক্স সরঞ্জামগুলি যুক্ত করতে না চান তবে আপনি এই ব্যাচের বাক্য গঠনটি চেষ্টা করতে পারেন:

echo %PATH% | find /C /I "<string to find>" > out.txt 
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt

উঘ, কোনও পূর্বপুরুষ নয় এবং যদি আপনি পাইপযুক্ত সন্ধানের আদেশটি যদি বিবৃতিতে সাবকম্যান্ড হিসাবে কাজ করতে পারেন তবে এক লাইনের মতো করা যাবে ...


2

"Wmz" দ্বারা উত্তরের উপর ভিত্তি করে স্ক্রিপ্ট:

@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.