ব্যাচের স্ক্রিপ্ট লুপ


275

আমাকে একটি কমান্ড 100-200 বার চালিত করতে হবে, এবং এখনও পর্যন্ত আমার গবেষণাটি ইঙ্গিত দেয় যে আমাকে হয় এই কমান্ডের 100 কপি অনুলিপি / পেস্ট করতে হবে, বা একটি forলুপ ব্যবহার করতে হবে , তবে forলুপটি আইটেমগুলির একটি তালিকা প্রত্যাশা করে, তাই আমার প্রয়োজন হবে অপারেটিং করতে 200 ফাইল বা 200 আইটেমের একটি তালিকা, বিন্দুটিকে পরাস্ত করে।

আমাকে বরং কোনও সি প্রোগ্রাম লিখতে হবে এবং পরীক্ষার প্রয়োজনে আমার প্রোগ্রামটি চালানোর জন্য আমাকে কেন অন্য প্রোগ্রাম লিখতে হয়েছিল তা নথির দৈর্ঘ্যের মধ্য দিয়ে যেতে হবে না। আমার প্রোগ্রাম নিজেই পরিবর্তন একটি বিকল্প নয়।

সুতরাং, একটি কমান্ড দেওয়া হয়েছে, aআমি কীভাবে এটি Nব্যাচ স্ক্রিপ্টের মাধ্যমে বারবার সম্পাদন করব?

দ্রষ্টব্য: আমি একটি অসীম লুপ চাই না

উদাহরণস্বরূপ, জাভাস্ক্রিপ্টে এটির মতো দেখতে এখানে রয়েছে:

var i;
for (i = 0; i < 100; i++) {
  console.log( i );
} 

এটি উইন্ডোজ চলমান একটি ব্যাচের স্ক্রিপ্টে দেখতে কেমন হবে?


উত্তর:


524

for /l তোমার বন্ধু:

for /l %x in (1, 1, 100) do echo %x

1 এ শুরু হয়, একের পর এক ধাপে এবং 100 এ শেষ হয়।

%এটি কোনও ব্যাচের ফাইলে থাকলে দুটি ব্যবহার করুন

for /l %%x in (1, 1, 100) do echo %%x

(যা আমি উইন্ডোজ স্ক্রিপ্টিং সম্পর্কে সত্যই ঘৃণা করি তার মধ্যে একটি)

লুপের প্রতিটি পুনরাবৃত্তির জন্য যদি আপনার একাধিক আদেশ থাকে তবে এটি করুন:

for /l %x in (1, 1, 100) do (
   echo %x
   copy %x.txt z:\whatever\etc
)

বা একটি ব্যাচ ফাইলের মধ্যে

for /l %%x in (1, 1, 100) do (
   echo %%x
   copy %%x.txt z:\whatever\etc
)

কী:
/lনির্দেশ করে যে forকমান্ডটি একটি সংখ্যক ফ্যাশনে পরিচালিত হবে, ফাইলের
%xসেটগুলিতে অপারেটিংয়ের পরিবর্তে লুপ ভেরিয়েবল
(শুরুর মান, মান বৃদ্ধি, শেষ শর্ত [অন্তর্ভুক্ত])


2
এটি নির্ভর করে যে আমরা কীভাবে আক্ষরিক অর্থে "ডস" রেফারেন্স নেব তা নির্ভর করে। এমএস-ডস, 7.১ এর সর্বশেষতম সংস্করণটি ১৯৯ back সালের এবং এএফাইকের এই এক্সটেনশনগুলি নেই। অন্যদিকে উইন্ডোজের সাথে বিতরণ করা কমান্ড শেলগুলি অবশ্যই করুন।
কার্ল স্মট্রিক্জ

8
@ ইম্রাইটি %xলুপ ভেরিয়েবল, /l(নয় \l) এর অর্থ হ'ল ফর্ম কমান্ডটি একটি সংখ্যক ফাইলে কাজ করবে , ফাইলের সেটগুলিতে অপারেটিংয়ের পরিবর্তে।
জন

19
দৌড় দিয়ে for /l %x in (1, 1, 100) do echo %xআমি "এক্স প্রত্যাশিত নয়" পেয়ে যাই।
লাব্রাকা

