কমান্ড প্রম্পট কিভাবে কার্যকর করার পরে বন্ধ করার জন্য?


54

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

  1. pauseব্যাচ প্রোগ্রামের পরে একটি লাইন নির্বাণ ব্যবহারকারী প্রস্থান করার আগে একটি কী টিপুন
  2. এই ব্যাচ ফাইলগুলি বা অন্য কমান্ড লাইন ম্যানিপুলিউটিং সরঞ্জামগুলি (এমনকি পরিষেবা শুরু, পুনর্সূচনা, ইত্যাদি net start xyবা অনুরূপ কিছু) cmd.exeচালানো হচ্ছে (স্টার্ট - রান - cmd.exe)
  3. এই প্রোগ্রামগুলি এইরকম চলছে cmd /k: cmd /k myprogram.bat

কিন্তু ব্যবহারকারীর ক্ষেত্রে কিছু অন্যান্য ক্ষেত্রে রয়েছে:

  1. প্রোগ্রামটি প্রথমবার চালায় এবং জানেন না যে প্রদত্ত প্রোগ্রাম কমান্ড প্রম্পটে (উইন্ডোজ কমান্ড প্রসেসর) চালানো হবে যেমন উদাহরণস্বরূপ স্টার্ট মেনু (অথবা অন্য কোথাও থেকে) থেকে শর্টকাট চালানোর সময়, OR
  2. Cmd.exe সর্বদা চালানোর জন্য এটি সামান্য অস্বস্তিকর হয়ে ওঠে এবং তার পরে কোন বিরাম দিতে বা স্পষ্টভাবে প্রস্থান করার জন্য সর্বত্র এই কমান্ডগুলির কোডটি পুনর্লিখন করার সময় / সুযোগ নেই।

আমি অটোরুন এন্ট্রি তৈরি করে এবং এই অবস্থানে তার সামগ্রী ম্যানিপুলিউটিং করার সাথে সাথে এটি খোলাখুলিভাবে খোলার সময় ডিফল্ট আচরণ পরিবর্তন সম্পর্কে একটি নিবন্ধ পড়েছি :cmd.exe

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun

(অটোরুন আইটেমগুলি _String values_...)

আমি করা cmd /d /kএটা ব্যবহার করে দেখুন দিতে এটি একটি মান হিসাবে, কিন্তু এই সামগ্রী এ সব উপরে উল্লিখিত আচরণ পরিবর্তন করা হয়নি ... এটা ঠিক যখন এটি স্পষ্টভাবে (স্টার্ট-Run- খোলার কমান্ড লাইন উইন্ডোর আচরণ পরিবর্তিত cmd.exe)।

সুতরাং কিভাবে এটি কাজ করে? আপনি এই সমস্যা সমাধানের জন্য কোন ধারনা দিতে পারেন?


10
সব ব্যাখ্যা সঙ্গে আপনার প্রশ্ন আমার মাথা বিস্ফোরণ করতে চান। আপনি কি কিছু বলতে পারেন: আমি এই "উদাহরণ" কমান্ড দিয়ে ব্যাচ ফাইল চালাতে চাই, এবং আমি শেষ হয়ে গেলে কমান্ড বক্সটি খুলতে চাই। আপনি কি জিজ্ঞাসা করা হয়? কোড একটি ঘনিষ্ঠ নমুনা রাখা দয়া করে।
KCotreau

1
+1 সম্মত Verbose একটু, আপনার প্রশ্ন পুনর্বিবেচনা করুন এবং, সম্ভব হলে, একটি উদাহরণ ব্যবহার করুন এবং আরো সংক্ষিপ্ত প্রশ্ন রচনা।
slotishtype

2
এটি স্বাভাবিক আচরণ, এবং আপনার প্রশ্নটি অবশ্যই বৈধ কিনা তবে আপনাকে জিজ্ঞাসা করা উচিত কেন আপনাকে কমান্ড প্রম্পটটি পরে খোলা রাখতে হবে (বেশিরভাগ ইউটিলিটি এই মন্তব্যে তৈরি করা হয়)।
ব্রেকথ্রু

