বিএটি স্ক্রিপ্টে আপেক্ষিক পথ


130

আমার ইউএসবি ড্রাইভে আমার নিজের প্রোগ্রাম ফোল্ডারটি এখানে:

Program\
     run.bat
     bin\
         config.ini
         Iris.exe
         library.dll
         etc.

আমি ব্যবহার করতে চাই run.bat শুরু Iris.exe

আমি এটি ব্যবহার করতে পারি না: F:/Program/bin/Iris.exeএকটি শর্টকাটের মতো, কারণ কখনও কখনও এটি ড্রাইভ হিসাবে সংযুক্ত হয় না F:( যেমন E: বা G:)

ড্রাইভ লেটার নির্বিশেষে কাজ করতে আমার ব্যাট ফাইলটিতে কী লিখতে হবে?

আমি বিএটি ফাইলে এটি চেষ্টা করেছি:

"\bin\Iris.exe"

কিন্তু এটা কাজ করে না।

উত্তর:


275

আপনার ব্যাচ ফাইলে এটি ব্যবহার করুন:

%~dp0\bin\Iris.exe

%~dp0 ব্যাচ স্ক্রিপ্টটি যে ফোল্ডারে থাকে সেই ফোল্ডারের পুরো পথটির সমাধান করে।


7
প্রকৃতপক্ষে এটি এমন কিছু সমাধান করে C:\myDir\\bin\Iris.exe(ডাবল-ব্যাকস্ল্যাশটি নোট করুন)। এটি এখনও কাজ করে তবে বিনকে "ক্লিনার" বলে মনে হওয়ার আগে ব্যাকস্ল্যাশ ফেলে রাখা? -> %~dp0bin\Iris.exe
মোজব্বোজ

8
@ মোজব্বুজ আপনি যদি গ্যারান্টি দিতে পারেন তবে %~dp0সর্বদা পিছনে পিছনে থাকা উভয় বিবৃতি কার্যকর হবে। অন্যথায় অতিরিক্ত ব্যাকস্ল্যাশযুক্ত একটি নিরাপদ বৈকল্পিক।
আনসার ভিচার্স

4
ঠিক আছে, এটি একটি বিষয়। আমি কেবল দুটি ভিন্ন উইন্ডোজ 7 মেশিনে এটি পরীক্ষা করেছি, অন্য কোথাও আলাদা হতে পারে (এক্সপি, ভিস্তা ওডার উইন্ডোস 8 -> আমি জানি না তবে: মাইক্রোসফ্ট লজিক এবং আমি এটি সম্পর্কে কোনও ডকস খুঁজে পাইনি;))। যাইহোক, আমি দেখতে পেয়েছি যে "%~dp0\bin\Iris.exe"পাথটিতে একটি সাদা জায়গা রয়েছে বলে আমার চারপাশে উদ্ধৃতি চিহ্নগুলি লাগাতে হয়েছিল ( :) সত্যই নিশ্চিত হওয়া উচিত যে এটি প্রতিটি কম্পিউটারে কাজ করে।
মোজব্বুজ

1
আপনি নিশ্চিত করতে পারেন যে পিছনে রয়েছে SET "scriptdir=%~dp0"এবং পরের লাইনে আছে IF NOT "%scriptdir:~-1%"=="\" SET "scriptdir=%scriptdir%\"। আমি এমন ঘটনা দেখেছি যেখানে পথের মাঝখানে ডাবল ব্যাকস্ল্যাশ সফ্টওয়্যারটি ভেঙে যায়।
লজিকডেমোন

40

নীচের কোডটি ব্যবহার করে প্রয়োজনীয় সমস্ত ফাইলের বৈশিষ্ট্য পেতে পারেন:

FOR %%? IN (file_to_be_queried) DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Parent Folder        : %%~dp?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)

24

আমি খুঁজে পেয়েছি যে %CD%স্ক্রিপ্টটি যে পথটি কল করা হয়েছিল তা দেয় এবং স্ক্রিপ্টের পাথটি নয়, তবে স্ক্রিপ্টটির %~dp0পথই দেবে।


14

আপনার বর্তমান ডিরেক্টরিটি ব্যবহার করতে সক্ষম হওয়া উচিত

"% সিডি%" \ বিন \ Iris.exe


1
বর্তমান ডিরেক্টরিটি না হলে এটি ব্যর্থ হয় Program, আপনি যখন run.batএক্সপ্লোরার থেকে ডাবল ক্লিক করেন তখন এটি ঘটবে । %CD%বর্তমান ডিরেক্টরী হয় %~dp0হয় ব্যাচ ফাইল নিজেই ডিরেক্টরির
Jeb

5

হয় bin\Iris.exe (কোনও অগ্রণী স্ল্যাশ নেই - কারণ এর অর্থ মূল থেকে শুরু করুন)
বা \Program\bin\Iris.exe(পুরো পথ)


1
বিন \ আইরিস.এক্স.এটি কাজ করছে না :( আমি রুটটি ব্যবহার করতে পছন্দ করি না, কারণ কোনও দিন সম্ভবত আমি এই দিরকে অন্য কোনও স্থানে নিয়ে যাব And এবং যদি আমি ওএস থেকে বর্তমান পরম পথটি জিজ্ঞাসা করি তবে আমি কী ব্যবহার করব? এটি
বিনে এক্সে

আমি ধরে নিয়েছিলাম যে বর্তমান ড্রাইভটি হবে ইউএসবি স্টিকের ড্রাইভ, এবং বর্তমান ফোল্ডারটি হবে \Program- এটি কি তাই না? আপনি cd.exe চালানোর চেষ্টা করার আগে লাইনে একটি সাধারণ কমান্ড দিয়ে আপনি এটি প্রদর্শন করতে পারেন
AjV Jsy

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