উইন্ডোজ cmd.exe এ একই কমান্ড লাইনের মধ্যে ভেরিয়েবল সেট করা এবং ব্যবহার করা


75

বাশ-এ, আমি এটি করতে পারি EDITOR=vim commandএবং সেট commandদিয়ে চালানো হবে তবে এটি শেলের নিজেই মানটিকে প্রভাবিত করবে না । এটি কি এটি করা সম্ভব ?EDITORvimEDITORcmd.exe

উত্তর:


52

নোট যে cmd /C "set "EDITOR=vim" && echo %EDITOR%"কাজ করবে না।
বা হবে নাcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"

ডিলিমিটার হিসাবে /Vবিলম্বিত পরিবেশের পরিবর্তনশীল প্রসারণ সক্ষম করতে বিকল্পটি কী হবে !

C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim

হিসাবে নীচের লক্ষনীয় দ্বারা maoizm , এটা cmd /V /C, না cmd /C /V (যা হবে না কাজ)


আমি কোনও বাস্তবিক কারণের কথা ভাবতে পারি না যা আপনি আসলে কোনও একক আদেশের প্রসঙ্গেই চাইবেন want

সাধারণত, আপনার যখন এটি দীর্ঘ কমান্ড লাইনে একাধিকবার ব্যবহৃত মান প্রতিস্থাপন করতে হয় তখন আপনার প্রয়োজন হয়।
উদাহরণস্বরূপ, নেক্সাসে একটি ফাইল স্থাপন (পাঠযোগ্যতার জন্য একাধিক লাইনে):

cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
           mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
           -Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
           -DrepositoryId=nexus 
           -Durl=http://myserver/nexus/content/repositories/my-repo/"

একটি দীর্ঘ এবং জটিল কমান্ড লাইনে গ্রুপ, আর্টিফ্যাক্ট (2 বার ব্যবহৃত) এবং সংস্করণ প্রতিস্থাপনের পরিবর্তে আপনি উক্ত কমান্ডের শুরুতে এগুলি সম্পাদনা করতে পারবেন । প্যারামিটারের মানগুলি পরিচালনা ও পরিবর্তন করা আরও পরিষ্কার / সহজ।


1
এটি আমার মেশিনে উইন্ডোজ 10 সংস্করণ 1607 দিয়ে পরীক্ষা করেছেন, সেন্টিমিডি প্রম্পট ক্র্যাশ হয়েছে।
ফার্নান্দো কস্তা বার্টোল্ডি

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

@ জিতরেক্স ঠিক! আমি সেই অনুযায়ী উত্তরটি সম্পাদনা করেছি।
ভনসি

1
এনবি: আকর্ষণীয়: এই ক্ষেত্রে স্যুইচিংয়ের ক্রমটি গুরুত্বপূর্ণ। cmd /v/c "..." কাজ করে, তবে cmd /c/v "..."ব্যর্থ হয় - আশা করি এটি আপনাকে 15 মিনিট বাঁচাতে পারে
maoizm

1
@ ডেরেকগ্রিয়ার "আমি কোনও ব্যবহারিক কারণ সম্পর্কে ভাবতে পারি না": ঠিক আছে, আমি একটি বাস্তব কারণ যুক্ত করার জন্য উত্তরটি সম্পাদনা করেছি।
ভোনসি

50

আপনি উইন্ডোতে এটি করতে পারেন কোনও কিছু ইনস্টল করার প্রয়োজন নেই।

cmd /C "set EDITOR=vim && set"

আপনি ভেরিয়েবলের একটি তালিকা দেখতে পাবেন এবং আপনি EDITOR = vim দেখতে পাবেন, এখন আবার "সেট" চালান এবং এটি তালিকাভুক্ত হবে না।

অতিরিক্ত কমান্ড যুক্ত করতে আপনি একাধিক && এর কাজ করতে পারেন:

cmd /C "set EDITOR=vim && do this && do that && otherstuff"

সম্পাদনা: / সি চালানোর পরে সরাসরি নতুন সেন্টিমিডিটি প্রস্থান করে, আপনি যদি নতুনটির সাথে আউটপুট উত্পাদন করেন তবে এটি প্যারেন্ট উইন্ডোতে দৃশ্যমান হবে।

আপনি / কে ব্যবহার করতে বেছে নিতে পারেন যে ক্ষেত্রে নতুন সেন্টিমিডি উইন্ডো রান শেষে খোলা থাকে।


5
সাবধান হও. ভেরিয়েবলটি এভাবে নির্ধারণের ফলে ভেরিয়েবল EDITOR এর মধ্যে একটি ট্রেলিং স্থান তৈরি হবে: "vim"। পিছনের স্থান ব্যবহার এড়াতে: সেন্টিমিডি / সি "EDITOR = vim" সেট করুন & এটি করুন & করুন "
গার্ড কে

1
উদাহরণস্বরূপ এটি "উইন্ডোজ সার্ভার ২০০৮" তে কাজ করছে না। আমি এটি চেষ্টা করেছিলাম: সেট নাম = "ব্যবহারকারীর নাম" & & প্রতিধ্বনি% ব্যবহারকারী নাম%। এবং ব্যবহারকারীর নাম খালি।
আকোজিন

@akozin আপনি কি বুঝতে পেরেছেন যে আপনি মূল মূল্য পিছনে পেয়েছেন? মানে set name=foo&&echo %name%নাকি set username=foo&&echo %username%?
ফ্রেগজ


7

আপনি envGnuWin32 http://gnuwin32.sourceforge.net/ এ প্যাকেজ CoreUtils থেকে পোর্টেড ব্যবহার করতে পারেন

  1. এটি সেটআপ করুন
  2. env.exe% PATH% ভেরিয়েবলের সাথে উপস্থিত ডিরেক্টরিটি পরীক্ষা করুন
  3. লিনাক্স সংস্করণের মতো একইভাবে ব্যবহার করুন env EDITOR=vim command

সম্ভবত বলার অপেক্ষা রাখে না যদি আপনার কাছে গিট / ডকার / এমএসএস / সাইগউইন থাকে তবে আপনার ইতিমধ্যে এটির একটি সংস্করণ থাকবে।
xenoterracide

3

আমি একটি ব্যাচ ফাইলটি নকিয়া করেছি env.cmdযা লিনাক্স envকমান্ডের মতো কমবেশি কাজ করে :

echo off
setlocal
for %%f in (%*) do (
  echo %%f|find "=" >nul:
  if errorlevel 1 goto DoCmd
  set %%f
  shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal

পার্থক্যটি হ'ল cmdপার্স করার কারণে , পরিবেশের অ্যাসাইনমেন্টগুলি উদ্ধৃত করা দরকার, সুতরাং আপনার আদেশটি হ'ল :

env "EDITOR=vim" command [up to 8 parameters]

forলুপের মধ্যে কমান্ড স্ট্রিং তৈরি করে 8-প্যারামিটার সীমাবদ্ধতা অপসারণ করতে ব্যাচ ফাইলটি বিস্তারিতভাবে ব্যাখ্যা করা যেতে পারে (বিলম্বিত সম্প্রসারণের প্রয়োজন হবে)।


খুব দীর্ঘ ব্যবহারকারীর আদেশের জন্য কেন কেবল %*পেনাল্টিমেট লাইন (যেমন, :DoCmdলেবেলের পরে এক ) হিসাবে ব্যবহার করবেন না?
স্কট

@Scott - কারণ %*হল মূল প্যারামিটার তালিকা: এটা দ্বারা প্রভাবিত হয় shift(অসদৃশ $*ইউনিক্স মধ্যে)।
এএফএইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.