উইন্ডোজ সিএমডি-তে, আমি কীভাবে ব্যবহারকারীর ইনপুটটির অনুরোধ করব এবং ফলাফলটি অন্য আদেশে ব্যবহার করব?


397

আমার কাছে একটি উইন্ডোজ .bat ফাইল রয়েছে যা আমি ব্যবহারকারীর ইনপুট গ্রহণ করতে এবং তারপরে অতিরিক্ত কমান্ডের কল হিসাবে সেই ইনপুটটির ফলাফলগুলি ব্যবহার করতে চাই।

উদাহরণস্বরূপ, আমি ব্যবহারকারীর কাছ থেকে একটি প্রক্রিয়া আইডি গ্রহণ করতে চাই এবং তারপরে সেই আইডিটির বিরুদ্ধে জেস্ট্যাক চালিয়ে জাস্ট্যাক কলের ফলাফলগুলিকে একটি ফাইলে রাখি। যাইহোক, আমি যখন এটি চেষ্টা করি তখন এটি কার্যকর হয় না।

আমার নমুনা ব্যাটের ফাইল সামগ্রী এখানে:

@echo off
set /p id=Enter ID: 
echo %id%
jstack > jstack.txt

এবং jstack.txt এ কী প্রদর্শিত হবে তা এখানে:

আইডি প্রবেশ করান: ব্যাচ চাকরী (ওয়াই / এন) শেষ করুন? 

2
"ব্যাচের কাজ শেষ (ওয়াই / এন)?" আপনার .bat চলমান অবস্থায় আপনি যখন ctrl-c তে আঘাত করেন তখন সাধারণত প্রদর্শিত হয় typically
জিম বাক

2
Jstack.txt এ jstack থেকে আউটপুট এবং আপনার ব্যাচের ফাইল সম্পর্কিত কোনও কিছুই থাকবে এবং আপনি Jstack কী তা বলেননি।
শেজমুর

1
এই উত্তরগুলির কোনও কাজ হয়নি? যদি না হয়, আপনি কি কোনও সমাধান খুঁজে পেয়েছেন? আপনি যদি তা করেন তবে এটি স্ব-উত্তর হিসাবে এখানে পোস্ট করলে এটি সহায়ক হবে।
মাস্লোর

1
আপনি ইনপুট জন্য সংশোধন করা হয়েছে অপশন চান আপনি ব্যবহার বন্ধ ভালো আছেন choiceচেয়েset /p
icc97

2
দয়া করে আমার পোস্টটিকে উত্তর হিসাবে চিহ্নিত করুন, যার সারমর্মটি হ'ল ব্যাচ প্রোগ্রামটি চালানোর সময় আপনি প্রম্পটে কোনও আইডি সরবরাহ না করে এন্টার টিপুন এবং সুতরাং Enter ID: আপনাকে যে আইডি সরবরাহ করার কথা ছিল তার চেয়ে % আইডি% সেট করা হয়েছিল from কীবোর্ড
মার্শ

উত্তর:


458

এটা চেষ্টা কর:

@echo off
set /p id="Enter ID: "

এরপরে %id%আপনি অন্য ব্যাচের ফাইলের মতো প্যারামিটার হিসাবে ব্যবহার করতে পারেন jstack %id%

উদাহরণ স্বরূপ:

set /P id=Enter id: 
jstack %id% > jstack.txt

2
এসইটি কমান্ডের আউটপুটটি নীলকে কীভাবে পাইপ করার কোনও উপায় আছে: তাই আপনি কী টাইপিংটি আড়াল করতে পারবেন? আপনি যদি এটি করতে চান তবে: set /p id=Enter ID:\r\n set /p pw=Enter Passwd:এবং উইন্ডোতে পাসওয়ার্ডের পাঠ্যটি প্রদর্শন করতে চান না, একা ছেড়ে দিন, "ডসকি" কমান্ড বাফারে দেখান? আমি বেশ কয়েকটি ভিন্ন উপায়ে চেষ্টা করেছি, এবং ইনপুট নেওয়ার জন্য একটি সামান্য সি প্রোগ্রাম লেখার বাইরে এবং এটি একটি এনভায়ারকে অর্পণ করতে পেরেছি, তবে এটি করার কোনও উপায় খুঁজে পাচ্ছি না, তবে এটি প্রতারণা করছে! :) আমি এটি জাস্ট উইন্ডোজ সিএমডি এর সাথে কাজ করতে চাই।
ল্যারিএফ


