উইন্ডোজের ব্যাচ স্ক্রিপ্টের পথ কীভাবে পাবেন?


328

আমি জানি যে %0ব্যাচের স্ক্রিপ্টের পুরো পথ রয়েছে, যেমনc:\path\to\my\file\abc.bat

আমি pathসমান হতে হবেc:\path\to\my\file

আমি কীভাবে এটি অর্জন করতে পারি?




1
বিটিডাব্লু: ব্যাটটিকে আপেক্ষিক কমান্ড লাইনের সাথে ডাকা হলে% 0 সম্পূর্ণ পথটি ধারণ করে না। সুতরাং "% ~ dpf0" এই ক্ষেত্রে আরও নির্ভরযোগ্য হবে।
রেকর্ড করা হয়েছে

উত্তর:


561

%~dp0ডিরেক্টরি হবে। সমস্ত পাথ সংশোধনকারী সম্পর্কে কিছু ডকুমেন্টেশন এখানে । মজার জিনিস :-)

চূড়ান্ত ব্যাকস্ল্যাশ অপসারণ করতে, আপনি এর :n,mমতো স্ট্রিংয়ের বাক্য গঠন ব্যবহার করতে পারেন :

SET mypath=%~dp0
echo %mypath:~0,-1%

দুর্ভাগ্যক্রমে %0সিনট্যাক্সের সাথে সিনট্যাক্স যুক্ত করার উপায় আছে বলে আমি বিশ্বাস করি না :~n,m


7
দুর্দান্ত ... আমি ব্যবহার করে যাচ্ছিলাম %~0\..- জানতাম আরও ভাল উপায় থাকতে হবে! এছাড়াও, আপনি সম্ভবত %~dp0ডাবল উদ্ধৃতি চিহ্নগুলিতে সংযুক্ত করতে চাইবেন ( ""যদি ডিরেক্টরিটির নাম ইত্যাদির ফাঁক থাকে)
ক্যামেরন

