কীভাবে ব্যবহার করবেন - অন্য ব্যাচের ফাইলের গঠন কী?


136

আমার - যদি একটি ব্যাচের ফাইলে অন্য কাঠামো সম্পর্কে একটি প্রশ্ন রয়েছে। প্রতিটি কমান্ড স্বতন্ত্রভাবে চলমান, তবে আমি "if - else" ব্লকগুলি নিরাপদে ব্যবহার করতে পারিনি যাতে আমার প্রোগ্রামের এই অংশগুলি কাজ করে না। আমি কীভাবে এই অংশগুলি চালাতে পারি? ধন্যবাদ.

IF %F%==1 IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )
ELSE IF %F%==1 IF %C%==0 (
    ::moving the file c to d
    move "%sourceFile%" "%destinationFile%"
    )

ELSE IF %F%==0 IF %C%==1 (
    ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )
ELSE IF %F%==0 IF %C%==0 (
    ::moving a directory
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )

আমার প্রশ্নটি কি পরিষ্কারভাবে পড়ছে? আমি এটি লাইন লাইন পড়েছি তবে এটি আমার পাশাপাশি রয়েছে বলে মনে হয়।
eponymous

4
হাই, স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম! একটি কোড ব্লক তৈরি করতে আপনি প্রাসঙ্গিক পাঠ্যটি হাইলাইট করতে এবং {}বোতামটি ক্লিক করতে পারেন; এটি পোস্টগুলিকে আরও পঠনযোগ্য করে তুলতে সহায়তা করে এবং মার্ক-আপের সাথে কিছু সমস্যা এড়ানো যায়। আপনার প্রশ্নের উত্তরে, এটি এখন! কোনও প্রশ্ন লেখার সময় নীচে একটি পূর্বরূপ রয়েছে যাতে আপনি দেখতে পাবেন এটি কীভাবে একবার পোস্ট করা হবে।
বেন

1
সুতরাং আপনার ব্যাখ্যা জন্য আপনাকে ধন্যবাদ। আমি এই পদ্ধতি ব্যবহার করতে যাচ্ছি।
eponymous

উত্তর:


110

আপনার সিনট্যাক্সটি ভুল। আপনি ব্যবহার করতে পারবেন না ELSE IF। দেখা যাচ্ছে যে যাইহোক আপনার সত্যিই এটির প্রয়োজন নেই। কেবল একাধিক IFবিবৃতি ব্যবহার করুন :

IF %F%==1 IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )

IF %F%==1 IF %C%==0 (
    ::moving the file c to d
    move "%sourceFile%" "%destinationFile%"
    )

IF %F%==0 IF %C%==1 (
    ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )

IF %F%==0 IF %C%==0 (
    ::moving a directory
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )

দুর্দান্ত ব্যাচের ফাইলের রেফারেন্স: http://ss64.com/nt/if.html


2
আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন, তবে আমি মনে করি না &&আপনি একাধিক ifঅবস্থায় ব্যবহার করতে পারবেন , আমার বিকল্প বাক্য গঠনটি দেখুন?
বালি সি

যদি আমার শর্তগুলি এর মতো হয় তবে: "IF% F% == 0" নিরাপদে চালান তবে যখন আমি যুক্ত করেছি && এটি চালায় না। আমি কীভাবে একটিতে দুটি শর্ত ব্যবহার করতে পারি?
eponymous

1
@ প্রোগ্রামার, আমার উদাহরণ দেখুন। আপনার যদি একাধিক শর্ত থাকে তবে ব্যবহার করুনIF condition1 IF condition 2
জেমস হিল