4
শেষের দিকে যোগ করা নব্বইটি নোট করুন "Enter ID: "। প্রম্পট এবং ব্যবহারকারী উত্তরের মধ্যে একটি মিষ্টি সামান্য জায়গা দেয়। Delete the internet?No sillyবনাম Delete the internet? No silly
icc97

উদ্ধৃতিগুলির প্রয়োজন নেই। @ ইনস্ট্যান্টসপ কী অনুপস্থিত ছিল তা ছিল লাইনের '% id% jstack %id% > jstack.txt
was

1
ব্যবহার করুন SETLOCALএবং ENDLOCALযদি আপনি বর্তমান ব্যাচে চলক স্থানীয় রাখতে চান। দেখুন ss64.com/nt/endlocal.html
endo64

99

বাক্য গঠনটি হ'ল: set /p variable=[string]

পরীক্ষা করে দেখুন http://commandwindows.com/batch.htm বা http://www.robvanderwoude.com/userinput.php Windows OS এর ব্যাচ ফাইলের বিভিন্ন সংস্করণের সাথে ব্যবহারকারীর ইনপুট মধ্যে একটি আরো গভীর ডুব জন্য।

একবার আপনি আপনার ভেরিয়েবল সেট করে নিলে আপনি নিম্নলিখিত ফ্যাশনে এটি ব্যবহার করতে পারেন।

@echo off
set /p UserInputPath=What Directory would you like?
cd C:\%UserInputPath%

%VariableName%সিনট্যাক্স নোট করুন


দয়া করে আপনার বাক্যটি শেষ করুন ... আপনি কি অন্য লিঙ্কটি অন্তর্ভুক্ত করতে চলেছেন? এছাড়াও, আমি উইন্ডোজ 7 cmd.exeশেলের উপরের সমস্তটি পরীক্ষা করে দেখেছি এবং প্রত্যেকটি - ব্যতিক্রম ছাড়াই - ইউজার ইনপুটকে নির্বিচারে নামযুক্ত ভেরিয়েবলের জন্য বরাদ্দ করে। ইতিমধ্যে সরবরাহ করা হয়েছে কীভাবে আপনার প্রতিক্রিয়া শোভিত হয়?
chb

3
আমি যখন আমার উত্তর পোস্ট করলাম তখন এটি আসল প্রশ্নের উত্তর বলে মনে হচ্ছে না। মূল প্রশ্নটি "আপনি কীভাবে ব্যবহারকারীর ইনপুট জিজ্ঞাসা করবেন এবং তারপরে টার্নআরাউন্ড করে এটি অন্য আদেশে ব্যবহার করবেন?" আমি আমার উত্তরটি ধীরে ধীরে প্রশ্নের উত্তর দিয়েছি। এছাড়াও যখন আপনি গুগলে অনুসন্ধান করেন "আপনি কীভাবে কোনও ব্যাচ ফাইল থেকে ব্যবহারকারী ইনপুট পাবেন" এই প্রশ্নের ফলস্বরূপ # 2 হয় সুতরাং এর সঠিক উত্তর দরকার যা আমি যদিও এই ফোরামের পক্ষে ছিল।
জাফেসসেনডেন

14
পরে স্থান =প্রয়োজন হয় না।
জোয়

আমাদের কেন জায়গা দরকার? cmdস্থানটিতে অনুমতি দেয় না এমনটিতে ঠিক কী ঘটে?
ytpillai

@ জো আমি সম্মতি জানাই, রোবভেন্ডারডুউইড ডটকম পৃষ্ঠার কোনও স্থান নেইSET /P variable=[promptString]
আইসিসি ৯7

31

