যদি একই ব্যাচের ফাইল ব্যবহার করে একই নামের একটি ইতিমধ্যে উপস্থিত থাকে তবে সংখ্যাযুক্ত ফোল্ডার তৈরি করা হচ্ছে


0

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

G:\logs\computer-1
G:\logs\computer-2
G:\logs\computer-3
G:\logs\...

এখনও অবধি, আমি এই টুকরা কোডটি ব্যবহার করার চেষ্টা করেছি

set usb=G:
SET logdir="%usb%\logs\%computername%"
FOR /L %%F IN (1,1,25) DO (
IF NOT EXIST "%usb%\logs\%computername%-%%F" (
md "%usb%\logs\%computername%-%%F"
SET logdir=%usb%\logs\%computername%-%%F)
goto :eof
)
ECHO %logdir%

তবে আমি যা পরিচালনা করি তা হ'ল লুপটি প্রস্থান করা, আমি করতে চাই এমন কিছু নয়।

উত্তর:


1
setlocal

set dir=G:\logs\%computername%

set n=0
md "%dir%"||call :a %n%

rem rest of your script    

exit

rem the a label is set after the exit function to prevent it from
rem running in the actual script when it's not required.

:a
set /a n+=1
md "%dir%-%n%"||goto a
exit /b

এই স্ক্রিপ্টটি আপনি বর্ণিত পদ্ধতিতে সংখ্যাযুক্ত ফোল্ডার তৈরি করবে।

ব্যাচে, সিনট্যাক্সটি setহ'ল set "foo=bar"। যখন ভেরিয়েবলগুলিতে সিনট্যাক্স ব্রেকিং অক্ষর যেমন & বা | অন্তর্ভুক্ত থাকে তখন উদ্ধৃতিগুলি প্রয়োজনীয়। ভেরিয়েবলগুলি ঘোষণাকালে স্পেসের জন্য কোট লাগবে না। set foo="bar"foo সেট করে "bar"


0

বিকল্প 1 - একবারে সমস্ত ফোল্ডার তৈরি করা

আপনার প্রশ্নের প্রারম্ভিক কোডের উপর ভিত্তি করে, এটি কোনও এক্সটেনশন ( সর্বোচ্চ 1 মাধ্যমে ) সহ একটি ফোল্ডার তৈরি করবে যদি এটি একটি কলে ইতিমধ্যে উপস্থিত না থাকে:

SET usb=G:

SET logdir="%usb%\logs"

SET max=25

FOR /L %%F IN (1,1,%max%) DO (
    IF NOT EXIST "%logdir%\%computername%-%%F" ( 
    md "%logdir%\%computername%-%%F")
    )

যাত্রা।

সমস্ত একবারে ব্যাচ ফোল্ডার তৈরির উদাহরণ

বিকল্প 2 - ক্রমবর্ধমান ফোল্ডার তৈরি করা

দ্বিতীয় বিকল্প হিসাবে, নীচের সমাধানটি একবার কল প্রতি একবার ইনক্রিমেন্টাল ফাইল এক্সটেনশন যুক্ত করবে (ডিরেক্টরিতে ফোল্ডারের মোট সংখ্যার ভিত্তিতে)। তেমনি, এটি বিদ্যমান ফোল্ডারগুলিকে উপেক্ষা করে:

SET usb=G:

SET logdir="%usb%\logs"

FOR /f %%A IN ('dir /b /ad %logdir%^|find /c /v "" ') DO SET fcount=%%A

SET /a fcount+=1

IF NOT EXIST "%logdir%\%computername%-%%A" (
    MD "%logdir%\%computername%-%fcount%")

যাত্রা।

প্রতি কল প্রতি একবার ব্যাচ ফোল্ডার তৈরি উদাহরণ

আদেশ সহকারে

  • প্রথম সমাধান সর্বদা সর্বোচ্চের মাধ্যমে 1 টি ফোল্ডার তৈরি করে ।

  • দ্বিতীয় সমাধানটিতে একটি দুর্বলতা রয়েছে যে এটি একটি ডিরেক্টরিতে মোট ফোল্ডার গণনা ব্যবহার করে। সুতরাং এটি সংখ্যাসূচক এক্সটেনশানগুলির সাথে একই নামযুক্ত ফোল্ডার তৈরি করবে, কোনও ফাঁক ছাড়াই সত্য অর্ডার করা ক্রম (যেমন -1, -2, -3, -4 ...) প্রয়োজন:

    • ডিরেক্টরিতে সমস্ত ফোল্ডারের নাম একই হওয়া দরকার।
    • যে কোনও অতিরিক্ত ফোল্ডার (যেমন ম্যানুয়ালি যুক্ত হওয়া) এই ক্রমটি বজায় রাখে (যেমন যদি কম্পিউটার -6 উপস্থিত থাকে তবে পরবর্তী ম্যানুয়ালি যুক্ত ফোল্ডারটি অবশ্যই কম্পিউটার -7 হওয়া উচিত )।

আমার কেবল এমন কিছু দরকার যা ফোল্ডার ওভাররাইটিং প্রতিরোধ করতে গণনা করবে এবং কোন ফোল্ডারটি প্রথমে এবং পরে দ্বিতীয়টি এসেছিল তা নির্দেশ করে।
ফ্ল্যাভার-ডি

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