1
সুন্দর! তবে, %~dp0শেষে রয়েছে `।। কীভাবে এটি অপসারণ করবেন আপনার ধারণা আছে?
মিশা মোরোস্কো

1
@ মিশা: আমি ধরে নিয়েছি আপনার অর্থ কীভাবে শেষের দিকে '\' অপসারণ করা যায়। আমি আমার উত্তরটি বিশদ সহ আপডেট করেছি।
ডিন হার্ডিং

2
উত্তরের উদাহরণটি উদ্ধৃতি চিহ্ন ছাড়াই সূক্ষ্মভাবে কাজ করে এমনকি পথের মধ্যে কোনও স্থান থাকলেও। (যেমন SET msg=hello worldসূক্ষ্ম কাজ করে)। যাইহোক, অন্য কোথাও% মাইপাথ% ব্যবহার করার সময় আপনি এটিকে উদ্ধৃতিতে ব্যবহার করতে সতর্কতা অবলম্বন করতে চান, যদিও সেগুলির কোনওটির প্রয়োজন নেই cd
মার্টিন পেইন

2
সেই লিঙ্কটি এখন 404
স্টিংজি জ্যাক

12

"\" কে অনুসরণ না করেই আপনি পাথ পেতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন

for %%i in ("%~dp0.") do SET "mypath=%%~fi"

এটি যদিও পথ থেকে ফাইলের নাম সরিয়ে দেয় না (যেমন অপের উদাহরণে abc.txt)।
ডিসিপি

4
@ ডিসিপি এর, যদিও তা করে।
কাইল স্ট্র্যান্ড

@ কাইল স্ট্র্যান্ড - হ্যাঁ, আমি এটি আবার চেষ্টা করেছি এবং এখন এটি ঠিকঠাক কাজ করছে। আমি নিশ্চিত নই যে আমি মূলত এটি চেষ্টা করার পরে কী হয়েছিল, সম্ভবত আমি স্ক্রিপ্টের কোনও জায়গায় ভুল করেছি। বিভ্রান্তির জন্য দুঃখিত, এবং এটি নির্দেশ করার জন্য ধন্যবাদ।
ডিসিপি

11

%~dp0আপেক্ষিক পথ হতে পারে। এটিকে পুরো পথে রূপান্তর করতে, এরকম কিছু চেষ্টা করুন:

pushd %~dp0
set script_dir=%CD%
popd

6
ঠিক আছে, তাহলে কেন কেবল %~dp0সরাসরি ব্যবহার করবেন না?
jpaugh

5
গৃহীত উত্তরের আরও খারাপ সংস্করণ, 5 বছর পরে পোস্ট করা হয়েছে? আমি বুঝতে পারছি না।
কাইল স্ট্র্যান্ড

আমি কল্পনা করেছি যে এটি গৃহীত উত্তরের মন্তব্যে উল্লিখিত সমস্যা সমাধানের জন্য পোস্ট করা হয়েছিল - %~dp0আপেক্ষিক হতে পারে, যা ব্যবহারের ক্ষেত্রে নির্ভর করে সমস্যা হতে পারে বা নাও পারে
মাইকেল মরোজেক

10
%~dp0আপেক্ষিক পথ থাকতে পারে না, dড্রাইভ এবং pপথের জন্য দাঁড়ানো, ড্রাইভ কীভাবে আপেক্ষিক হতে পারে?
jeb

5
কোন পৃথিবীতে? আমি উইন্ডোজ সার্ভার 2012 r2 এ এই উত্তরটি মাত্র পরীক্ষা করেছি %~dp0এবং স্ক্রিপ্টটি আপেক্ষিক পথ হিসাবে চালিত হওয়ার পরেও এটি একটি পরম পাথ হবে। জেবের মন্তব্যে ধন্যবাদ, আমি এই উত্তর দিয়ে বোকা হইনি। লোকেরা কেন কেবল জিনিস তৈরি করে এবং অন্যদের কাছে তাদের বুনো কল্পনা ছড়িয়ে দিতে শুরু করে। আমার এই সহকর্মী যিনি এটি করেন তবে আমি তার (যুবক) বয়সের জন্য দোষারোপ করেছি। আমি আশা করি আমার ডাউন-ভোট গণনা করা উচিত।
বিটুলিয়ান

0

আপনি ব্যবহার করতে পারেন %~dp0, ডি মানে কেবল ড্রাইভ, পি মানে কেবলমাত্র পথ, 0 ব্যাচের ফাইলের পুরো ফাইল নামটির জন্য আর্গুমেন্ট।

\ ব্যবহারকারীরা \ অলিভার \ ডেস্কটপ \ example.bat তারপর যুক্তি সমান হবে সি: \ ব্যবহারকারীরা \ অলিভার \ ডেস্কটপ \, এছাড়াও আপনি কমান্ড ব্যবহার করতে পারেন উদাহরণস্বরূপ, যদি ফাইল পাথ সি ছিল set cpath=%~dp0 && set cpath=%cpath:~0,-1%এবং ব্যবহার %cpath%শেষে স্ল্যাশ মুছে ফেলার জন্য পরিবর্তনশীল।


1
9 বছরের পুরানো উত্তরের চেয়ে আমি আর কোনও তথ্য দেখতে পাচ্ছি না
je

অতিরিক্ত তথ্য হ'ল "ডি মানে কেবল ড্রাইভ, ..." ইত্যাদি @ @ হাইজ আপনাকে ধন্যবাদ।
আরজে ডনিল

-2

%cd% স্ক্রিপ্টটি চালাচ্ছে সেখান থেকে আপনাকে ডিরেক্টরিটির পথ দেবে।

শেষ ঘন্টা:

echo %cd%

%CD%হ'ল বর্তমান ওয়ার্কিং ফোল্ডার, ফোল্ডারটি নয়, যেখানে ব্যাচ ফাইলটি সঞ্চয় করা আছে। তারা একই অবস্থান হতে পারে, তবে প্রায়শই তারা হয় না।
স্টিফান

-7

যে %CD%পরিবর্তনশীল হবে।

@echo off
echo %CD%

%CD% ব্যাচ স্ক্রিপ্টের বর্তমান ডিরেক্টরিটি ফেরত দেয়।


35
% cd% স্ক্রিপ্টটি যে ডিরেক্টরি থেকে চালিত হয়েছিল সেগুলি ফেরত দেয়, স্ক্রিপ্টটি যে ডিরেক্টরিটি রয়েছে তা নয়।
মিশা মোরোশকো

4
এটি কেবল তখনই কাজ করে যদি আপনার স্ক্রিপ্টটি কার্যকারী ডিরেক্টরিটি পরিবর্তন করে না। চেষ্টা করুন CD C:\Temp <CR> ECHO %CD%( <CR>নতুন লাইনে ...)
ডিন হার্ডিং

6
এছাড়াও, আপনি যদি স্ক্রিপ্টে ডান-ক্লিক করেন এবং "প্রশাসক হিসাবে চালান" বাছাই করেন, তবে চলমান ডিরেক্টরিটি হ'ল স্ক্রিপ্টটি যেখানেই থাকুক না কেন: C: \ Windows \ System32।
ক্যামেরন

যদিও এটি ওপির প্রশ্নের সরাসরি উত্তর নয়, কার্যকারিতার এই স্বাদটি হ'ল আমি যখন এই প্রশ্নটি পেয়েছি ঠিক তখনই খুঁজছিলাম। ধন্যবাদ!
জোল্টন

পোস্ট করা অন্য কোনও সমাধান আমার জন্য উইন 32২ বিবিটি সেমিডি.এক্সইতে কাজ করে না বলে মনে হয়, এটি কমপক্ষে আমার পক্ষে দরকারী।
ক্লিফোর্ড

-8

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

Http: //www.linuxj Journal.com/content/bash-parameter-expansion এ দেখার পরে আমি এই সমাধানটি পেয়েছি

#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder

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