ব্যাচ দিয়ে ফোল্ডার তৈরি করুন তবে কেবল যদি এটি ইতিমধ্যে বিদ্যমান না থাকে


440

উইন্ডোজ ব্যাচের স্ক্রিপ্টে নিম্নলিখিতটি কীভাবে করতে হয় কেউ আমাকে বলতে পারেন? ( *.bat):

  • যদি কোনও ফোল্ডার ইতিমধ্যে বিদ্যমান না থাকে তবেই তৈরি করুন

আরো বিস্তারিত, আমি নামক একটি ফোল্ডার তৈরি করতে চান VTSউপর C:\ড্রাইভ, কিন্তু শুধুমাত্র যদি ফোল্ডারের ইতিমধ্যে বিদ্যমান নয়। আমি ফোল্ডারের বিষয়বস্তু যদি ইতিমধ্যে বিদ্যমান থাকে এবং ব্যাচটি কার্যকর করা হয় তবে এটি ওভাররাইট করতে চাই না।


2
এটি সম্পর্কে কীভাবে? if not exist "%Folder%" mkdir "%New-Folder%"
বিজ্ঞানী_7

উত্তর:


622

আপনি কেবল এটি ব্যবহার করুন: if not exist "C:\VTS\" mkdir C:\VTS এটি ফোল্ডারটির অস্তিত্ব না থাকলে কেবল একটি ডিরেক্টরি তৈরি করবে।

নোট করুন যে এই অস্তিত্ব পরীক্ষাটি সত্যই ফিরে আসবে যদি ভিটিএসের উপস্থিত থাকে এবং এটি ডিরেক্টরি থাকে। যদি এটি না থাকে বা ফাইল হিসাবে থাকে তবে mkdir কমান্ডটি চলবে এবং এর ফলে একটি ত্রুটি ঘটবে। আপনি ভিটিএস ফাইল হিসাবে উপস্থিত আছে কিনা তা যাচাই করতে চাইতে পারেন।


7
এটি বাদ দিলে ভুল। আপনাকে NUL ডিভাইসটি পরীক্ষা করতে হবে, অন্যথায় এটি কাজ করবে না। এই উত্তরটির চেয়ে তিন বছর আগে আমার উত্তরটি দেখুন।
মার্টিন শ্যাপেনডঙ্ক

@ মার্টিনশ্যাপেন্ডোনক এটি উইন্ডোজ and এবং উইন্ডোজ সার্ভার ২০১২ তে কাজ করে যতদূর আমি পরীক্ষা থেকে বলতে পারি, এবং এটি কমপক্ষে এক্সপি এবং উইন্ডোজ ১০ পর্যন্ত কাজ না করে থাকলে আমি খুব অবাক হব আপনি কি শর্ত সরবরাহ করতে পারবেন? এই কাজ করে না?
jpmc26

12
NUL- এর জন্য @ jpmc26 পরীক্ষাটি হ'ল আপনি কোনও ডিরেক্টরি পরীক্ষা করে দেখেছেন তা নিশ্চিত করা। অন্যথায় শর্তটি সত্য হিসাবে মূল্যায়ন করতে পারে, এমনকি এটি একটি নিয়মিত ফাইল। এটাই পার্থক্য।
মার্টিন শ্যাপেনডঙ্ক

3
@ মার্টিনশ্যাপেন্ডোনক কি তার জন্য ট্রেলারিং স্ল্যাশ যুক্ত করা যথেষ্ট? এটি ফাইল এবং ডিরেক্টরিগুলির মধ্যে সঠিকভাবে পার্থক্য বলে মনে হচ্ছে, তবে এতে একটি দুর্বলতা রয়েছে যে যদি ফাইলটি সনাক্ত না করা হয় তবে ডিরেক্টরি তৈরি করা ব্যর্থ হবে। আমার সন্দেহ হয় এটি পরীক্ষা করার ক্ষেত্রেও সমস্যা NUL
jpmc26

6
@ jpmc26 আপনি ঠিক বলেছেন, একটি পিছনের স্ল্যাশ কাজটি করে এবং এটি কোটসের সাথে কাজ করার কারণে এটি সর্বোত্তম। পারেন ফাইল / ডিরেক্টরি মধ্যে পার্থক্য করার জন্য, এই কাজ করবে: if exist "a" if not exist "a\" (echo "it's a file") else (echo "it's a dir")। আপনার শেষ বাক্যটি সম্পর্কে, আমার সন্দেহ হয় যে অন্য কোথাও আপনার ব্যাচের ফাইলটিতে কিছু ভুল।
Mar.2.2377

