উইন্ডোজ ব্যাচফাইলে আমি কীভাবে "আপনি নিশ্চিত" প্রম্পট তৈরি করতে পারেন?


95

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

আমার .bat ফাইলটিকে "আপনি কি নিশ্চিত" বলার জন্য আমার কী কোডের প্রয়োজন হবে এবং ফাইলটির বাকী অংশটি চালানোর আগে আমাকে "y" টাইপ করুন? যদি "y" ব্যতীত অন্য কোনও কিছু টাইপ করা থাকে তবে তা অবশ্যই এই লাইনে কার্যকর হবে না।

27 নভেম্বর সম্পাদনা করুন ঠিক আছে আমি এটিকে পুনরায় উত্তর না দিয়ে চিহ্নিত করেছি কারণ আমি এখনও এটি বের করতে পারি না। আমি যখন "প্রস্থান" ডাকি; এটি cmd.exe বন্ধ করে দেয় যা আমি চাই না। এই সমস্ত কারণ উইন্ডোজ কমান্ড বাফারকে ভুল প্রয়োগ করেছে [আমি কমপক্ষে যা ব্যবহার করি তার চেয়ে আলাদা)

উত্তর:


170

আপনি যেমন কিছু চান:

@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=Are you sure (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END

echo ... rest of file ...


:END
endlocal

4
এই SET AREYOUSURE=Nকমান্ড উইন্ডোতে আপনি যদি ইতিমধ্যে স্ক্রিপ্টটি চালিয়ে যান তবে পছন্দটি সাফ করার জন্য প্রম্পটের আগে কেবলমাত্র আমি যুক্ত করব । এটি ছাড়াই পূর্বনির্ধারিত পছন্দটি ডিফল্ট থাকবে।
ইসাপির

4
@ ইগল আমি পুরোপুরি নিশ্চিত যে setlocalএবং এর endlocalযত্ন নেওয়া উচিত। %AREYOUSURE%এর পরে আর অস্তিত্ব থাকবে না endlocal

4
@ Dudeprgm আপনি সম্ভবত ঠিক বলেছেন আমি মনে করি যে আমি আমার কোডটিতে সেগুলি মিস করেছি।
ইস্পির

4
... গুরুত্বপূর্ণ দুটি লাইন সম্পর্কে কিছু ব্যাখ্যামূলক শব্দ দিয়ে আরও মূল্যবান হবে ।
ওল্ফ

@ জো সম্ভবত সে পারেন না কারণ (আমার মতো) সে (এখনও) সেগুলি বুঝতে পারে না। সুতরাং যদি আপনি তা করেন, আপনি নিজের উত্তরটি বা এটির ব্যাখ্যা করার সংস্থানগুলিতে লিঙ্কটি প্রসারিত করতে পারলে আশ্চর্যজনক হবে :)
মার্কাস ম্যানগেলসডর্ফ

34

পছন্দ কমান্ড চেষ্টা করুন , যেমন

CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."

8
<প্রদর্শন>> যদিও এটি তুলনামূলকভাবে নতুন। এটা তোলে 1993 বা 1994 সালে এমএস ডস 6 যোগ করা হয়েছিল, তাই এটি সব বাস্তবায়নের সঙ্গে কাজ নাও করতে পারে </ দেখাতে>
নাথন Fellman

7
এখানে কীভাবে প্রকৃতপক্ষে পছন্দটি ব্যবহার করা যায় তার উদাহরণ কম্পিউটারহপ.
ম্যাথু লক

এটি উইন্ডোজ 10 সেন্টিমিটারে পুরোপুরি কাজ করে।
ব্র্যালিও জে সোলানো

16

choiceকমান্ড সর্বত্র পাওয়া যায় না। নতুন উইন্ডোজ সংস্করণগুলির সাথে, setকমান্ডটির /pবিকল্প রয়েছে আপনি ব্যবহারকারীর ইনপুট পেতে পারেন

SET /P variable=[promptString]

