একটি উইন্ডোজ ব্যাচ ফাইলে একটি কমান্ডের ফলাফলের সাথে একটি ভেরিয়েবলের মান সেট করুন


99

কোনও কমান্ডের ফলাফল হিসাবে কোনও ভেরিয়েবলের মান সেট করতে বাশ পরিবেশে কাজ করার সময় , আমি সাধারণত:

var=$(command -args)

varকমান্ড দ্বারা পরিবর্তনশীল সেট করা হয় যেখানে command -args। আমি তখন সেই পরিবর্তনশীল হিসাবে অ্যাক্সেস করতে পারি $var

এটি করার আরও একটি প্রচলিত উপায় যা প্রায় প্রতিটি ইউনিক্স শেলের সাথে সামঞ্জস্যপূর্ণ:

set var=`command -args`

এটি বলেছিল, একটি উইন্ডোজ ব্যাচ ফাইলের কমান্ডের ফলাফলের সাথে আমি কীভাবে একটি ভেরিয়েবলের মান সেট করতে পারি ? আমি চেষ্টা করেছিলাম:

set var=command -args

তবে আমি দেখতে পেয়েছি যে কমান্ড আউটপুট চেয়ে varসেট করা আছে command -args

উত্তর:


63

জেসি যা বর্ণনা করে তা করতে , একটি উইন্ডোজ ব্যাচ ফাইল থেকে আপনার লিখতে হবে:

for /f "delims=" %%a in ('ver') do @set foobar=%%a 

তবে আমি এর পরিবর্তে আপনার উইন্ডোজ সিস্টেমে সাইগউইন ব্যবহারের পরামর্শ দিচ্ছি যদি আপনি ইউনিক্স-টাইপ স্ক্রিপ্টিং ব্যবহার করেন।


19
for /f "delims=" %a in ('ver') do @set foobar=%aকমান্ড প্রম্পটে ব্যবহার করুন। for /f "delims=" %%a in ('ver') do @set foobar=%%aস্ক্রিপ্ট ফাইলগুলিতে ব্যবহার করুন
জর্জি

একটি হালকা ওজনের বিকল্প হ'ল উইন্ডোজ অন gnu ( github.com/bmatzelle/gow/wiki )। কেবল একটি কমান্ড প্রম্পট খুলুন এবং রান করুন bash। তারপরে আপনি bash কমান্ড লিখতে পারেন। আপনি বাশ স্ক্রিপ্টগুলিও কার্যকর করতে পারেন।
নাথান

4
মনে রাখবেন যে আপনার কমান্ডটিতে যদি পাইপ অন্তর্ভুক্ত থাকে তবে আপনার এটি একটি ক্যারেটের সাথে পালাতে হবে, উদাহরণস্বরূপ: / f "delims =" %% a in ('প্রতিধ্বনি foobar ^ | sed -es / foo / fu /') do @ সেট করুন foobar = %% a
yoyo

35

উইন্ডোজ ব্যাচ কমান্ডের পরে থেকে কিছুটা সাবধান হওয়া দরকার:

for /f "delims=" %%a in ('command') do @set theValue=%%a

ইউনিক্স শেল স্টেটমেন্টের মতো শব্দার্থক শব্দগুলি নেই:

theValue=`command`

কমান্ডটি ব্যর্থ হয়েছে এমন ক্ষেত্রে বিবেচনা করুন, একটি ত্রুটি ঘটায়।

ইউনিক্স শেল সংস্করণে, "theValue" তে অ্যাসাইনমেন্টটি এখনও উপস্থিত থাকে, পূর্বের কোনও মান খালি মানের সাথে প্রতিস্থাপন করা হয়।

উইন্ডোজ ব্যাচ সংস্করণে, এটি "ফর" কমান্ড যা ত্রুটি পরিচালনা করে এবং "কর" ধারাটি কখনই পৌঁছায় না - সুতরাং "দ্য ভ্যালু" এর আগের কোনও মান বজায় থাকবে।

উইন্ডোজ ব্যাচ স্ক্রিপ্টে আরও ইউনিক্সের মতো শব্দার্থকতা পেতে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে অ্যাসাইনমেন্টটি ঘটেছে:

set theValue=
for /f "delims=" %%a in ('command') do @set theValue=%%a

ইউনিক্স স্ক্রিপ্টটিকে উইন্ডোজ ব্যাচে রূপান্তর করার সময় ভেরিয়েবলের মান সাফ করতে ব্যর্থ হওয়া সূক্ষ্ম ত্রুটির কারণ হতে পারে।


4
উইন্ডোজ এবং * নিক্সের মধ্যে সূক্ষ্ম পার্থক্য ব্যাখ্যা করার জন্য ধন্যবাদ।
জেরোয়েন ওয়েয়ার্ট প্লুমাইমারস

4
এছাড়াও কোনও বিশেষ চরিত্রের পালাতে ভুলবেন না command; উদাহরণ: for /f "delims=" %%a in ('command1 ^| command2') do set VAR=%%a
বিল_সেটওয়ার্ট

@ বিল_সেটওয়ার্ট আপনি সবেমাত্র আমার দিনটি বাঁচিয়েছিলেন, এক মুহুর্তের জন্য আমি ভেবেছিলাম যে ভেরিয়েবলের কাছে পাইপযুক্ত কমান্ডগুলির আউটপুট নির্ধারণ করা আরও কঠিন
মিঃব্রোডি

20

আমার ব্যাচ ফাইলে যখন ডেটাবেস ক্যোয়ারীর ফলাফলের প্রয়োজন হবে তখন আমি এটি কীভাবে করব:

sqlplus -S schema/schema@db @query.sql> __query.tmp
set /p result=<__query.tmp
del __query.tmp

কীটি 2 পংক্তিতে রয়েছে: "সেট / পি" "ফলাফল" এর মান "<__" পুনঃনির্দেশ অপারেটরের মাধ্যমে "__query.tmp" এ প্রথম লাইনটির (শুধুমাত্র) মান নির্ধারণ করে।


16

আপনি যদি এটি করেন তবে কেবলমাত্র এটিই আমি দেখেছি:

for /f "delims=" %a in ('ver') do @set foobar=%a

ver উইন্ডোজের সংস্করণ কমান্ড এবং আমার সিস্টেমে এটি উত্পন্ন করে:

Microsoft Windows [Version 6.0.6001]

সূত্র


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