2
@ ব্যবহারকারী193655 বাকী উত্তরটি পড়ুন, আপনি যদি ব্যাচের ফাইলে এটি করছেন তবে আপনাকে% s দ্বিগুণ করতে হবে।
জন

7
শেষ লুপের% x হতে হবে %% x।
ওয়াইল্ডপয়েন্টারস

63

এবং একটি ডিরেক্টরি ফাইলের পুনরাবৃত্তি করতে:

@echo off 
setlocal enableDelayedExpansion 

set MYDIR=C:\something
for /F %%x in ('dir /B/D %MYDIR%') do (
  set FILENAME=%MYDIR%\%%x\log\IL_ERROR.log
  echo ===========================  Search in !FILENAME! ===========================
  c:\utils\grep motiv !FILENAME!
)

আপনাকে অবশ্যই "সক্ষমডেলাড এক্সপেনশন" এবং! ফাইল ফাইল ব্যবহার করতে হবে! $ FILENAME NAME এর পরিবর্তে $ দ্বিতীয় ক্ষেত্রে, ডস কেবল একবার ভেরিয়েবলটির ব্যাখ্যা করবে (এটি লুপে প্রবেশের আগে) এবং প্রোগ্রামটি প্রতিটি সময় লুপ না করে।


19
এটি পোস্ট করার জন্য ধন্যবাদ - আমি জানি যে ওপি যা জিজ্ঞাসা করেছিল তা নয়, তবে এখানেই শেষ হওয়ার পরে এটি অনুসন্ধান করেছিলাম।
BrainSlugs83

24

একটি সাধারণ তবে গণিত লুপের জন্য টেমপ্লেট:

set loopcount=[Number of times]
:loop
[Commands you want to repeat]
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop

উদাহরণ: বলুন "হ্যালো ওয়ার্ল্ড!" 5 বার:

@echo off
set loopcount=5
:loop
echo Hello World!
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop
:exitloop
pause

এই উদাহরণ আউটপুট হবে:

Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Press any key to continue . . .

এটিই আমার লিন কোডটি আমার উইন 7 পিসিতে ব্যবহার করতে সক্ষম হয়েছিল। গুগল করে পাওয়া অন্য সকলের কাজ হয় না।
লাব্রাকা

2
আপনার উদাহরণে, আমি যুক্ত করব set /p loopcount="How many loops? "যাতে আপনি এটি ব্যবহারকারীর ইনপুট দিয়ে চালাতে পারেন। এটি আরও ব্যবহারিক।
1934286

8

আপনি forলুপের পরিবর্তে এটিও চেষ্টা করে দেখতে পারেন :

set count=0
:loop
set /a count=%count%+1
(Commands here)
if %count% neq 100 goto loop
(Commands after loop)

এটি বেশ ছোট এবং আমি সব সময় এটি ব্যবহার করি।


1
এটি মূলত মার্কাস কালভারের উত্তরের অনুরূপ । দয়া করে এমন উত্তর পোস্ট করবেন না যা নতুন কিছু যুক্ত করে না। ধন্যবাদ!
ফ্যাবিও বলেছেন মনিকাকে রিইনস্টেট করুন

আপস স্যরি এটি দেখতে পেল না, কেবল এটি ছুড়ে ফেলেছে এবং কেবল লুপগুলি দেখেছি ... দুঃখিত তবে :)
ব্লেজএলপি

6

অথবা আপনি যতবার লুপ করতে চান তার সংখ্যা দ্বারা আপনি একটি পরিবর্তনশীল হ্রাস / বৃদ্ধি করতে পারেন:

SETLOCAL ENABLEDELAYEDEXPANSION
SET counter=200
:Beginning
IF %counter% NEQ 0 (
echo %x
copy %x.txt z:\whatever\etc
SET /A counter=%counter%-1
GOTO Beginning
) ELSE (
ENDLOCAL
SET counter=
GOTO:eof

স্পষ্টতই, ব্যবহার FOR /Lহ'ল হাইওয়ে এবং এটি ব্যাকস্ট্রিট যা বেশি সময় নেয় তবে এটি একই গন্তব্যে পৌঁছে।


5

আপনি ফোর লুপ এড়িয়ে নিম্নলিখিত প্রভাবের জন্য কিছু করতে পারেন।

set counter=0
:loop
echo "input commands here"
SET /A counter=%counter%+1
if %counter% GTR 200
(GOTO exit) else (GOTO loop)
:exit
exit

2

আপনি একটি forবিবৃতি ছাড়া এটি করতে পারেন ^। ^:

@echo off
:SPINNER
SET COUNTP1=1

:1
CLS
 :: YOUR COMMAND GOES HERE
IF !COUNTP1! EQU 200 goto 2

SET COUNTP1=1
) ELSE (
SET /A COUNTP1+=1
)
goto 1