দেখতে set /?আরও তথ্যের জন্য


... স্বীকৃত ব্যক্তির চেয়ে অনেক বেশি অন্তর্দৃষ্টিপূর্ণ, তবে আমরা অবশ্যই জরুরি সময়ে বেঁচে আছি।
ওল্ফ

12

উইন্ডোজ কমান্ড লাইনে ব্যবহারকারী প্রম্পটের জন্য দুটি কমান্ড উপলব্ধ:

  • /Pসক্ষম উইন্ডোজ এনটি সংস্করণে সক্ষম কমান্ড এক্সটেনশানগুলি সহ এবং বিকল্পগুলির সাথে সেট করুন
  • উইন্ডোজ ভিস্তা এবং পরে উইন্ডোজ সংস্করণগুলিতে পিসি ব্যবহারকারীদের জন্য এবং উইন্ডোজ সার্ভার 2003 এবং পরে উইন্ডোজের সার্ভার সংস্করণগুলিতে ডিফল্টরূপে পছন্দ.অ্যাক্সেস উপলব্ধ।

সেটটি উইন্ডোজ কমান্ড প্রসেসরের অভ্যন্তরীণ কমান্ড cmd.exe/Pস্ট্রিংয়ের জন্য কোনও ব্যবহারকারীকে অনুরোধ করার বিকল্পটি কেবল সক্ষম কমান্ড এক্সটেনশনগুলির সাথেই পাওয়া যায় যা ডিফল্টরূপে সক্ষম করা হয় অন্যথায় প্রায় কোনও ব্যাচ ফাইল আজকাল আর কাজ করবে না।

পছন্দ.exe হল একটি পৃথক কনসোল অ্যাপ্লিকেশন (বহিরাগত কমান্ড) এর মধ্যে অবস্থিত %SystemRoot%\System32। উইন্ডোজ এক্সপি-তে অন্য অনেক কমান্ডের মতো উইন্ডোজ এক্সপি ব্যবহারের জন্য উইন্ডোজ এক্সপি মেশিনে উইন্ডোজ এক্সপি মেশিনে choice.exeডিরেক্টরিতে অনুলিপি করা যেতে পারে %SystemRoot%\System32তবে উইন্ডোজ সার্ভার 2003 এ ডিফল্টরূপে উপলব্ধ।