আমি আপনার উত্তরটি চেষ্টা করেছিলাম কিন্তু আমি এটি চালাতে পারছিলাম না তবে আমি আবার চেষ্টা করেছিলাম এবং এটি আমার কোড পিপড়ে চালিত। আমার কোডের কিছু অংশের শেষ পরিস্থিতি এর মতো: IF% F% == 1 IF% C% == 1 (:: ফাইলটি সিটিতে অনুলিপি করে "% উত্স ফাইল%" "% গন্তব্য ফাইল%") ELSE (IF % F% == 1 আইএফ% সি% == 0 (:: ফাইলটি সি-তে সরানো "% উত্সফিল%" "% গন্তব্য ফাইল%")) এলএসই (আইএফ% এফ% == 0 আইএফ% সি% == 1 (:: একটি ডিরেক্টরি সি থেকে ডি, / এস: বৌ ওলানার হারি, / ই অনুলিপি করুন: Boş ওলানর দহিল এক্সকপি "% উত্সকপিডাইরেক্টরি%" "% গন্তব্যকপিডাইরেক্টরি%" / স / ই))
উপাধিযুক্ত

4
আপনি কী ব্যবহার করতে পারবেন না তার মানে ELSE IF? এটি Win7 এর অধীনে কাজ করে works উদাহরণ দেখুন: paste2.org/G8tMae92
bryc

56

আমি মনে করি প্রশ্নে এবং কয়েকটি উত্তরে ডস-এ এই সিডোকোডটির অর্থ সম্পর্কে কিছুটা বিভ্রান্তি রয়েছে: IF A IF BX ELSE Y. এর অর্থ যদি আইএফ-এ এবং বি নয়) ত্রিশ এক্স এলএসই ওয়াই, তবে এতে ফ্যাক্টের অর্থ আইএফ এ (আইএফ বি থেন এক্স এলএসই ওয়াই)। যদি এ এর ​​পরীক্ষাটি ব্যর্থ হয় তবে তার ভিতরের পুরোটি যদি অন্যথায় উপেক্ষা করা হয়।

উল্লিখিত উত্তরের একটি হিসাবে, এক্ষেত্রে কেবলমাত্র একটি পরীক্ষা সফল হতে পারে সুতরাং 'অন্য' প্রয়োজন হয় না, তবে অবশ্যই এই উদাহরণটিতে কাজ করে, এটি যদি অন্য কোনও ক্ষেত্রে করার সাধারণ সমাধান না হয়।

এর চারপাশে প্রচুর উপায় রয়েছে। এখানে কয়েকটি ধারণা দেওয়া হল, সবগুলি বেশ কুরুচিপূর্ণ তবে হেই, এটি (বা অন্তত ছিল) ডস!

@echo off

set one=1
set two=2

REM Example 1

IF %one%_%two%==1_1 (
   echo Example 1 fails
) ELSE IF %one%_%two%==1_2 (
   echo Example 1 works correctly
) ELSE (
    echo Example 1 fails
)

REM Example 2

set test1result=0
set test2result=0

if %one%==1 if %two%==1 set test1result=1
if %one%==1 if %two%==2 set test2result=1

IF %test1result%==1 (
   echo Example 2 fails
) ELSE IF %test2result%==1 (
   echo Example 2 works correctly
) ELSE (
    echo Example 2 fails
)

REM Example 3

if %one%==1 if %two%==1 (
   echo Example 3 fails
   goto :endoftests
)
if %one%==1 if %two%==2 (
   echo Example 3 works correctly
   goto :endoftests
)
echo Example 3 fails
)
:endoftests

আমি মনে করি প্রথম দুটিতে setশতকরা চিহ্নের দরকার নেই; হওয়া উচিতset one=1
জিওফ

13

আফাইক আপনি if elseঅন্যান্য ব্যাচের মতো ব্যাচে কোনও কাজ করতে পারবেন না , এটি নেস্টেড থাকতে হবে if

নেস্টেড ifএর ব্যাচটি দেখতে আপনার ব্যাচের মতো লাগবে

IF %F%==1 IF %C%==1(
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    ) ELSE (
        IF %F%==1 IF %C%==0(
        ::moving the file c to d
        move "%sourceFile%" "%destinationFile%"
        ) ELSE (
            IF %F%==0 IF %C%==1(
            ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
            xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
            ) ELSE (
                IF %F%==0 IF %C%==0(
                ::moving a directory
                xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
                rd /s /q "%sourceMoveDirectory%"
                )
            )
        )
    )