221
if exist C:\VTS\NUL echo "Folder already exists"

if not exist C:\VTS\NUL echo "Folder does not exist"

আরো দেখুন Https://support.microsoft.com/en-us/kb/65994

(মার্চ 7, 2018 আপডেট; মাইক্রোসফ্ট নিবন্ধটি নিচে রয়েছে, https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994 এ সংরক্ষণাগারভুক্ত )


12
ব্যক্তিগতভাবে আমি এটিকে পছন্দ করবো কারণ এটি ইতিমধ্যে% ত্রুটিযুক্ত% সেট করে না যখন দির ইতিমধ্যে উপস্থিত রয়েছে (এজেন্ট_9191 এর উত্তর 1 এর একটি ত্রুটি কোড দেয়)
সিউউ

1
এটিও দুর্দান্ত এবং জেনেরিক এবং আপনি শর্তযুক্ত করতে চান এমন অন্যান্য ক্রিয়াকলাপে প্রয়োগ করা যেতে পারে :)
জন হামফ্রেস - w00te

3
@ আপনি হাভাবাগইগো NULএকজন এল এর সাথে রয়েছেন
মার্টিন শ্যাপেনডোনক


3
প্রকৃতপক্ষে, যদিও এই উত্তরটি দুর্দান্ত তবে "ডিরেক্টরি তৈরি করতে" এই প্রশ্নের উত্তর দেয় না :)
জ্যান-ফ্রাঙ্কোয়েস টি।

55

শুধু mkdir C:\VTSযাই হোক না কেন কল করুন । এটি কেবলমাত্র সাবডিরেক্টরি ইতিমধ্যে বিদ্যমান তা রিপোর্ট করবে।

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


20
অপ্রত্যাশিত ত্রুটি বার্তা / সতর্কতার কারণে এটি একটি খারাপ আচরণ।
সিরিয়াসএম

10
কোনও কিছুকে সর্বোত্তম অভ্যাসের লঙ্ঘন করলে "একেবারে বৈধ" বলা বুদ্ধিমানের দ্বারা অসত is অন্য উদাহরণ হিসাবে: যখন কেউ আপনাকে একটি নির্দিষ্ট সুনির্দিষ্ট সমস্যা এড়ানোর জন্য জিজ্ঞাসা করে, আপনার উত্তরটি "প্রশাসক হিসাবে কম্পিউটার চালানো উচিত" না হওয়া সত্ত্বেও যদি প্রশ্নটি স্পষ্টভাবে একটি পূর্বশর্ত হিসাবে ন্যূনতম সুরক্ষা প্রভাব নির্দিষ্ট করে না। :-)
Jouni Heikniemi

2
@ জোনি হিকনিমি / গুলি / সর্বোত্তম অনুশীলন /
জৌনির

4
ত্রুটিযুক্ত বা এরোনোর ​​সাথে কোনওরকম ভুল নেই। এগুলি প্ল্যাটফর্ম-নির্দিষ্ট ত্রুটি বার্তাপ্রেরণের দৃষ্টান্ত, এবং তারা যে উদ্দেশ্যে নির্মিত হয়েছিল তার জন্য তারা কাজ করে। প্ল্যাটফর্ম বা বার্তাপ্রেরণের পদ্ধতির বিষয়টি যাই হোক না কেন, আপনি যখন সহজেই এড়াতে পারেন তখন "এটি করার চেষ্টা করুন এবং এটির ব্যর্থ হলে পুনরুদ্ধার করুন" - এবং এইভাবে সুস্পষ্ট ডকুমেন্ট - সাধারণ ত্রুটির ক্ষেত্রে সুপারিশ করব না। অতএব, আমি "উপস্থিত না থাকলে" -স্টাইলটি আরও উন্নত। তবে, আমি চাই না বা সর্বোত্তম অনুশীলনগুলি গঠনের বিষয়ে কোনও বিতর্কের গভীরে যেতে চাই না। কারও আপত্তি করার আমার কোনও উদ্দেশ্য ছিল না, কেবল আমার ডাউনটাতে স্পষ্ট করতে চেয়েছিলাম।
Jouni Heikniemi

4
কেবল ত্রুটিটিকে উপেক্ষা করার সমস্যা হ'ল এটি কেন ব্যর্থ হয়েছে তা আপনি জানেন না । ডিরেক্টরিটি ইতিমধ্যে বিদ্যমান থাকার কারণে এটি ব্যর্থ হতে পারে, কারণ সেই ডিরেক্টরিতে ব্যবহারকারীর অনুমতি নেই, কারণ প্যারেন্ট পথটি ছিল না, বা ডিস্ক ব্যর্থ হয়েছে। "এটি উপস্থিত না থাকলে তৈরি করুন" প্রথম ব্যতীত সকল ক্ষেত্রে ব্যর্থ হওয়া উচিত। যদিও এই উত্তরটি সমস্ত ক্ষেত্রে ত্রুটি ঘটায়। সে কারণেই এটি একটি ব্যাচের স্ক্রিপ্টের জন্য অনুপযুক্ত। -1
jpmc26