:2
:: COMMAND HAS FINISHED RUNNING 200 TIMES

এটির প্রাথমিক ধারণা রয়েছে। শুধু এটি একটি পরীক্ষা দিন। : P: P


1
আপনার এখানে বিলম্বিত প্রসারণের দরকার নেই।
স্টিফান

2

লেবেলগুলি ব্যবহার করে সেন্টিমিডি প্রোগ্রামিংয়ে লুপিং বাস্তবায়নের খুব প্রাথমিক উপায়

@echo off
SET /A "index=1"
SET /A "count=5"
:while
if %index% leq %count% (
   echo The value of index is %index%
   SET /A "index=index + 1"
   goto :while
)

1

ডস এটির জন্য খুব মার্জিত প্রক্রিয়া সরবরাহ করে না, তবে আমি মনে করি আপনি এখনও যুক্তিসঙ্গত প্রচেষ্টা সহ 100 বা 200 পুনরাবৃত্তির জন্য একটি লুপ কোড করতে পারেন। যদিও সেখানে একটি সংখ্যা নেইfor লুপ আপনি "লুপ ভেরিয়েবল" হিসাবে একটি অক্ষরের স্ট্রিং ব্যবহার করতে পারেন।

গোটো ব্যবহার করে লুপটি কোড করুন এবং প্রতিটি পুনরাবৃত্তির জন্য পরিবেশ পরিবর্তনশীল এক্সে আরও একটি চিহ্ন যুক্ত করতে ব্যবহার SET X=%X%@করুন @; এবং লুপটি থেকে বেরিয়ে আসার জন্য, এক্স এর মানকে 100 (বা 200) @চিহ্নের একটি স্ট্রিংয়ের সাথে তুলনা করুন ।

আমি কখনও বলিনি যে এটি মার্জিত ছিল, তবে এটি কাজ করা উচিত!


1
/aবিকল্প SETকমান্ড ডান দিকে মানের জন্য একটি সংখ্যাসূচক অভিব্যক্তি মূল্যায়ন করবো। জন্য doucmentation দেখুন সেট । সংক্ষিপ্ত কৌশলটি করা প্রয়োজন হয় না।
অ্যাডাম পোড়াদ