বা জেমস পরামর্শ অনুসারে আপনার শৃঙ্খলাবদ্ধ করুন if, তবে আমি মনে করি সঠিক বাক্য গঠনটি রয়েছে

IF %F%==1 IF %C%==1(
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )

1
if else, বিশেষত সি-এর মতো ভাষাগুলিতে কেবল একটি নেস্টেড if। ব্যাচ ফাইলগুলিতে আপনাকে ব্লক দিয়ে বাসা বাঁধতে হবে না।
জোয়

পছন্দ করুন আমি জানি else ifকম্বোটি সবেমাত্র একটি নেস্টেড ifতবে আমি ভাবি নি যে আপনি সি-ভাষাগুলিতে যেমন ব্যাচের সাথে এই কীওয়ার্ডগুলি একসাথে ব্যবহার করতে পারেন।
বালি সি

হুম আমি এখনও এটি কাজ করতে পারছি না, তবে আমি এটির জন্য আপনার শব্দটি গ্রহণ করব, আপনি কী সম্পর্কে কথা বলছেন তা জানেন, আমি এই উত্তরটি দীর্ঘ সংস্করণ হিসাবে ছেড়ে দেব :)
বালি সি

আপনার উত্তরগুলির জন্য আপনাকে ধন্যবাদ তবে সেগুলির কোনওটিই আমার কোডটিতে চালিত হয়নি।
নামবিহীন

অন্য উদাহরণ: যদি 1 == 1 (প্রতিধ্বনি 1) অন্য (যদি 1 == 1 (প্রতিধ্বনি 2) অন্য (প্রতিধ্বনি 3))
জনপ 2

1

আমি বিশ্বাস করি আপনি যেমন কিছু ব্যবহার করতে পারেন

if ___ (

do this

) else if ___ (

do this

)

27
দ্বিতীয় শর্তে বিবৃতিটি "তা" করা উচিত নয়?
বিভিজে

7
@ বিভিজে না, না, আপনি সব ভুল পেয়েছেন। এটা হওয়া উচিত do fooএবং do bar
yyny

আপনি যখন লিখবেন IF (test) (command) ELSE IF (test) (command), আপনি বোঝাচ্ছেন IF (test) (command) ELSE (IF (test) (command))। এটি কখনও কখনও কাজ করতে পারে তবে আপনি যদি বিশ্বাস করেন যে এটি ডস হিসাবে গ্রহণযোগ্য একটি আসল প্রোগ্রামিং কাঠামো তবে এটি ব্যর্থ হলে সমস্যা সমাধানের জন্য পিআইটিএ হতে চলেছে।
টিম

1

কিছুটা দেরি এবং সম্ভবত জটিল-শর্তগুলির জন্য এখনও ভাল, কারণ আমি যদি অন্যথায় কাঠামো রাখতে একটি "সম্পন্ন" পরামিতি যুক্ত করতে চাই:

set done=0
if %F%==1 if %C%==0 (set done=1 & echo found F=1 and C=0: %F% + %C%)
if %F%==2 if %C%==0 (set done=1 & echo found F=2 and C=0: %F% + %C%)
if %F%==3 if %C%==0 (set done=1 & echo found F=3 and C=0: %F% + %C%)
if %done%==0 (echo do something)

0

IF...ELSE IF ব্যাচ ফাইলগুলিতে খুব ভাল কাজ করে রচনাগুলি, বিশেষত যখন আপনি প্রতিটি আইএফ লাইনে কেবলমাত্র একটি শর্তসাপেক্ষ অভিব্যক্তি ব্যবহার করেন:

IF %F%==1 (
    ::copying the file c to d
    copy "%sourceFile%1" "%destinationFile1%"
) ELSE IF %F%==0 (
    ::moving the file e to f
    move "%sourceFile2%" "%destinationFile2%" )

আপনার উদাহরণে আপনি IF...AND...IFকনস্ট্রাক্ট টাইপ ব্যবহার করেন , যেখানে একই সাথে 2 টি শর্ত পূরণ করতে হবে। এই ক্ষেত্রে আপনি এখনও IF...ELSE IFনির্মাণ ব্যবহার করতে পারেন , তবে পরবর্তী ELSE শর্তের অনিশ্চয়তা এড়াতে অতিরিক্ত বন্ধনী সহ:

IF %F%==1 (IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile1%" "%destinationFile1%" )
) ELSE IF %F%==1 (IF %C%==0 (
    ::moving the file e to f
    move "%sourceFile2%" "%destinationFile2%"))

উপরের নির্মাণটি সমান:

IF %F%==1 (
    IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile1%" "%destinationFile1%"
    ) ELSE IF %C%==0 (
    ::moving the file e to f
    move "%sourceFile2%" "%destinationFile2%"))

ব্যাচ কমান্ডগুলির প্রক্রিয়াকরণ ক্রমটি সিএমডি.এক্সই পার্সিং অর্ডারের উপর নির্ভর করে । কেবল নিশ্চিত করুন যে আপনার নির্মাণটি সেই যৌক্তিক ক্রম অনুসরণ করে এবং একটি নিয়ম হিসাবে এটি কাজ করবে। যদি আপনার ব্যাচের স্ক্রিপ্টটি ত্রুটি ছাড়াই Cmd.exe দ্বারা প্রক্রিয়া করা হয় তবে এর অর্থ এটি সঠিক (অর্থাত্ আপনার ওএস সিএমডি.এক্সই সংস্করণ দ্বারা সমর্থিত) গঠন, এমনকি অন্য কেউ বললে said


0

If..else..if এর জন্য আমার কোডের উদাহরণ এখানে
যা

প্রক্রিয়া নামের জন্য প্রম্পট ব্যবহারকারী

যদি প্রক্রিয়াটির নামটি অবৈধ হয় তবে
এটি ব্যবহারকারীর কাছে লিখুন

Error : The Processor above doesn't seem to be exist 

যদি প্রক্রিয়াটির নাম পরিষেবা হয় তবে
এটি ব্যবহারকারীকে লিখুন

Error : You can't kill the Processor above 

যদি প্রক্রিয়াটির নামটি বৈধ হয় এবং পরিষেবা না হয়
এটি ব্যবহারকারীকে লিখুন write

প্রক্রিয়া মাধ্যমে হত্যা করা হয়েছেtaskill

সুতরাং আমি এটিকে প্রসেস কিলার বাট বলেছিলাম
আমার কোডটি এখানে:

@echo off

:Start
Rem preparing the batch  
cls
Title Processor Killer
Color 0B
Echo Type Processor name to kill It (Without ".exe")
set /p ProcessorTokill=%=%  

:tasklist
tasklist|find /i "%ProcessorTokill%.exe">nul & if errorlevel 1 (
REM check if the process name is invalid 
Cls 
Title %ProcessorTokill% Not Found
Color 0A
echo %ProcessorTokill%
echo Error : The Processor above doesn't seem to be exist    

) else if %ProcessorTokill%==services (
REM check if the process name is services and doesn't kill it
Cls 
Color 0c
Title Permission denied 
echo "%ProcessorTokill%.exe"
echo Error : You can't kill the Processor above 

) else (
REM if the process name is valid and not services
Cls 
Title %ProcessorTokill% Found
Color 0e
echo %ProcessorTokill% Found
ping localhost -n 2 -w 1000>nul
echo Killing %ProcessorTokill% ...
taskkill /f /im %ProcessorTokill%.exe /t>nul
echo %ProcessorTokill% Killed...
)

pause>nul



REM If else if Template
REM if thing1 (
REM Command here 2 ! 
REM ) else if thing2 (
REM command here 2 !
REM ) else (
REM command here 3 !
REM )

0

পরিস্থিতি যদি অন্যথায় হয় আমি এখানে কিভাবে পরিচালনা করেছি

if %env%==dev ( 
    echo "dev env selected selected"
) else (
    if %env%==prod (
        echo "prod env selected"
    )
)

মনে রাখবেন এটি অন্যান্য প্রোগ্রামিং ভাষার মতো সি ++ বা জাভা-এর মতো অন্য কোনও ব্লকের মতো নয় তবে এটি আপনাকে যা করতে হবে তা করবে

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