38
mkdir C:\VTS 2> NUL

একটি ফোল্ডার নামক তৈরি VTSএবং আউটপুট A subdirectory or file TEST already existsকরতেNUL

অথবা

(C:&(mkdir "C:\VTS" 2> NUL))&

ড্রাইভ চিঠি পরিবর্তন C:, mkdirচাই, আউটপুট ত্রুটি NULএবং পরবর্তী কমান্ড চালানো।


পাওয়ারশলে এই কাজ করার কোনও উপায় আছে কি? এটি NULআউটপুট ফাইল হিসাবে সমর্থন করে বলে মনে হচ্ছে না ।
অ্যারন ফ্রাঙ্ক

30
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)

1
অন্যরা যেমন নির্দেশ করেছে এবং আপনি শীর্ষের রেট দেওয়া উত্তরটি দেখে থাকতে পারেন, আপনার নামের একটি ফাইল থাকলে এটি কাজ করে না log। এটি একটি সূক্ষ্ম পার্থক্য, তবে এটি আপনার স্ক্রিপ্টগুলিতে হার্ড-টু-বগ বাগের দিকে নিয়ে যাবে।
আবেল

20

আমি এইভাবে ব্যবহার করি, ডিরেক্টরিটি আপনি যে ডিরেক্টরিটি নির্দিষ্ট করেছেন ঠিক একই নাম ছাড়া এক্সটেনশন ছাড়াই কোনও ফাইলের মধ্যে উপস্থিত থাকার জন্য ডিরেক্টরি নামের শেষে একটি ব্যাকস্ল্যাশ করা উচিত , কখনও "সি: \ ভিটিএস" ব্যবহার করবেন না কারণ এটি কোনও ফাইল হতে পারে "ভিটিএস" নামটি " সি:" বিভাজনে সংরক্ষিত রয়েছে , সঠিক উপায়টি হ'ল "সি: \ ভিটিএস \" ব্যবহার করা , ভিটিএসের পরে ব্যাকস্ল্যাশ পরীক্ষা করা , সঠিক পদ্ধতিটি

@echo off
@break off
@title Create folder with batch but only if it doesn't already exist - D3F4ULT
@color 0a
@cls

setlocal EnableDelayedExpansion

if not exist "C:\VTS\" (
  mkdir "C:\VTS\"
  if "!errorlevel!" EQU "0" (
    echo Folder created successfully
  ) else (
    echo Error while creating folder
  )
) else (
  echo Folder already exists
)

pause
exit

3
আপনার সমাধানটি বিশেষত আকর্ষণীয়, আপনি হ'ল এটি হ'ল !errorlevel!বিলম্বিত প্রসার। অন্যথায়, ভেরিয়েবলটি ERRORLEVELপ্রথম প্রবেশের আগে পার্স করা হবে if(অর্থাত্ পার্স সময়)। এখন এটি কার্যকর করার সময় পার্স করা হয়েছে, সুতরাং এটি এর ফলাফল ক্যাপচার করতে পারে mkdir। আপনি এটিতেও সঠিক, যদিও আপনি অস্তিত্বের জন্য পরীক্ষা করেছেন, তবুও আপনার সাফল্যের জন্য পরীক্ষা করা উচিত (মনে করুন: অ্যাক্সেস অস্বীকৃত ত্রুটি, উদাহরণস্বরূপ)। অন্যদের তুলনায় খুব ভাল সমাধান, +10 !!!
আবেল

17

তুমি ব্যবহার করতে পার:

if not exist "C:\VTS\" mkdir "C:\VTS"

আপনি যে কোনও অনুপস্থিত ফাইল প্রতিস্থাপন করতে কোডটি প্রসারিত করতে পারেন।

if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"

0

আমি এটি আমার স্ক্রিপ্টের জন্য তৈরি করেছি আমি আমার কাজটি আইবামের জন্য ব্যবহার করি।

:CREATES A CHECK VARIABLE

set lookup=0

:CHECKS IF THE FOLDER ALREADY EXIST"

IF EXIST "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\" (set lookup=1)

:IF CHECK is still 0 which means does not exist. It creates the folder

IF %lookup%==0 START "" mkdir "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.