1
আমার মতে, এটি একটি বাস্তব প্রশ্ন নয়। আপনি ব্যবহারকারীর পরিবর্তে একটি ব্যাচ ফাইল ব্যবহার করার নির্দেশ দিন। এটি যদি প্রশ্নটির উদ্দেশ্য না হয় তবে দয়া করে কোনও বিভ্রান্তিকর তথ্য সরানোর মাধ্যমে আপনার প্রশ্নটি স্পষ্ট করুন এবং আপনার প্রকৃত লক্ষ্যটি ব্যাখ্যা করুন। এটা অস্পষ্ট হলে সঠিক উত্তর দিয়ে আসতে হবে ...
তামারা উইজসম্যান

1
@ র্যান্ডল্ফ রিচার্ডসন, যেহেতু এই সরঞ্জামগুলি কখনও শেষ-ব্যবহারকারী দ্বারা দেখা যাবে না বলে মনে হয় ( সবশেষে , আমরা এখনই GUI ব্যবহার করি)। যদি আপনার এই ধরনের তথ্য প্রয়োজন হয় তবে বেশিরভাগ আইটি গ্রুপ সঠিক সিস্টেমের তথ্য সংগ্রহ এবং প্রদর্শন করার জন্য ব্যাচ ফাইলগুলি পাঠাবে। আমি কোনও সম্ভাব্য উপায় দেখতে পাচ্ছি না যে যদি এই প্রশ্নের সমাধান পাওয়া যায় তবে এটি সমাধান করে কম সমস্যা সৃষ্টি করবে - এমন stdoutএকটি ধ্রুবক ধাপে অনেকগুলি জিনিস পাঠানো হয়েছে যা কোনও ভাল কারণে দৃশ্যমান হতে পারে না।
ব্রেকথ্রু

উত্তর:


27

আমার একটি সমাধান রয়েছে যা শুধুমাত্র .cmd.batফাইলগুলিতে প্রয়োগ করতে পারে :

খুলুন regeditএবং প্রতিটি এক যান:

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
[HKEY_CLASSES_ROOT\cmdfile\shell\open\command] 

এখন "ডিফল্ট কী মান" পরিবর্তন করুন cmd.exe /k "%1" %*। এখন, প্রতিটি ব্যাচ স্ক্রিপ্ট উইন্ডো তার মৃত্যুদন্ড কার্যকর করার পরে খোলা থাকবে।

মনে রাখবেন যে এটি ব্যবহার করার মতো cmd.exe /c cmd.exe /k program.bat, অর্থাত অন্য সিএমডি ইনস্ট্যান্সটি পিতামাতার মধ্যে চালু করা হবে। আমি প্রথম /cযুক্তি ওভাররাইট কিভাবে খুঁজে পেতে পারে না ।

আপনি এটি দিয়েও করতে [exefile]পারেন তবে এক্সিকিউটেবল একটি GUI থাকলে এটি একটি খালি কনসোল বক্স দেখাবে।


4
এখানে একমাত্র সমাধান থাকার জন্য +1 যা আসলে দেওয়া প্রশ্নের উত্তর দেয়। দুর্ভাগ্যবশত, আমি মনে করি এটি হতে পারে একটি মেমরি লিক হতে পারে। সিএমডি লাইনে CMD.EXE উল্লেখ না করে কোনও পরিষেবা একটি নতুন ব্যাচ ফাইল চালু করলে কি হবে? এই কোড ব্যবহার করা হবে না যে ক্ষেত্রে? এটি একটি নন ইন্টারঅ্যাক্টিভ ডেস্কটপে একটি নতুন উইন্ডো তৈরি করতে যাচ্ছে না এবং এটি পুনরায় চালু না হওয়া পর্যন্ত এটি খোলা থাকবে?
krowe2

@ অ্যাপারসন আপনার সম্পাদনাটি অন্তর্ভুক্ত না করে কমান্ডটি ভেঙ্গে দিয়েছে *। সম্পাদনা করার সময় আরো সতর্কতা অবলম্বন করুন!
২২ মেবিট

@ না 2qubit দুঃখিত, আমি দুটি পরিবর্তে তিনটি তারকাচিহ্ন মুছে ফেলা যে লক্ষ্য না। করব.
অ্যাপারসন

16

মাইক্রোসফ্ট উদ্ধৃত করুন :

কোনও কনসোল বন্ধ থাকে যখন এটিতে সংযুক্ত সর্বশেষ প্রক্রিয়াটি বন্ধ হয়ে যায় বা FreeConsole কল করে।