নিম্নলিখিত কারণগুলির কারণে SET / P ব্যবহারের চেয়ে পছন্দগুলি পছন্দ করার পক্ষে সেরা অনুশীলন :

  1. পছন্দ শুধুমাত্র চাবি গ্রহণ (যথাক্রমে অক্ষর থেকে পড়তে stdin ) বিকল্প পর নিদিষ্ট /C(এবং Ctrl+C) এবং একটি ত্রুটি হুইসেল তাহলে ব্যবহারকারী ছাপাখানা একটি ভুল চাবি আউটপুট।
  2. পছন্দসই গ্রহণযোগ্যগুলির মধ্যে একটি ছাড়া অন্য কোনও কী চাপার প্রয়োজন নেই। পছন্দসই কী টিপে গেলে পছন্দগুলি তত্ক্ষণাত্ প্রস্থান হয় যখন SET / P এর প্রয়োজন হয় যে ব্যবহারকারী RETURNবা এর সাথে ইনপুট শেষ করে ENTER
  3. এটা তোলে সম্ভব পছন্দ স্বয়ংক্রিয়ভাবে ব্যবহারকারীর জন্য অপেক্ষা না করেই কিছু সেকেন্ড পরে ডিফল্ট বিকল্প চালিয়ে যাওয়ার জন্য একটি ডিফল্ট বিকল্প এবং একটি টাইমআউটের সংজ্ঞায়িত করতে।
  4. আউটপুট যা কিছু মত ব্যবহার প্রম্পট ব্যাচ ফাইল কল অন্য ব্যাচ ফাইল থেকে স্বয়ংক্রিয়ভাবে প্রম্পট উত্তর দিলে উত্তম echo Y | call PromptExample.batব্যবহারের পছন্দ
  5. ব্যবহারকারীর পছন্দের মূল্যায়ন CHOICE এর সাথে অনেক সহজ কারণ CHOICE চাপযুক্ত কী (অক্ষর) অনুসারে একটি মান যা ERRORLEVEL এর জন্য নির্ধারিত হয়েছে যা সহজেই পরবর্তী মূল্যায়ন করা যেতে পারে তার সাথে প্রস্থান করে।
  6. পরিবেশ ব্যবহৃত পরিবর্তনশীল সেট / পি সংজ্ঞায়িত করা ব্যবহারকারী এইমাত্র কী হিট যদি RETURNবা ENTERতা হলে ব্যবহারকারীকে সামনে সংজ্ঞায়িত করা হয় নি। এসইটি / পি কমান্ড লাইনে ব্যবহৃত পরিবেশের পরিবর্তনশীল তার বর্তমান মানটি যদি সংজ্ঞায়িত করা হয় এবং ব্যবহারকারী কেবলমাত্র RETURNবা টিপে রাখে ENTER
  7. ব্যবহারকারীর এসইটি / পি দিয়ে অনুরোধ করাতে কোনও স্ট্রিং সহ কিছু প্রবেশের স্বাধীনতা রয়েছে যা পরে cmdবাক্য ফাইলের নির্বাহের ফলে একটি সিনট্যাক্স ত্রুটির কারণে বা কমান্ডের প্রয়োগে ব্যাচ ফাইলের মধ্যে অন্তর্ভুক্ত না হওয়ার ফলে ঘটেছিল ভাল কোডেড ব্যাচ ফাইল। ভুল বা ইচ্ছাকৃত ভুল ব্যবহারকারী ইনপুট দ্বারা SET / P সুরক্ষার জন্য কিছু প্রচেষ্টা দরকার ।

এখানে পছন্দের ব্যবহার করে একটি প্রম্পট উদাহরণ পছন্দ এবং অন্যথায় সেট / পি উপর choice.exeউইন্ডোজ চলমান ব্যবহৃত কম্পিউটারে না পাওয়া যায়।

@echo off
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice

setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice=N"
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I "!UserChoice!" == "N" endlocal & goto :EOF
if /I not "!UserChoice!" == "Y" goto UseSetPrompt
endlocal
goto Continue

:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]? "
if errorlevel 2 goto :EOF

:Continue
echo So your are sure. Okay, let's go ...

দ্রষ্টব্য: এই ব্যাচ ফাইলটি কমান্ড এক্সটেনশনগুলি ব্যবহার করে যা উইন্ডোজ 95/98 / ME কমান্ড ইন্টারপ্রেটার হিসাবে ব্যবহার command.comনা করে ব্যবহার করে cmd.exe

উইন্ডোজ এনটি 4/2000 / এক্সপি set "UserChoice=!UserChoice: =!"দিয়ে এই ব্যাচ ফাইলটি কল করা সম্ভব করার জন্য কমান্ড লাইন যুক্ত করা হয়েছে echo Y | call PromptExample.batএবং এর ব্যবহারের প্রয়োজন নেই echo Y| call PromptExample.bat। দুটি স্ট্রিং তুলনা চালানোর আগে এটি STDIN থেকে পঠিত স্ট্রিং থেকে সমস্ত স্পেস মুছে ফেলে ।

