কোনও ডিরেক্টরি উইন্ডোজে আছে কিনা তা কীভাবে পরীক্ষা করবেন?


59

আমি এই লিনাক্স / ব্যাশ স্ক্রিপ্টটি উইন্ডোজ শেলটিতে অনুবাদ করতে চাই:

if test -d myDirName; then echo "ok"; else mkdir myDirName; fi

ডিরেক্টরিটি উপস্থিত থাকলে এটি পরীক্ষা করে এবং যদি এটি তৈরি না করে।


3
প্রকৃত লিনাক্স / ব্যাশ কমান্ড কেবল হবে: mkdir -p myDirName। অপেক্ষাকৃত সহজ ব্যাশ-স্ক্রিপ্টগুলি ব্যাচ-শ * টিতে (কোনও ফাংশনের ফলাফলকে একটি ভেরিয়েবলের জন্য নির্ধারণ করে?) অনুবাদ করার চেষ্টা করার পরে দিন কাটিয়ে যাওয়ার পরে, আমি সিদ্ধান্ত নিয়েছি যে মানুষকে কেবল সাইগউইন ইনস্টল করা যায়।
মাইকেল

উত্তর:


73
@echo off
IF exist myDirName ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

বার্লোপ যোগ করেছেন

উপরোক্ত এই নির্দিষ্ট পরিস্থিতির জন্য কাজ করে, শিরোনামটি বিশেষত একটি ডিরেক্টরি জন্য পরীক্ষার বিষয়ে বলে। ফোগের মন্তব্য if exist mydirname\বরং ব্যবহারের if exist mydirnameউপায়। কিছু উত্তর \ nul ব্যবহার করেছে তবে T nul এনটি সমস্যাযুক্ত। একটি পিছনে ব্যাকস্ল্যাশ সহ কোনও ফাইল বা ডিরেক্টরি পরীক্ষা করবে। সুতরাং, একটি ডিরেক্টরি জন্য, পিছনে ব্যাকস্ল্যাশ অন্তর্ভুক্ত।


23
ফাইল অস্তিত্ব পরীক্ষা করার জন্য এটি সঠিক, তবে আপনি কীভাবে জানবেন যে এটি একটি ডিরেক্টরি? সবচেয়ে সহজ উত্তর if exist mydirname\ এবং বাকি হিসাবে আপনি বলছেন। পর্যায়ক্রমে, আপনি আসলে একটি testবাইনারি পেতে এবং এটি উইন্ডোতে ব্যবহার করতে পারেন।
phogg

@ ফোগ: এই নির্দিষ্ট প্রশ্নের প্রসঙ্গে: যদি এটি উপস্থিত থাকে তবে একটি ফাইল হয়, আপনি এখনও তা করতে পারবেন না mkdir
মাধ্যাকর্ষণ

@ গ্রায়েটি: এটি যদি উপস্থিত থাকে তবে ফাইল হয় তবে ডিরেক্টরি হিসাবে স্ক্রিপ্টটি ডিরেক্টরি হিসাবে এটি ব্যবহার করার চেষ্টা করার পরে ব্যর্থ হবে যা সম্ভবত আপনি চান না।
phogg

না থাকলে আমি কীভাবে চেক করব?
সুংগুক লিম