অন্য কথায়, Win32 কনসোল উইন্ডোটি সর্বদা বন্ধ হয়ে যাবে যখন এটির মধ্যে শেষ প্রোগ্রামটি চলছে এবং আপনি এটি পরিবর্তন করতে পারবেন না।


(16-বিট এমএস-ডস প্রোগ্রামগুলির জন্য, উইন্ডোজগুলি বৈশিষ্ট্য সংলাপে "প্রস্থান বন্ধ করুন" বিকল্পটি সরবরাহ করে তবে এটি উপরের আচরণের ব্যতিক্রম নয়: এটি এনটিভিডিএম প্রক্রিয়া যা উইন্ডোটি খোলা থাকে। এছাড়াও, এই বিকল্পটি আবার প্রতি প্রোগ্রাম।)


13
কীভাবে এবং কেন কনসোল উইন্ডো বন্ধ করা হয় তা বোঝার জন্য +1 (বেশিরভাগই কেবলমাত্র বলে যে "ওএমজি কেন এটি খুলতে পারে না !!!!!!!!!! 1111one")। এটা ডিজাইন হিসাবে আচরণ করা হয়, এবং এটি IMHO যে ভাবে থাকা উচিত। এই প্রথম কারণেই আমাদের স্ট্রিম এবং ব্যাচ ফাইলগুলি প্রথম স্থানে রয়েছে।
ব্রেকথ্রু

27
@ ব্রেকাক্রু প্রশ্ন How can I do X, না In your opinion, should I do X। এই উত্তরটি অসহায়, এটি বোঝায় এক্স অসম্ভব, যখন আংশিক সমাধান ইতিমধ্যে অন্যত্র উপস্থাপিত হয়েছে। (-1)
সুপারবেষ্ট

7

আপনার ব্যাচ ফাইলের অবস্থানটিতে কেবল একটি কমান্ড প্রম্পট খুলুন এবং যে উইন্ডোতে এটি চালানোর জন্য আপনার ব্যাচ ফাইলের নামে নিজে নিজে কী চাপুন।

1. আপনার এক্সিকিউটেবল থাকা ফোল্ডারটিতে
নেভিগেট করুন 2. শিফট-রাইট ক্লিক করুন এবং "এখানে থেকে কমান্ড উইন্ডো" নির্বাচন করুন 3. এক্সিকিউটেবলের নামে টাইপ করুন এবং
এন্টার টিপুন
4. প্রক্রিয়াটি চালানো উচিত তবে উইন্ডোটি খোলা থাকা উচিত


1
আমি Shift + রাইট ক্লিক সম্পর্কে জানতাম না। এছাড়াও, আপনি EXE কে একটি cmd উইন্ডোতে টেনে আনতে পারেন যা স্বয়ংক্রিয়ভাবে আপনার জন্য পথ রাখে।
সুপারবাইস্ট

1
এটি সাধারণত আমার জন্য কাজ করে, তবে দৃশ্যত এটি নিশ্চিত নয় কারণ আমি এখানে সমাধানটির জন্য অনুসন্ধান করছি কারণ এটি আমার বর্তমান অবস্থায় কাজ করছে না।
রনি পাইট

এটি সবচেয়ে সহজ সমাধান এবং সঠিক উত্তর হিসাবে চিহ্নিত করা আবশ্যক
উইকি কাপাদিয়া

4

cmd.exe /kকিছু ব্যাচ সঙ্গে আপনি কষ্ট দিতে হবে। ব্যাচ exit 1(ছাড়া /B) আপনার কনসোল বন্ধ করা হবে। একটি কৌশল ব্যবহার করা হয়:

cmd.exe /k cmd /c ...

সব ব্যাচ ফাইলের জন্য ডিফল্ট দ্বারা এই ব্যবহার করতে, সেট HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default)এবং HKEY_CLASSES_ROOT\batfile\shell\open\command\(default)করতে "%windir%\system32\cmd.exe" /k "%windir%\system32\cmd" /c "%1" %*


1
আমি ভেবেছিলাম যে "%*"পুরো পরামিতি তালিকাটি পাস করে, তাই এটি প্রথম প্যারামিটারটিকে বারবার পাস করবে না, একবার "%1"আবার প্রথম পরামিতি হিসাবে "%*"?
কেভিন ফেগান

