প্রথমত, আমি এই বিষয়টি দেখেছি কিন্তু আমি এটি বুঝতে পারি না।
প্রশ্ন:
D:\path\to\file.bat
নিম্নলিখিত সামগ্রী সহ একটি ব্যাচ ফাইল রয়েছে :
echo %cd%
pause
আউটপুট হল:
C:\
এটাই হবে D:\path\to
আমি কি ভুল করছি?
প্রথমত, আমি এই বিষয়টি দেখেছি কিন্তু আমি এটি বুঝতে পারি না।
প্রশ্ন:
D:\path\to\file.bat
নিম্নলিখিত সামগ্রী সহ একটি ব্যাচ ফাইল রয়েছে :
echo %cd%
pause
আউটপুট হল:
C:\
এটাই হবে D:\path\to
আমি কি ভুল করছি?
উত্তর:
সিস্টেমের পঠনযোগ্য কেবল পরিবর্তনশীল %CD%
ব্যাচের ফাইলের অবস্থানের পরিবর্তে ব্যাচের কলারের পথ ধরে রাখে।
আপনি ব্যাচ স্ক্রিপ্টের নামটি নিজেই যেমন ব্যবহারকারী দ্বারা টাইপ করতে পারেন %0
(যেমন scripts\mybatch.bat
)। প্যারামিটার এক্সটেনশনগুলি এতে প্রয়োগ করা যেতে পারে তাই %~dp0
ব্যাচ স্ক্রিপ্টে (উদাহরণস্বরূপ W:\scripts\
) ড্রাইভ এবং পাথ ফিরে আসবে এবং পূর্ণ পথের %~f0
নাম (যেমন W:\scripts\mybatch.cmd
) ফিরে আসবে ।
আপনি এই সিনট্যাক্সটি ব্যবহার করে ব্যাচ স্ক্রিপ্টের মতো একই ফোল্ডারের অন্যান্য ফাইলগুলি উল্লেখ করতে পারেন:
CALL %0\..\SecondBatch.cmd
এটি এমনকি সাবরুটিনেও ব্যবহার করা যেতে পারে, Echo %0
কল লেবেল দেবে কিন্তু, echo "%~nx0"
আপনাকে ব্যাচের স্ক্রিপ্টের ফাইলের নাম দেবে।
যখন %0
পরিবর্তনশীল প্রসারিত হয়, ফলে উদ্ধৃতি চিহ্নগুলির সাথে প্রদত্ত হয়।
stm.sql
যে D:\Dir1\Dir2\stm.sql
। আমার mysql.exe -u root -p mysql < %cd%\stm.sql
সেই stm.sql কমান্ডগুলি কার্যকর করতে হবে।
*.bat
বা *.sh
?
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
echo %~dp0
ব্যাচের অবস্থানের পথে ফিরে আসবে। echo %~f0
ফাইলের নাম সহ ব্যাচে ফিরে আসবে।
খুব সহজ:
setlocal
cd /d %~dp0
File.exe
cd /d %~dp0
ব্যাচ ফাইলের প্রথম লাইন হিসাবে ব্যবহার করেছি এবং কাজ করেছি
আপনার .bat ফাইলের মধ্যে:
set mypath=%cd%
আপনি এখন %mypath%
ফাইলটির ফাইলের পথটি উল্লেখ করতে ভেরিয়েবলটি ব্যবহার করতে পারেন .bat
। পথটি যাচাই করার জন্য সঠিক:
@echo %mypath%
উদাহরণস্বরূপ, DIR.bat
নিম্নলিখিত ফাইলগুলির সাথে কল করা একটি ফাইল
set mypath=%cd%
@echo %mypath%
Pause
ডিরেক্টরি থেকে চালানো g:\test\bat
ডস কমান্ড উইন্ডোতে সেই পথটিকে প্রতিধ্বনিত করবে।
আমার ব্যাচ ফাইলগুলির শীর্ষে আমি যা ব্যবহার করি তা এখানে। আমি আমার টেম্পলেট ফোল্ডারটি থেকে কেবল অনুলিপি / আটকান।
@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
অবশ্যই, পাওয়ারশেল এটি করে এবং আরও অনেক কিছু করে।
set batdir=%CD%
) থেকে সাবধান থাকুন । এটি ঠিক নয়, কারণ এটি কলারের পথে, ব্যাট ফাইল নিজেই নয়। এক্সিকিউটিভ ব্যাট ফাইলের পাথ পাওয়ার একমাত্র বৈধ উপায় %~dp0
।