বর্তমান ব্যাচফাইল ডিরেক্টরিটি পান


283

প্রথমত, আমি এই বিষয়টি দেখেছি কিন্তু আমি এটি বুঝতে পারি না।

প্রশ্ন:

D:\path\to\file.batনিম্নলিখিত সামগ্রী সহ একটি ব্যাচ ফাইল রয়েছে :

echo %cd%
pause

আউটপুট হল:

C:\

এটাই হবে D:\path\to

আমি কি ভুল করছি?


7
আপনার কোনও প্রশ্নের সমস্ত উত্তর পড়তে হবে, বিশেষত উচ্চ ভোট প্রাপ্তরা, কেবল গ্রহণযোগ্য উত্তরই নয়। আপনার পোস্ট লিঙ্কে সর্বোচ্চ স্কোর উত্তর ইতিমধ্যে আপনার প্রশ্নের উত্তর।
dbenham

4
আপনি যদি সি: in এ থাকেন তবে আপনি যখন ব্যাচ ফাইলের নাম টাইপ করেন তখন সি:%% সিডি% মুদ্রণ করবে।
ফক্সিড্রাইভ

উত্তর:


496

সিস্টেমের পঠনযোগ্য কেবল পরিবর্তনশীল %CD%ব্যাচের ফাইলের অবস্থানের পরিবর্তে ব্যাচের কলারের পথ ধরে রাখে।

আপনি ব্যাচ স্ক্রিপ্টের নামটি নিজেই যেমন ব্যবহারকারী দ্বারা টাইপ করতে পারেন %0(যেমন scripts\mybatch.bat)। প্যারামিটার এক্সটেনশনগুলি এতে প্রয়োগ করা যেতে পারে তাই %~dp0ব্যাচ স্ক্রিপ্টে (উদাহরণস্বরূপ W:\scripts\) ড্রাইভ এবং পাথ ফিরে আসবে এবং পূর্ণ পথের %~f0নাম (যেমন W:\scripts\mybatch.cmd) ফিরে আসবে ।

আপনি এই সিনট্যাক্সটি ব্যবহার করে ব্যাচ স্ক্রিপ্টের মতো একই ফোল্ডারের অন্যান্য ফাইলগুলি উল্লেখ করতে পারেন:

CALL %0\..\SecondBatch.cmd

এটি এমনকি সাবরুটিনেও ব্যবহার করা যেতে পারে, Echo %0কল লেবেল দেবে কিন্তু, echo "%~nx0"আপনাকে ব্যাচের স্ক্রিপ্টের ফাইলের নাম দেবে।

যখন %0পরিবর্তনশীল প্রসারিত হয়, ফলে উদ্ধৃতি চিহ্নগুলির সাথে প্রদত্ত হয়।

ব্যাচের পরামিতিগুলিতে আরও


1
দেখো, আমি চালানোর জন্য প্রয়োজন হবে না stm.sqlযে D:\Dir1\Dir2\stm.sql। আমার mysql.exe -u root -p mysql < %cd%\stm.sqlসেই stm.sql কমান্ডগুলি কার্যকর করতে হবে।
হামেদ কামরাভা

@ হামেদকমরাভা কি আমার এসকিউএল ব্যাচের পক্ষে? ভালো ব্যাচ ফাইল *.batবা *.sh?
Stoleg

@ Stoleg-, বাস্তবিকপক্ষে আছে 2 ফাইল D:\Dir1\Dir2\batchfile.batএবং D:\Dir1\Dir2\stm.sql। batchfile.bat সামগ্রীটি: mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sqlএবং stm.sql সামগ্রীটি মাইএসকিউএল কমান্ড commands
হামেদ কামরাভা

1
সিস্টেমের পঠনযোগ্য কেবল পরিবর্তনশীল% সিডি% ব্যাচের কলারের পথ ধরে রাখে, ব্যাচ ফাইলের অবস্থান নয়।
Stoleg

34
echo %~dp0ব্যাচের অবস্থানের পথে ফিরে আসবে। echo %~f0ফাইলের নাম সহ ব্যাচে ফিরে আসবে।
Stoleg

119

খুব সহজ:

setlocal
cd /d %~dp0
File.exe

9
কোডটি ছোট তবে এটি বোঝা সহজ নয়। এই ফাইল.এক্সি কি? বর্তমান ডিরেক্টরি পথটি%% dp0 এ সঞ্চিত আছে?
ইভাইলো বারদারোভ

এই উত্তরটি আসলে প্রশ্নের উত্তর দেয় বলে আমি মনে করি। যশ।
macetw

3
আমি সবেমাত্র cd /d %~dp0ব্যাচ ফাইলের প্রথম লাইন হিসাবে ব্যবহার করেছি এবং কাজ করেছি
এমকেবি