echo Y | call PromptExample.batওয়াইSPACE পরিবেশগত পরিবর্তনশীল হিসাবে নির্ধারিত হওয়ার ফলাফল UserChoice। এর ফলে দু'বার প্রম্পট প্রক্রিয়াজাতকরণের কারণ "Y "হ'ল না কেস-সংবেদনশীল সমান "N"এবং "Y"না সমস্ত জায়গাগুলি মোছা ছাড়াই। তাই UserChoiceসঙ্গে ওয়াইSPACE হিসাবে মান বিকল্প প্রম্পট একটি দ্বিতীয় সময় চলমান স্থাপিত হবে Nযেমন দ্বিতীয় প্রম্পট সঞ্চালনের উপর ব্যাচ ফাইল এর ডিফল্ট হিসাবে সংজ্ঞায়িত করা হয় যা ব্যাচ ফাইল প্রক্রিয়াকরণ একটি অপ্রত্যাশিত প্রস্থান পরবর্তী ফলাফল নেই। হ্যাঁ, এসইটি / পি এর নিরাপদ ব্যবহার সত্যই জটিল, তাইনা?

অপশনগুলির তালিকা থেকে ব্যবহারকারীকে পছন্দের জন্য প্রেরণের জন্য SET / P এবং CHOICE ব্যবহারের আরও তথ্যের জন্য উত্তর দেখুন কীভাবে একটি ভুল ব্যবহারকারীর ইনপুটটিতে উইন্ডোজ কমান্ড ইন্টারপ্রেটারকে ব্যাচ ফাইল সম্পাদন থেকে বিরত রাখা যায়?

আরও কিছু ইঙ্গিত:

  1. আইএফ তুলনা অপারেটরের বাম এবং ডান দুটি স্ট্রিংয়ের সাথে ডাবল কোটস সহ তুলনা করে । সুতরাং কেস-অবশ তুলনা মান নয় UserChoiceসঙ্গে Nএবং Yকিন্তু এর মান UserChoiceদ্বারা বেষ্টিত "সঙ্গে "N"এবং "Y"
  2. যদি তুলনা অপারেটরদের EQUএবং NEQসীমার মধ্যে দুটি পূর্ণসংখ্যার তুলনা -2147483648 2147483647 করার জন্য এবং দুটি স্ট্রিং তুলনা না প্রাথমিক ডিজাইন করা হয়। EQUএবং NEQস্ট্রিং তুলনার জন্যও কাজ করে, তবে বাম স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তর করার অকেজো প্রয়াসে ডাবল উদ্ধৃতিতে স্ট্রিংগুলির তুলনা করার ফলস্বরূপ। EQUএবং NEQকেবল সক্ষম কমান্ড এক্সটেনশনের সাহায্যে ব্যবহার করা যেতে পারে। স্ট্রিং তুলনা জন্য তুলনা অপারেটরদের হয় ==এবং not ... ==এমনকি প্রতিবন্ধী কমান্ড এক্সটেনশন হিসাবে এমনকি কাজ command.comMS-DOS এর এবং Windows 95/98 এর / আমার ইতিমধ্যেই তাদের সমর্থন করে। আইএফ তুলনা অপারেটরগুলির আরও বিশদের জন্য উইন্ডোজ ব্যাচের ফাইলগুলিতে প্রতীক NEQ, LSS, GTR ইত্যাদির সমতুল্য দেখুন ।
  3. কমান্ড goto :EOFসত্যিই প্রস্থান ব্যাচ ফাইল প্রক্রিয়াকরণ কমান্ড এক্সটেনশন সক্ষম করা আবশ্যক। আরও তথ্যের জন্য দেখুন কোথায় যান: ইওএফ ফিরে আসে?

ব্যবহৃত কমান্ডগুলি এবং সেগুলি কীভাবে কাজ করে তা বোঝার জন্য একটি কমান্ড প্রম্পট উইন্ডোটি খুলুন, নিম্নলিখিত কমান্ডগুলি সম্পাদন করুন এবং প্রতিটি কমান্ডের জন্য প্রদর্শিত সমস্ত সহায়তা পৃষ্ঠা খুব সাবধানতার সাথে পড়ুন।

  • choice /?
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?

আরো দেখুন:


4
এটি একটি অবিশ্বাস্য উত্তর। আমি এখন থেকে কেবল চয়েস.এক্সই ব্যবহার করছি।
বাস

4
পছন্দ.exe 6.0 সাল থেকে ডস-এও ছিল
ব্রায়ান মিন্টন