আমি নিশ্চিত নই যে উইন্ডোজের সমস্ত সংস্করণের ক্ষেত্রে এটি ঘটেছে কিনা তবে আমার কাছে থাকা এক্সপি মেশিনে আমাকে নিম্নলিখিতগুলি ব্যবহার করতে হবে:

set /p Var1="Prompt String"

উদ্ধৃতিগুলিতে প্রম্পট স্ট্রিং ব্যতীত আমি পাঠ্যের উপর নির্ভর করে বিভিন্ন ফলাফল পেয়েছি।


"পাঠ্যের উপর নির্ভর করে বিভিন্ন ফলাফল" এর জন্য +1: আমার একই সমস্যা ছিল। এখন এটি পাঠ্য সহ কোটগুলি মুদ্রণ করে তবে এর চেয়ে অদ্ভুত আচরণ আর নেই।
বেঞ্জ

6
এই সিনট্যাক্স ব্যবহার করতে আছে কোট, কিন্তু এড়ানো দেখাচ্ছে তাদের:set /p "var1=Prompt String"
স্টিফেন

কমান্ড লাইনটি আরও সুন্দর করে প্রম্পট করার কারণে এটি কোটগুলি ব্যবহার করতে এবং শেষে একটি স্থান অন্তর্ভুক্ত করা দরকারী। উদ্ধৃতি থাকা তা স্পষ্ট করে দেয় যে ব্যাচের ফাইলে সেখানে স্থান রয়েছে। set /p Var1="Prompt String "তারপরে আপনি যখন ফাইলটি চালনা করেন এবং ব্যবহারকারী Prompt String Yesতার পরিবর্তে কিছু পানPrompt StringYes
icc97


14
@echo off
set /p input="Write something, it will be used in the command "echo""
echo %input%
pause

আমি যা চাই তা যদি পাই তবে এটি ঠিক আছে। অন্যান্য কমান্ডগুলিতেও আপনি% ইনপুট% ব্যবহার করতে পারেন।

@echo off
echo Write something, it will be used in the command "echo"
set /p input=""
cls
echo %input%
pause 

8
@echo off
:start
set /p var1="Enter first number: "
pause

2
আপনি কেন শুরু করবেন :start?
বেঞ্জ

1
:startকেবলমাত্র একটি চিহ্নিতকারী ... উদাহরণস্বরূপ, তিনি সম্ভবত এটি ব্যবহার করতে পারেন :end, যা ভেরিয়েবল ক্লিনআপের মতো জিনিসগুলি ঘটায় বা একটিকে কল করতে পারে বা এরকম কিছু ঘটায় popd। তারপর, আপনি একটি ব্যবহার অপশন আছে IF ERRORLEVEL1 GOTO END... বা এমনকি একটি GOTO ERR, এবং অধীন :errপ্রতিধ্বনি একটি ত্রুটি মত ফাইল নম্বর পেতে প্রয়াসের সময় ঘটেছে কিছু আছে।
গেগো

8

SETX এর জন্য কোনও ডকুমেন্টেড / প্রম্পট পরামিতি নেই।

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

আপনি কমান্ড প্রম্পটটি পুনরায় চালু না করা পর্যন্ত SETX দ্বারা নির্মিত একটি পরিবর্তনশীল ব্যবহারযোগ্য হবে না। ঝরঝরে, তবে, আপনি ইতিমধ্যে SET করা হয়েছে এমন একটি পরিবর্তনশীল SETX করতে পারেন, এর একই নাম থাকলেও।

এটি উইন্ডোজ 8.1 প্রোতে আমার জন্য কাজ করে:

set /p UserInfo= "What is your name?  "
setx UserInfo "%UserInfo%"

(বিদ্যমান ভেরিয়েবলের চারপাশে উদ্ধৃতি চিহ্নগুলি প্রয়োজনীয়))

এই পদ্ধতিটি আপনাকে বর্তমান অধিবেশন চলাকালীন অস্থায়ী SET- নির্মিত ভেরিয়েবলটি ব্যবহার করার অনুমতি দেয় এবং আপনাকে কম্পিউটার পুনরায় বুট করার সময় SETX- নির্মিত ভেরিয়েবলটি পুনরায় ব্যবহার করতে বা সিএমডি প্রম্পট পুনরায় চালু করার অনুমতি দেয়।