1
@ সানগ্লিম লিখে লিখেছেন my যদি না থাকে আমারডিরনাম exist `একইভাবে if not 1==1 echo hmm বা উপস্থিত থাকলে আমারডিরনম \ এলএলএসই ব্লহব্লাহাব্লাহ
বারলপ

20

আমি সবেমাত্র এটি জানতে পেরেছি:

কোনও নুল ফাইল উপস্থিত থাকলে আপনি পরীক্ষা করতে পারেন; ডিরেক্টরি যদি বিদ্যমান থাকে তবে এতে একটি নুল ফাইল থাকবে, যদি নুল ফাইলটি না থাকে তবে ডিরেক্টরিটি বিদ্যমান থাকে না।

IF exist myDirName/nul ( echo myDirName exists ) ELSE ( mkdir myDirName && echo myDirName created)

2
+1 - এটি if exist dirnameউইন্ডোজ এনটি-র সাথে সুনির্দিষ্ট বলে মনে হচ্ছে এমন সমস্ত উইন্ডোজ এবং এমএস-ডস সংস্করণে কাজ করে ।
মাধ্যাকর্ষণ

এটি একটি নির্বোধ কোড লিনাক্স এমকেডির-পি মাইডিরনামের সাথে তুলনা করা ছিল: পি
কিট হো

6
এটি ব্যাকস্ল্যাশ হওয়া উচিত, ফরোয়ার্ড স্ল্যাশ নয়।
নাথান গারাবেদিয়ান

@ গ্রাভিটি আপনি এটিকে কী মনে করেন, আপাতদৃষ্টিতে কিছু করার সাথে issue nul করার বিষয়টি কি? dostips.com/forum/viewtopic.php?f=3&t=4913
বারলপ

@ বারলপ: আমি মনে করি যে cmd.exe হ'ল অস্তিত্বের মধ্যে সবচেয়ে খারাপ স্ক্রিপ্টিং ভাষাগুলির মধ্যে একটি, এবং যদি সম্ভব হয় তবে তার পাওয়ারশেল বা অন্যান্য বিকল্প ব্যবহার করা উচিত। হিসাবে \nul, উইন্ডোজ এনটি তে এটি আর প্রয়োজন হয় না, প্লেইনটি if exist "C:\Program Files (x86)"কাজ করা উচিত (যদি আপনি এখনও উইন্ডোজ 98 কে টার্গেট করেন না ...)
মাধ্যাকর্ষণ

11

ব্যাকস্ল্যাশ ব্যবহার করুন, ফরোয়ার্ড স্ল্যাশ myDirName\nulনয় : নয়myDirName/nul

md foo 
echo.>bar 
for %I in (foo bar xyz) do @( 
  if exist %I ( 
    if exist %I\nul ( 
      echo -- %I is a directory 
    ) else ( 
      echo -- %I is a file 
    ) 
  ) else ( 
    echo -- %I does not exist 
  ) 
)

- foo একটি ডিরেক্টরি
- বার একটি ফাইল
- xyz বিদ্যমান নেই

সম্পাদনা: এটি কেবল তখনই কাজ করে যদি ডিরেক্টরিতে নামের অন্তর্ভুক্ত থাকে না


5

কেউ কেউ \ nul করার পরামর্শ দিয়েছেন, তবে এটি এনটি তে নির্ভরযোগ্যভাবে কাজ করবে বলে মনে হয় না

C:\blah>md abc

C:\blah>if exist abc\nul echo yes
yes

C:\blah>if exist "abc\nul" echo yes

C:\blah>

http://www.dostips.com/forum/viewtopic.php?f=3&t=4913

foxidrive writes-

The trick with nul worked in pre NT versions of windows.

Now you would use this, with a trailing backslash.

if exist "C:\abcde\" echo the folder exists

প্রশ্ন আবার

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
no

C:\blah>if exist "abcd\" (echo yes) else (echo no && mkdir abcd)
yes

C:\blah>

4

আমি ভাবছিলাম যে জো কেন ডাউন ডাউন ছিল কেন আমি উইন্ডোজ on তে একই ধরণের সমস্যাটি অনুভব করছিলাম, কারণ এটি

যদি ফাইলের নাম না থাকে \ NUL

ফাইল এবং ডিরেক্টরি উভয়ের জন্য সত্য ফিরে আসছিল। আমি www.robvenderwoude.com/battech_ifexistfolder.php এ একটি বিকল্প সমাধান পেয়েছি এবং ডিভিএফ এর ফর লুপের একটি সংশোধিত সংস্করণ নিয়ে এসেছি:

FOR %I in (foo bar xyz) DO @( PUSHD %I && (POPD & echo -- %I is a directory) || ( IF exist %I ( echo -- %I is a file ) ELSE ( echo -- %I does not exist ) ) )

ধন্যবাদ, এটিই কাজ করেছিল একমাত্র সমাধান। আমি ত্রুটি বার্তাটি এড়ানোর জন্য একটি "2> NUL" যুক্ত করেছি এবং প্রতিধ্বনির মানগুলিকে 1 (ডিরেক্টরিতে বিদ্যমান), 0 (ডিরেক্টরিটি বিদ্যমান নেই), -1 (একই নামের একটি ফাইল বিদ্যমান)% A IN এর জন্য (" সি: \ টেম্প \ foo বিন্যাস \ হ্যালো WORLD5 ") DO @ (PUSHD"% একটি "2> NUL && (POPD & echo 1) || (যদি% একটি অস্তিত্ব (ইকো -1) ছাড়া আর অন্য (echo 0
ক্রিস্টোফ

(দুঃখিত, আমি অনেকগুলি চেষ্টা করেও উত্তরে কোড হিসাবে কোডটি ফর্ম্যাট করতে পারি নি :-( 5 মিনিটের পরে মন্তব্যটির সময়সীমা সম্পাদনা করা পর্যন্ত :-()
ক্রিস্টোফ

1

ফাইল এবং ফোল্ডারগুলির মধ্যে পার্থক্য নিয়ে অনেকেরই সমস্যা রয়েছে। এর উপস্থিতি যাচাই করার পরে কেউ কি কেবল সিডি করার চেষ্টা করেছে? তারপরে সিডি হয় সফল হবে না ব্যর্থ হবে।

set MyDir = "MyTestDir"
IF exist MyDir (
    cd MyDir 
    IF ERRORLEVEL NEQ 0 (
        echo "Error: %MyDir% already exists, but it is a file!"
        exit 1
    ) else (
        # Do not forget to cd back
        cd ..
    )
) else (
   # Did not exist yet, so create it.
   mkdir MyDir
)

(1) আপনি যদি কোনও ভেরিয়েবল ব্যবহার করতে চলেছেন তবে ভেরিয়েবলটি ব্যবহার করুন। MyDirপ্রথম লাইনের পরে সমস্ত ঘটনা হওয়া উচিত %MyDir%। (২) মাল্টি-লেভেল প্যাথনাম (যেমন, ) বা এমনকি একটি পরম প্যাথনাম (যেমন, ) cd ..চাইলে %MyDir%এটি আপনি যা করতে চান তা করবে না । / এবং / অথবা ব্যবহার বিবেচনা করুন । Pictures\cats\Windowspushdpopdsetlocal
স্কট

0
exist myDirName/nul

মাইডিরনাম কোনও ফাইল হলে এটিও সত্য, এটি অনুসন্ধানের কার্যকারিতা নয়


1
C:\blah>touch abe<ENTER>C:\blah>if exist abe\nul echo err<ENTER> C:\blah>if exist abe/nul echo err<ENTER>C:\blah>আমি এনটি তে \ nul এর কোন অনুরাগী নই তবে তা নেই। আপনার কিছু আউটপুট দেওয়া উচিত ছিল।
বারলপ

-1

ফোল্ডার সন্ধান করা এই কঠিন হওয়া উচিত নয়। আমার সমাধান, পার্ল ব্যবহার করুন:

($ সিএনটি = $ # এআরজিভি; $ সিএনটি> = 0; - nt সেন্ট)
{
   যদি (-d "$ এআরজিভি [$ সিএনটি]") { 
      মুদ্রণ "আরজিভি [$ সিএনটি] = $ এআরজিভি [$ সিএনটি] একটি ফোল্ডার \ n";
      $ দির = $ এআরজিভি [$ সেন্ট];
      বিরতি;
   } অন্য {
      মুদ্রণ "আরজিভি [$ সিএনটি] = $ এআরজিভি [$ সিএনটি] কোনও ফোল্ডার নয় \ n";
   }
}

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