4
@ ব্রায়ানমিন্টন এটি সঠিক নয়। CHOICE.COMএমএস-ডস .0.০, এমএস-ডস .0.০, উইন্ডোজ 95 এবং উইন্ডোজ 98 এ ডিফল্টরূপে 16-বিট অ্যাপ্লিকেশন উপলব্ধ ছিল Windows তবে choice.exeউইন্ডোজ এনটি 4, উইন্ডোজ 2000 এবং উইন্ডোজ এক্সপিতে ডিফল্টরূপে কোনও ইনস্টলড ছিল না । CHOICE.COMএনটি 4, উইন্ডোজ 2000 এবং উইন্ডোজ এক্সপিতেও ব্যবহার করা যেতে পারে তবে choice.exeউপযুক্ত সংস্থান কিট থেকে 32-বিট ব্যবহার করা ভাল । চয়েস সম্পর্কে রব ভ্যান ডের ওয়াউডিজ পৃষ্ঠাটি দেখুন । বিকল্পগুলি CHOICE.COMএবং এর মধ্যে আংশিকভাবে পৃথক choice.exe। তবে প্রশ্নটি ডস নিয়ে নয়।
মফি

5

এখানে কিছুটা সহজ:

@echo off
set /p var=Are You Sure?[Y/N]: 
if %var%== Y goto ...
if not %var%== Y exit

বা

@echo off
echo Are You Sure?[Y/N]
choice /c YN
if %errorlevel%==1 goto yes
if %errorlevel%==2 goto no
:yes
echo yes
goto :EOF
:no
echo no

ওয়াই কমান্ড দেওয়ার পরে আপনি যেটি চান তা চান। এটা কি ... এর জন্য :) রয়েছে
বব স্মিথ

আমি বলতে চাইছিলাম: %errorlevel%সর্বদা একটি পূর্ণসংখ্যার মান। উদাহরণ সহ ডকুমেন্টেশনের জন্য এখানে দেখুন ।
স্টিফান

1

হ্যাঁ / কোনও উত্তরের জন্য আমার এখানে যাওয়ার পদ্ধতি ।

এটি কেস-সংবেদনশীলও।

এটি কেবল ইনপুট দ্বারা প্রদত্ত ত্রুটিগুলি পরীক্ষা choiceকরে এবং কোডের নীচে এটি ব্যবহার করা যায় তাই আপনার যা যা প্রয়োজন তার পরিবর্তনশীল সেট করে ।

@echo off
choice /M "[Opt 1]  Do you want to continue [Yes/No]"
if errorlevel 255 (
  echo Error
  ) else if errorlevel 2 (
  set "YourChoice=will not"
  ) else if errorlevel 1 (
  set "YourChoice=will"
  ) else if errorlevel 0 (
  goto :EOF
  )
  echo %YourChoice%
  pause

0

আপনি যদি ব্যাচ প্রোগ্রামটি প্রম্পটে ফিরে যেতে চান এবং প্রম্পটটি বন্ধ না করে (একে একেএমডি.এক্সই) আপনি "প্রস্থান / বি" ব্যবহার করতে পারেন।

এটি সাহায্য করতে পারে।

set /p _sure="Are you sure?"
::The underscore is used to ensure that "sure" is not an enviroment
::varible
if /I NOT "_sure"=="y" (
::the /I makes it so you can
exit /b
) else (
::Any other modifications...
)

বা আপনি যদি অনেক লাইন ব্যবহার করতে না চান ...

Set /p _sure="Are you sure?"
if /I NOT "_sure"=="y" exit /b
::Any other modifications and commands.

আশাকরি এটা সাহায্য করবে...


0

এখানে একটি সাধারণ উদাহরণ যা আমি উইন্ডোজ 10-এ ব্যাকআপ (.bat / batch) স্ক্রিপ্টে ব্যবহার করি যা ব্যাকআপগুলি তৈরি করার সময় আমাকে বিভিন্ন অপশন রাখতে দেয়।