2
ডস জন্য, এটি হল neccessary, যেহেতু নেই set /aডস হবে। ভাগ্যক্রমে এই বিভাগটির জন্য cmd... (এই উত্তরের সময়, প্রশ্নের শিরোনাম ছিল "ডস ব্যাচের স্ক্রিপ্ট লুপ"
স্টিফান

0

ইতিমধ্যে এর মতো উত্তর ইতিমধ্যে জমা দেওয়া হয়েছে কিনা তা নিশ্চিত না, তবে আপনি এরকম কিছু চেষ্টা করতে পারেন:

@echo off
:start
set /a var+=1
if %var% EQU 100 goto end
:: Code you want to run goes here
goto start

:end
echo var has reached %var%.
pause
exit

চলক% var% একের মধ্যে বৃদ্ধি পাবে যতক্ষণ না এটি 100 এ পৌঁছায় যেখানে প্রোগ্রামটি তখন এটি সম্পাদন করে শেষ করে। আবার, নিশ্চিত হয়ে নেই যে এটি জমা দেওয়া হয়েছে বা এর মতো কিছু, তবে আমি মনে করি এটি সবচেয়ে কমপ্যাক্ট হতে পারে।


0

আমি এটি ব্যবহার করি এটি অন্যদের মতো ঠিক একই জিনিস, তবে এটি এটি লেখার আরও একটি উপায়।

@ECHO off
set count=0
:Loop
if %count%==[how many times to loop] goto end
::[Commands to execute here]
set count=%count%+1
goto Loop
:end

0

উত্তর আপনি ব্যাচের সাথে কতটা পরিচিত তার উপর নির্ভর করে, আপনি যদি এত অভিজ্ঞ না হন তবে আমি একটি লুপ ভেরিয়েবল বাড়ানোর পরামর্শ দেব:

@echo off
set /a loop=1
:repeat
echo Hello World!
set /a loop=%loop%+1
if %loop%==<no. of times to repeat> (
goto escapedfromrepeat
)
goto repeat
:escapedfromrepeat
echo You have come out of the loop
pause

তবে আপনি যদি ব্যাচের সাথে আরও অভিজ্ঞ হন, তবে আমি আরও প্রস্তাবিত পরামর্শ দেব যে আরও for /l %loop in (1, 1, 10) do echo %loopভাল পছন্দ।

             (start at 1, go up in 1's, end at 10)
for /l %[your choice] (start, step, end) do [command of your choice]

0

এখানে আমি ব্যবহার করব একটি টেম্পলেট স্ক্রিপ্ট।

@echo off
goto Loop

:Loop
<EXTRA SCRIPTING HERE!!!!>
goto Loop

exit

এটি যখন এটি শুরু করে তখন এটি প্রতিধ্বনি বন্ধ করে দেয় এবং তারপরে এটি "লুপ" চালায় তবে সেই জায়গায় এটি "লুপ" এ চলেছে (আমি আশা করি এটি সাহায্য করে hope)


0

একটি সম্পূর্ণ ত্রুটিযুক্ত লুপ

set num=0
:loop
:: insert code
set num=%num%+1
if %num% neq 10 goto loop
::insert after code code

আপনি কতবার লুপ করতে চান তা উপস্থাপন করতে আপনি যে কোনও সংখ্যায় 5 নং লাইনে 10 পরিবর্তন করে এটি সম্পাদনা করতে পারেন।


-2

(সম্পাদিত) আমি এটি তৈরি করেছি তাই এটি 100 বারের পরে বন্ধ হয়ে যায়

@echo off
goto actual
set /a loopcount=0
:actual
set /a loopcount=%loopcount% + 1
echo %random% %random% %random% %random%
timeout 1 /nobreak>nul
if %loopcount%== 100 goto stop
goto actual
:stop
exit

এটি 4 টি এলোমেলো সংখ্যার জন্মায় 1 সেকেন্ড 100 বার। এটিকে অতি দ্রুতগতিতে এগিয়ে নেওয়ার জন্য "টাইমআউট </ নভেম্বর> নুল" বের করুন out


3
প্রশ্নটি ছিল "100 - 200 বার", "অন্তহীন লুপ" নয়।
স্টিফান

-2

সম্ভবত গোটো ব্যবহার করুন use

@echo off
:Whatever
echo hello world
pause
echo TEST
goto Whatever

এটি একটি inf (অসীম) লুপ করে।


ঠিক আছে, infiniteঅনুরোধ করা থেকে কিছুটা বড় 100-200 times, তাই এই প্রশ্নের উত্তর দেয় না।
স্টিফান

প্রকৃতপক্ষে, আমি একটি নির্দিষ্ট সংখ্যক বার লুপ করতে সক্ষম হতে চেয়েছিলাম যাতে আমাকে বার বার কোনও কমান্ড পেস্ট করতে হবে না
টম জে নওয়েল

-2

আমার 2 টি উত্তর আছে পদ্ধতি 1: ব্যাচে জাভাস্ক্রিপ্ট .োকান

@if (@a==@b) @end /*

:: batch portion

@ECHO OFF

cscript /e:jscript "%~f0"


:: JScript portion */

Input Javascript here

(আমি জাভাস্ক্রিপ্ট সম্পর্কে খুব বেশি জানি না)

পদ্ধতি 2: ব্যাচে লুপ

   @echo off
    set loopcount=5
    :loop
    echo Hello World!
    set /a loopcount=loopcount-1
    if %loopcount%==0 goto exitloop
    goto loop
    :exitloop
    pause

(ধন্যবাদ ফ্লুরোসেন্টগ্রিন ৫)


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