(কোড অনুচ্ছেদে সঠিকভাবে ফর্ম্যাট করতে সম্পাদিত))


5

ক্লায়েন্টগুলিতে পিসি প্রস্তুত করার সময় আমার কাছে কিছুটা সেন্টিমিডি থাকে: এটি ব্যবহারকারীকে ইনপুট দেওয়ার জন্য কল করে এবং পিসির নাম পরিবর্তন করে।

@ECHO "remember to run this as admin."
@ECHO OFF
SET /P _inputname= Please enter an computername:
@ECHO Du intastede "%_inputname%"
@ECHO "The pc will restart after this"
pause
@ECHO OFF
wmic computersystem where name="%COMPUTERNAME%" call rename name="%_inputname%"

shutdown -r -f

হাই আবার এই দরকারী স্ক্রিপ্ট প্রাথমিক সেটআপের পরে :-) Win10 পিসিতে ব্যবহার করা হয়
Werdna

5

দুটি সম্ভাবনা রয়েছে।

  1. আপনি করা ভুলে গেছি %id%মধ্যে jstackকল।

    jstack %id% > jstack.txt
    

সুতরাং পুরো সঠিক ব্যাচের ফাইলটি হ'ল:

@echo off
set /p id=Enter ID: 
echo %id%
jstack %id% > jstack.txt

এবং / অথবা ২. আপনি এটি কোডে রেখেছিলেন (এবং আমাদের প্রশ্নে বলতে ভুলে গিয়েছিলেন) তবে আপনি যখন ব্যাচ ফাইলটি চালিয়েছেন তখন আপনি কোনও আইডি টাইপ না করে এন্টার কীটি চাপলেন (1234 বলুন)।

যা ঘটছে তা এই দুটি ভুলের ফল: jstackআপনি যে আইডি সরবরাহ করেছেন তা দিয়ে কল করা হবে।

তবে আপনার ক্ষেত্রে (আপনি যে কোড সরবরাহ করেছেন সে অনুসারে) আপনি কোনও পরিবর্তনশীল ছাড়াই এটিকে ডাকলেন। তুমি লিখেছিলে:

jstack > jstack.txt

সুতরাং আপনি যখন jstackকোনও পরিবর্তনশীল না দিয়ে চালিত হন এটি নিম্নলিখিতগুলি ছাড়িয়ে যায়:

Terminate batch file Y/N? 

আপনার দ্বিতীয় ভুল আপনি যদি এর পরিবর্তে একটি মান প্রদান যখন প্রোগ্রাম আপনাকে জিজ্ঞাসা এর লিখুন টেপা হলে: Enter ID:। আপনি যদি এই মুহুর্তে কোনও আইডি %id%রাখতেন , 1234 বলুন, ভেরিয়েবলটি সেই মান হয়ে উঠবে, আমাদের ক্ষেত্রে 1234. তবে আপনি কোনও মান সরবরাহ করেননি এবং পরিবর্তে এন্টার টিপেছিলেন। আপনি যখন ভেরিয়েবলটিকে কোনও মান দেন না এবং যদি সেই ভেরিয়েবলটি অন্য কোনও কিছুর আগে সেট না করা থাকে, তবে ভেরিয়েবলটি কমান্ডের %id%প্রম্পটে সেট করা হয় set!! সুতরাং এখন %id%সেট করা আছে Enter ID:যা আপনার স্ক্রিনে প্রতিবেদন হিসাবে ব্যাচ ফাইলে অনুরোধ করা হয়েছিল আগে আপনি jstack ডেকেছিলেন।

তবে আমি সন্দেহ করি যে jstack %id% > jstack.txtআপনার ব্যাচের ফাইল কোডটি আপনার সাথে রয়েছে %id(এবং প্রশ্নটি ভুল করে এটি বাদ দেওয়া হয়েছে) এবং আপনি কোনও আইডি টাইপ না করেই এন্টার চাপুন। ব্যাচ প্রোগ্রামটি তখন আইডি প্রতিধ্বনিত হয়, যা এখন "আইডি প্রবেশ করান:", এবং তারপরে দৌড়েjstack Enter ID: > jstack.txt