1
@ কেভিনফগন আমি কারণটি যাচাই করে নিচ্ছি কিন্তু% 1 উদ্ধৃতি রাখতে হবে যার অর্থ সম্ভবত এটি সম্ভবত কিছু ক্ষেত্রে দ্বিগুণ উদ্ধৃত করা হবে। এছাড়া মধ্যে একটি পার্থক্য আছে %1 %2 %3 ..এবং %*যা আমি ডান এখন মনে করতে পারছি না কিন্তু %1 %2 %3কিছু কিছু ক্ষেত্রে যেখানে কাজ %*ব্যর্থ।
ভার্নাইট

3

আমি শুধু পড়ার পর একটি বোকা সমাধান উপর আঘাত grawity

আমার ব্যবহার কেসটি এমন একটি কনসোল পরিবেশের ব্যবস্থা করছে যেখানে আরো বেশি যুক্তিসঙ্গত সমাধানগুলি অবরুদ্ধ রয়েছে। আমার প্যাথ সেট করতে হবে এবং কিছু doskey aliases কনফিগার করতে হবে এবং শেলটিতে ডাম্প করা হবে।

আমার সমাধান (Win7 এ শুধু পরীক্ষা করা হয়েছে) cmdব্যাচ ফাইলে শেষ লাইন হিসাবে যুক্ত করুন। এটি একটি নেস্টেড কমান্ড প্রম্পট চালায় যা তার পিতামাতার পরিবেশকে উত্তরাধিকারী করে। বাচ্চা শেলটি ব্যাচ প্রক্রিয়াটি খোলা না হওয়া পর্যন্ত খোলা থাকে, কোনও সময়ে ব্যাচের কোনো শিশু প্রসেস থাকে না এবং এটিও ছাড়ে।


2

PAUSE ব্যবহার করার পরিবর্তে (প্রয়োজন অনুসারে PAUSE ব্যবহার করার জন্য আমি CHOICE বা TIMEOUT পছন্দ করি), আপনি এখানে সমাধানটি ব্যবহার করতে পারেন: 886848 / কিভাবে-থেকে-তৈরি-উইন্ডোজ-ব্যাচ-ফাইল-বিরাম-যখন-ডাবল-ক্লিক করা হয়

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

CHOICE ব্যবহার করে, আপনি ব্যবহারকারীর বিভিন্ন ধরণের পদক্ষেপ গ্রহণের জন্য প্রোগ্রামটি ব্যবহার করতে পারবেন এবং TIMEOUT ব্যবহার করে সময় বিলম্বের পরে উইন্ডোটি বন্ধ করতে পারবেন (অপ্রকাশিত)। আপনি কমান্ড প্রম্পট উইন্ডোতে থেকে ব্যাচ ফাইল চালান, এই বিরতি বিরক্তিকর হতে পারে।

লিঙ্ক সমাধানটি আপনাকে কমান্ড প্রম্পট উইন্ডো থেকে ব্যাচ ফাইল চালানো হলে বিরতিগুলি ছেড়ে দিতে চান কিনা তা নির্ধারণ করতে দেয়।

আপনি প্রদত্ত লিঙ্কে আরো পড়তে পারেন, তবে এর মূল বিষয় হল এটি পরিবেশ পরিবর্তনশীল ব্যবহার করে:

%cmdcmdline%

ব্যাচ ফাইলটি একটি কমান্ড উইন্ডো থেকে চালানো হয়েছে কিনা তা নির্ধারণ করতে।

সুতরাং, আপনি এটির মতো এটি ব্যবহার করেন:

যেখানে ব্যাচ ফাইলটি প্রস্থান করবে সেখানে আপনি এই মতো কিছু কোড যুক্ত করুন:

echo %cmdcmdline:"=-% | find /i "cmd /c --%~dpf0%-"
if %errorlevel% NEQ 0 goto :EOF
pause
goto :EOF

rem if %errorlevel% EQU 0 batch-file: %~dpf0 was executed from Windows Explorer, ...
rem if %errorlevel% NEQ 0 batch-file: %~dpf0 was executed from within a Command Prompt

1

আমি এটি পেতে সবচেয়ে ভাল উপায় শুরু করে আপনার ব্যাচ ফাইল অন্য ব্যাচ ফাইল থেকে শুরু করে কল।

তাই যদি আপনি সাধারণত go.bat নামক একটি ফাইল চালান, তবে আপনি go2.bat এর মতো কিছু নাম্বার তৈরি করবেন।