...

:choice
set /P c=Do you want to rsync the archives to someHost[Y/N]?
if /I "%c%" EQU "Y" goto :syncthefiles
if /I "%c%" EQU "N" goto :doonotsyncthefiles
goto :choice

:syncthefiles
echo rsync files to somewhere ...
bash -c "rsync -vaz /mnt/d/Archive/Backup/ user@host:/home/user/Backup/blabla/"
echo done

:doonotsyncthefiles
echo Backup Complete!

...

আপনার এই ব্লকগুলির যতগুলি প্রয়োজন প্রয়োজন have


0

প্রথমে টার্মিনালটি খুলুন।

তারপরে, টাইপ করুন

cd ~
touch .sure
chmod 700 .sure

এরপরে .সুর করুন এবং এটি ভিতরে পেস্ট করুন।

#!/bin/bash --init-file
PS1='> '
alias y='
    $1
    exit
'
alias n='Taskkill /IM %Terminal% /f'
echo ''
echo 'Are you sure? Answer y or n.'
echo ''

এর পরে, ফাইলটি বন্ধ করুন।

~/.sure ; ENTER COMMAND HERE

কমান্ড চালিয়ে যাওয়ার আগে আপনি নিশ্চিত কিনা এটির একটি প্রম্পট আপনাকে দেবে।


সম্ভবত ব্যাশে, তবে অবশ্যই ব্যাচে নেই।
স্টিফান

উহু. আমি মনে করি না. এটি কেবলমাত্র টার্মিনাল কমান্ড ব্যাচ কমান্ডের জন্য কাজ করে। মিথ্যা তথ্যের জন্য দুঃখিত।
ব্যবহারকারী 1363652121

0

আপনি একটি ইউআই নিশ্চিতকরণ ব্যবহার বিবেচনা করতে পারেন।

সঙ্গে yesnopopup.bat

@echo off

for /f "tokens=* delims=" %%# in ('yesnopopup.bat') do (
    set "result=%%#"
)

if /i result==no (
    echo user rejected the script
    exit /b 1
) 

echo continue

rem --- other commands --

ব্যবহারকারী নিম্নলিখিতটি দেখতে পাবেন এবং স্ক্রিপ্টটি যে পছন্দটি পছন্দ করবে তার উপর নির্ভর করে:

এখানে চিত্র বর্ণনা লিখুন

একেবারে একই স্ক্রিপ্টের সাহায্যে আপনি iexpYNbutton.bat ব্যবহার করতে পারেন যা অনুরূপ পপআপ তৈরি করবে।

সঙ্গে buttons.bat আপনি নিম্নলিখিত স্ক্রিপ্ট চেষ্টা করতে পারেন:

@echo off

for /f "tokens=* delims=" %%# in ('buttons.bat "Yep!" "Nope!" ') do (
    set "result=%%#"
)

if /i result==2 (
    echo user rejected the script
    exit /b 1
) 

echo continue

rem --- other commands --

এবং ব্যবহারকারী দেখতে পাবেন:

এখানে চিত্র বর্ণনা লিখুন


-2

টার্মিনাল খুলুন নিম্নলিখিত টাইপ করুন

echo>sure.sh
chmod 700 sure.sh

এটিকে অবশ্যই ভিতরে পেস্ট করুন .sh

#!\bin\bash

echo -n 'Are you sure? [Y/n] '
read yn

if [ "$yn" = "n" ]; then
    exit 1
fi

exit 0

নিশ্চিত করুন.শ এবং বন্ধ করুন টার্মিনাল এ।

alias sure='~/sure&&'

এখন, আপনি যদি কমান্ডটি টাইপ করার আগে নিশ্চিতরূপে টাইপ করেন তবে এটি আপনাকে কমান্ডটি চালিয়ে যাওয়ার আগে নিশ্চিত প্রম্পট দেবে।

আশা করি এটি সহায়ক!


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