সেটলোকাল দরকার কেন? এটা ছাড়া ভাল ফিরে?
টুডো

1
@ টি.ডিডিউয়া "সেটলোকাল" ব্যাচ ফাইলটি শেষ না হওয়া বা "এন্ডলোকাল" না আসা পর্যন্ত বর্তমান ডিরেক্টরি অন্তর্ভুক্ত করে কোনও পরিবেশগত পরিবর্তন ঘটায়। আপনি যদি পরিবেশের ভেরিয়েবল বা বর্তমান ডিরেক্টরি পরিবর্তন করতে চলেছেন তবে এটি ভাল ফর্ম।
জেমি

30

আপনার .bat ফাইলের মধ্যে:

set mypath=%cd%

আপনি এখন %mypath%ফাইলটির ফাইলের পথটি উল্লেখ করতে ভেরিয়েবলটি ব্যবহার করতে পারেন .bat। পথটি যাচাই করার জন্য সঠিক:

@echo %mypath%

উদাহরণস্বরূপ, DIR.batনিম্নলিখিত ফাইলগুলির সাথে কল করা একটি ফাইল

set mypath=%cd%
@echo %mypath%
Pause

ডিরেক্টরি থেকে চালানো g:\test\batডস কমান্ড উইন্ডোতে সেই পথটিকে প্রতিধ্বনিত করবে।


1
এটি সর্বোত্তম এবং সহজ সমাধান
নানি

7
এটি কোনও ভাল সমাধান নয় কারণ এটি ব্যাচের স্ক্রিপ্টটিকে অন্য কোনও পথ থেকে অন্য কোনও ফাইল থেকে কল করা বিবেচনায় নেয় না।
কিউশনেশনম্যান

এছাড়াও যখন এলিভেটেড অনুমতি হিসাবে চালিত হয়%% সিডি% ফেরত সি: \ উইন্ডোজ \ সিস্টেম 32 কিন্তু ডিরেক্টরিটি যেখানে এটি সঞ্চিত থাকে তা নয়।
প্রভিয়ানন্দাস

9

আমার ব্যাচ ফাইলগুলির শীর্ষে আমি যা ব্যবহার করি তা এখানে। আমি আমার টেম্পলেট ফোল্ডারটি থেকে কেবল অনুলিপি / আটকান।

@echo off
:: --HAS ENDING BACKSLASH
set batdir=%~dp0
:: --MISSING ENDING BACKSLASH
:: set batdir=%CD%
pushd "%batdir%"

বর্তমান ব্যাচ ফাইলের পথটিকে% ব্যাটডির%-তে নির্ধারণ করে আপনাকে এই ব্যাচ ফাইলটি যেখানে পরিবর্তন হয় তা নির্বিশেষে বর্তমান ব্যাচ ফাইলের পরবর্তী স্টেম্টে কল করার অনুমতি দেয়। PUSHD ব্যবহারের ফলে আপনাকে এই ব্যাচ ফাইলটির পাথটি মূল% বাটডিয়ার% তে দ্রুত সেট করতে POPD ব্যবহার করতে পারবেন। মনে রাখবেন,% batdir% ExtraDir বা% batdir% \ ExtraDir (উপরের সংস্করণটির উপর নির্ভর করে, ব্যাকস্ল্যাশ শেষ হবে কি না) উপর নির্ভর করে যদি পাথের ফাঁকা স্থান রয়েছে (যেমন "% batdir% ExtraDir" )। আপনি সর্বদা PUSHD% ~ dp0 ব্যবহার করতে পারেন। [https: // ss64.com/ nt / syntax-args .html] এর (% ~) প্যারামিটারে আরও বেশি রয়েছে has

নোট করুন যে কোনও রেখার শুরুতে (: :) ব্যবহার করা এটিকে একটি মন্তব্য লাইনে পরিণত করে। আরও গুরুত্বপূর্ণ, :: ব্যবহার আপনাকে পুনঃনির্দেশক, পাইপ, বিশেষ অক্ষর (অর্থাত্ <> | ইত্যাদি) যোগ করতে দেয়।

:: ORIG STMT WAS: dir *.* | find /v "1917" > outfile.txt

অবশ্যই, পাওয়ারশেল এটি করে এবং আরও অনেক কিছু করে।


2
দুর্দান্ত উত্তর, অনেক অনেক ধন্যবাদ! :-) আপনার দ্বিতীয় কৌশলটি ( set batdir=%CD%) থেকে সাবধান থাকুন । এটি ঠিক নয়, কারণ এটি কলারের পথে, ব্যাট ফাইল নিজেই নয়। এক্সিকিউটিভ ব্যাট ফাইলের পাথ পাওয়ার একমাত্র বৈধ উপায় %~dp0
মিচ ম্যাকম্যাবার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.