Go2.bat বিষয়বস্তু শুধু হতে হবে

start go.bat

প্রথম উইন্ডো অবিলম্বে বন্ধ, কিন্তু আপনার go.bat চলমান এক খোলা থাকে


এটি কাজ করে, আমি কেবল একটি ব্যাট ফাইলে এক্সিকিউটেবল কমান্ড প্রম্পট (1.bat) নাম রাখি যা দ্বিতীয় ব্যাট ফাইল থেকে শুরু কমান্ড ব্যবহার করে বলা হয় "শুরু করুন 1. বিট"। কমান্ড উইন্ডো খোলা থাকে।
ইজমেন্টমেন্ট

1

এটি উইন্ডোজ রেজিস্ট্রি এডিটর এর সংস্করণ 5.00 এর জন্য কাজ করে।

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
@="cmd.exe /k \"%1\" %*"

[HKEY_CLASSES_ROOT\cmdfile\shell\open\command]
@="cmd.exe /k \"%1\" %*"

উপরের cmds সংরক্ষণ করুন এমন একটি ফাইলে সংরক্ষণ করুন cmdbatfile-open.regএবং এটি চালান!


2
স্ট্যাক এক্সচেঞ্জ স্বাগতম! আমি আপনার জন্য আপনার উত্তরের বিন্যাস নির্ধারণ করেছি। বিন্যাস সাহায্যের জন্য এখানে দেখুন। এছাড়াও, যখন আপনি কোড পোস্ট করেন, তখন ঠিক কী করে তা ব্যাখ্যা করুন। আপনি কীভাবে উত্তর দিতে পারেন তা পড়তে পারেন ।
কালো আলো জ্বলছে

1

ধরুন আপনার কাছে দুইটি ব্যাচ ফাইল রয়েছে যা আপনি নিজের ইনস্ট্যান্সে চালু করতে চান এবং তাদের এক্সিকিউটেবল প্রস্থান করলে খোলা থাকে। আসুন ঐ দুটি ব্যাচ A.batএবং কল B.bat

এখন সরলতার জন্য আপনি তাদের উভয় প্রবর্তন করতে একটি ব্যাচ ফাইল থাকতে পারে, এর launch_both.batসাথে সামগ্রীগুলির সাথে কল করুন :

start cmd /k "A.bat & cmd /c"
start cmd /k "B.bat & cmd /c"

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


0

উইন্ডোজ 10 ব্যবহারকারীদের জন্য, নোট করুন যে উপরের কোনও উত্তর উইন্ডোজ 10 এর জন্য কাজ করে না।

উইন্ডোজ 10 এর জন্য, যদি আপনার কাছে স্ক্রিপ্ট অ্যাক্সেস থাকে তবে আপনাকে শেষ কোডটি শেষ করতে হবে:

read

যে কোড বন্ধ করার আগে একটি ইনপুট জন্য অপেক্ষা করবে।


উইন্ডোজ 10 (5 বছর আগে) আগে প্রশ্ন জিজ্ঞাসা করা হয়েছে মনে রাখবেন, আরো তথ্যের সাথে আপনার উত্তর সম্পাদনা করুন
Yass

0

নিম্নমানের PSIXO- এর প্রতিক্রিয়াতে - "এই উত্তরটি ইতিমধ্যে প্রশ্নে আচ্ছাদিত হয়েছিল। - Ro Yo Mi Jan 20 '16 এ 5:06" - না, এটি ছিল না। পূর্ববর্তী উত্তর ছিল: "বিরতি", যা কাজ করে না। PSIXO এর উত্তর ছিল: "& বিরতি", যা কাজ করে। ডাউনগ্রেড করার আগে আরো সাবধানে পার্স। আমি একটি আইডিএল প্রম্পট থেকে এটি দৌড়ে, এবং এটি কাজ করে:

    >>> os.system('dir ^ & pause')
    0
    >>> 

অন্য দিকে:

    >>> os.system('dir ^ pause')
    1
    >>>

কাজ করে নি (cmd প্রম্পটটি ফাঁকা হয়ে গেছে এবং আসলে একটি ত্রুটি (1) ফেরত এসেছে। আমি প্রয়োজন যে উত্তর জন্য PSIXO ধন্যবাদ। হেনরি।

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