জাস্টাক নিজেই ইনপুট প্রতিধ্বনিত করেছে, একটি ভুলের মুখোমুখি হয়েছে এবং সমাপ্ত করতে বলেছে।
এবং এই সব jstack.txt ফাইল লিখিত ছিল।


3

ভেরিয়েবলের চারপাশের ডলারের চিহ্নগুলি আমার ভিস্তা মেশিনে কাজ করে না, তবে শতাংশ লক্ষণগুলি করে। এছাড়াও মনে রাখবেন যে "সেট" লাইনে একটি পিছনের স্থানটি প্রম্পট এবং ব্যবহারকারীর ইনপুটগুলির মধ্যে প্রদর্শিত হবে।


পিছনে স্থান? win7 x64 rus: C:\>set /p DestPath="Type path:"এবং পরবর্তী লাইনটি হলType path:c:\dddd
'দ্য

2
$ চিহ্ন বাশ বা ইউনিক্স ভেরিয়েবলের জন্য। %% চিহ্নটি উইন্ডো ভেরিয়েবলের জন্য।
নুব

আপনার যদি SETLOCAL ENABLEDELAYEDEXPANSIONআপনার ব্যাচের ফাইলে থাকে !EnvVariable!তবে আপনি ফর লুপগুলির সময় এটির মান বা প্রসারিত না করে এমন কিছু জিনিস ব্যবহার করতে পারেন যা ম্যাক্রোর প্রসারিত হয় না যতক্ষণ না লিমিটি আসলে সিএমডি পার্সার দ্বারা প্রক্রিয়া করা হয়। cmd /?help setlocal
এটির

2

সবেমাত্র যোগ করা

set /p NetworkLocation= Enter name for network?

echo %NetworkLocation% >> netlist.txt

আমার নেট ব্যাচ কাজের ক্রম। এটি এখন আমাকে সেই নমুনার পয়েন্ট হিসাবে প্রতিক্রিয়া জানায় shows আমি অবিচ্ছিন্নভাবে >> আউটপুট ফাইল তাই আমি এখন "হোম", "ওয়ার্ক", "স্টারবাকস" ইত্যাদি জানি clear পরিষ্কার বায়ু খুঁজছি, আমি সর্বনিম্ন ব্যবহারের চ্যানেলগুলি eavulate করতে পারি এবং সেখানে প্রায় 5 বা কেবল সমস্ত 2.4 মেগাহার্টজ ডাব্লুএলএন আছে কিনা whether


2

কেবল ভেরিয়েবলের একটি ডিফল্ট মান রাখতে। আপনার .bat এর সাম্প্রতিক রান থেকে ডিফল্ট ব্যবহার করতে এন্টার টিপুন:

@echo off
set /p Var1=<Var1.txt
set /p Var1="Enter new value ("%Var1%") "
echo %Var1%> Var1.txt

rem YourApp %Var1%

প্রথম রানটিতে ভেরিয়েবলের প্রাথমিক মান (বা ম্যানুয়ালি Var1.txt তৈরি করুন) সহ ফাইলের অভাব সম্পর্কে বার্তাটি উপেক্ষা করুন।


(set /p var=<var1.txt) 2>nulত্রুটিমাখা দমন করবে। আপনি set var1=defaultকোনও ফাইল থেকে কিছু পাওয়ার পরিবর্তে দিতে পারেন
স্টিফান

স্টিফান, আপনার প্রস্তাবের দ্বিতীয় অংশটি রানের মধ্যে থাকা মানগুলি সংরক্ষণ করে না !? আপনি এটি আরও বিকাশ করতে পারেন?
আন্তোনি

না, রানের মধ্যে নয় এটি কেবল একটি ডিফল্ট মান দেয়। (প্রশ্নের মধ্যে রানগুলির মধ্যে মূল্য সঞ্চয় করার জন্য কোনও অনুরোধ নেই)।
স্টিফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.