% ~ Dp0 এর অর্থ কী এবং এটি কীভাবে কাজ করে?


1022

আমি %~dp0খুব দরকারী বলে মনে করি এবং আমার ব্যাচের ফাইলগুলিকে আরও বহনযোগ্য করে তুলতে আমি এটি প্রচুর ব্যবহার করি।

তবে লেবেলটি আমার কাছে খুব রহস্যজনক মনে হচ্ছে ... কী ~করছে? কি dpমানে ড্রাইভ এবং পথ? ব্যাচ ফাইলে যে ফাইলটির নাম অন্তর্ভুক্ত রয়েছে তার পথ কি 0উল্লেখ করে %0?

নাকি এটি একটি অদ্ভুত লেবেল?

আমি এটিও জানতে চাই যে এটি কোনও নথিভুক্ত বৈশিষ্ট্য, বা প্রত্যাখ্যানযোগ্য কিছু something



2
ঠিক বলেছেন, হেলেন। আমি% ~ dp0 অনুসন্ধান করার পরে এই প্রশ্নটি প্রদর্শিত হয়নি। সম্ভবত এটির% ~ dp0 এর পরিবর্তে এর শিরোনামটিতে% ~ d0 রয়েছে।
সেবাস্তিয়ান গ্রিগনোলি

9
সিম্বলহাউন্ড বর্ণমালার অক্ষর বাদে অন্য অনুসন্ধান চালানোর জন্য দুর্দান্ত। উদাহরণস্বরূপ, অনুসন্ধান করুন%~dp0 । সাধারণত আমি দেখতে পাই যে শীর্ষগুলি হিটগুলি SO এর সামগ্রীতে উল্লেখ রয়েছে।
ডেভিডআরআর

সিম্বলহাউন্ডটি সিম্বহাউন্ড . com/ ? q=%25~dp0 অনুসন্ধানের জন্য আমার পক্ষে কাজ করে নি । তবে এটি কাজ করেছে: google.com/search?q=%25~dp0 - স্রেফ বলে '...
ক্রিস্টোফার

1
সিম্বলহাউন্ড 2019: কাজ করে না এবং ইউম্যাট্রিক্স ইঙ্গিত দেয় যে এটি ব্লকচেইন.আইনফো এবং পেপালবজেক্টস ডটকমের মতো তৃতীয় পক্ষের সাইটের সাথে সংযোগ স্থাপন করে।
নিলস লিন্ডেম্যান

উত্তর:


810

কল করা হচ্ছে

for /?

কমান্ড-লাইনে এই বাক্য গঠন সম্পর্কে সহায়তা দেয় (যা বাইরেও ব্যবহার করা যেতে পারে, এটি ঠিক এটিই যেখানে সহায়তা পাওয়া যায়)।

এছাড়াও, পরিবর্তনশীল রেফারেন্সের বিকল্প প্রতিস্থাপন উন্নত করা হয়েছে। আপনি এখন নিম্নলিখিত alচ্ছিক বাক্য গঠন ব্যবহার করতে পারেন:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

সংশ্লেষ ফলাফলগুলি সংশোধনকারীদের একত্রিত করা যেতে পারে:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line

উপরের উদাহরণগুলিতে% I এবং PATH অন্যান্য বৈধ মান দ্বারা প্রতিস্থাপিত হতে পারে। % ~ সিনট্যাক্সটি ভেরিয়েবলের নামের জন্য বৈধ হয়ে শেষ হয়। % I এর মতো উপরের কেস পরিবর্তনশীল নামগুলি বাছাই করা এটিকে আরও পঠনযোগ্য করে তোলে এবং সংশোধনকারীগুলির সাথে বিভ্রান্তি এড়ায়।

f"সম্পূর্ণ পথের নাম", dড্রাইভ চিঠির pজন্য, পথের জন্য এবং আপনি একত্রিত হতে পারে এমন বিভিন্ন অক্ষর রয়েছে । %~এই ক্রমগুলির প্রতিটিটির জন্য শুরু এবং একটি সংখ্যা Iএটি প্যারামিটারে কাজ করে তা বোঝায় %I(যেখানে %0আপনি ব্যাচের ফাইলের পুরো নাম, ঠিক যেমন আপনি ধরে নিয়েছিলেন)।


2
আমি অন্য কারও সম্পর্কে জানি না, তবে আমি পেয়েছি "ব্যাচ-প্যারামিটার সাবস্টিটিউশনে পাথ অপারেটরের নিম্নলিখিত ব্যবহারটি অবৈধ valid বৈধ ফর্ম্যাটগুলির জন্য CALL /? বা FOR /? টাইপ করুন command আদেশের বাক্য গঠনটি ভুল।" ব্যবহার করার সময় I। আমি 0পরিবর্তে ব্যবহার করতে হবে I। আমি কিছু বা কিছু মিস করেছি কিনা জানি না, তবে কেবল মানুষকে জানিয়ে দেওয়া।
মাইথোফেলন

71
@ বেনহুপার, Iপরিবর্তনশীল সূচকের জন্য স্থানধারক। 0= কলিং ফাইল, 1= যুক্তি # 1, 2= যুক্তি # 2, ইত্যাদি ...
ক্রিস

9
এই উত্তর ভাল। এবং সম্পূর্ণ। : একটি বিট আরো সংক্ষিপ্ততা, আমি এই কাছাকাছি ডুপ্লিকেট-প্রশ্নের উত্তর মত জন্য stackoverflow.com/questions/112055/...
ফ্রাঙ্ক Nocke

1
এই উত্তরটি কিছুটা বিভ্রান্তিকর কারণ এই বিকল্পগুলি ফরের বাইরে ব্যবহার করা যেতে পারে।
ডেভিড

346

(প্রথমত, আমি ব্যাচের জন্য এই দরকারী রেফারেন্স সাইটের সুপারিশ করতে চাই: http://ss64.com/nt/ )

তারপরে আরও একটি দরকারী ব্যাখ্যা: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

% ~ Dp0 পরিবর্তনশীল

% ~ Dp0 (এটি একটি শূন্য) পরিবর্তনশীল যখন উইন্ডোজ ব্যাচ ফাইলের মধ্যে রেফারেন্স হয় সেই ব্যাচ ফাইলের ডি রিভ লেটার এবং পি অ্যাথিতে প্রসারিত হবে ।

% 0-% 9 ভেরিয়েবলগুলি ব্যাচ ফাইলের কমান্ড লাইন প্যারামিটারগুলি উল্লেখ করে। % 1-% 9 ব্যাচ ফাইলের নামের পরে কমান্ড লাইন আর্গুমেন্টগুলি উল্লেখ করে। % 0 ব্যাচ ফাইল নিজেই বোঝায়।

আপনি যদি টিলডে অক্ষর (~) দিয়ে শতাংশ অক্ষর (%) অনুসরণ করেন, আপনি ভেরিয়েবলটি প্রসারিত করার পদ্ধতি পরিবর্তন করতে প্যারামিটার নম্বর দেওয়ার আগে একটি সংশোধক (গুলি) canোকাতে পারেন। ডি মোডিফায়ারটি ড্রাইভ লেটারে প্রসারিত হয় এবং পি মডিফায়ারটি প্যারামিটারের পথে প্রসারিত হয়।

উদাহরণ: ধরা যাক আপনার সি তে একটি ডিরেক্টরি রয়েছে: ব্যাট_ফাইলেস নামে পরিচিত এবং সেই ডিরেক্টরিতে উদাহরণস্বরূপ নামে একটি ফাইল রয়েছে। এই ক্ষেত্রে,% ~ dp0 (d এবং p সংশোধকগুলির সংমিশ্রণ) C: \ bat_files এ প্রসারিত হবে।

পরীক্ষা করে দেখুন এই মাইক্রোসফট নিবন্ধ একটি পূর্ণ ব্যাখ্যা জন্য।

এছাড়াও, এই ফোরামের থ্রেডটি দেখুন

এবং এখান থেকে আরও স্পষ্ট উল্লেখ :

  • %CmdCmdLine% সিএমডি.এক্সই তে পাস হিসাবে পুরো কমান্ড লাইনটি ফিরিয়ে দেবে

  • %* প্রথম কমান্ড লাইন আর্গুমেন্ট থেকে শুরু হওয়া কমান্ড লাইনের বাকী অংশটি ফিরিয়ে দেবে (উইন্ডোজ এনটি 4 তে,% * সমস্ত নেতৃস্থানীয় স্পেসও অন্তর্ভুক্ত করে)

  • %~dn % n একটি বৈধ পাথ বা ফাইলের নাম (ইউএনসি না থাকলে)% n (n 0 থেকে 9 পর্যন্ত হতে পারে) এর ড্রাইভ লেটারটি ফেরত দেবে

  • %~pn % n একটি বৈধ পাথ বা ফাইলের নাম (ইউএনসি নেই) হলে% n এর ডিরেক্টরিটি ফিরিয়ে দেবে

  • %~nn % n বৈধ ফাইলের নাম হলে কেবলমাত্র% n এর ফাইলের নামটি ফিরিয়ে দেবে

  • %~xn % n যদি বৈধ ফাইলের নাম হয় তবে কেবলমাত্র% n এর ফাইল এক্সটেনশনটি ফিরিয়ে আনবে

  • %~fn % n একটি বৈধ ফাইলের নাম বা ডিরেক্টরি হলে% n এর সম্পূর্ণরূপে যোগ্যতাসম্পন্ন পাথটি ফেরত দেবে

ADD 1

রহস্যজনক ~ টিল্ড অপারেটরের জন্য সবেমাত্র কিছু ভাল রেফারেন্স পেয়েছি ।

%~স্ট্রিং বলা হয় টিল্ড শতাংশ অপারেটর। তোমার মত পরিস্থিতিতে করেই খুঁজে পেতে পারেন %~0

:~স্ট্রিং বলা হয় টিল্ড কোলন অপারেটর। আপনি এটি পছন্দ করতে পারেন %SOME_VAR:~0,-1%

অ্যাড 2 - 1:12 পিএম 7/6/2018

%1-%9কমান্ড লাইন আরগস উল্লেখ করুন। যদি সেগুলি বৈধ পাথ মান না হয়%~dp1 - - %~dp9সমস্ত একই মান হিসাবে প্রসারিত হবে %~dp0। তবে এগুলি যদি বৈধ পাথ মান হয় তবে তারা তাদের নিজস্ব ড্রাইভার / পথের মানে প্রসারিত হবে ।

উদাহরণস্বরূপ: (ব্যাচ.বাট)

@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on

রান 1:

D:\Workbench>batch arg1 arg2

~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\

রান 2:

D:\Workbench>batch c:\123\a.exe e:\abc\b.exe

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\

এই ধারণাটি সম্পর্কেও কৌতূহল এবং এখানে ভাল ব্যাখ্যা পেয়েছি। ধন্যবাদ মিঙ্গেজ ^ _ ^
ইউজিন

1
আমার জন্য এটি সিতে প্রসারিত: \ bat_files \ (পথ অনুসরণকারী পথ সহ)
সান্তা ২

মাইক্রোসফ্ট নিবন্ধ এবং ফোরামের থ্রেডের লিঙ্কগুলি আর কাজ করে না :(
ওয়াওভানো

150

%0ব্যাচ স্ক্রিপ্টের ভেরিয়েবলটি এক্সিকিউটিভ ব্যাচ ফাইলের নামে সেট করা থাকে।

~dpমধ্যে বিশেষ সিনট্যাক্স %এবং 0মূলত পরিবর্তনশীল প্রসারিত করতে বলেছেন %0যা আপনি বর্তমান ডিরেক্টরির ব্যাচ ফাইল ধারণকারী দেয় ড্রাইভ লেটার এবং পাথ, প্রদর্শন!

সহায়তা = লিঙ্ক


@ অ্যান্ডি, %0স্থানীয় হার্ডড্রাইভে একটি .bat ফাইল সংরক্ষণ না করেই কি সিএমডি-তে সরাসরি পরীক্ষা করার কোনও উপায় আছে ?
পেসারিয়ার

লিঙ্কটি নষ্ট হয়ে গেছে, এবং আমি সঠিক লিঙ্কটি খুঁজে পাচ্ছি না। একটি মুলতুবি সম্পাদনা এখনও ভাঙা লিঙ্ক আছে।
জর্জ_ই

44

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

সুস্পষ্ট বোঝাপড়া পেতে, আসুন ডিরেক্টরিতে একটি ব্যাচ ফাইল তৈরি করি।

সি: \ স্ক্রিপ্ট \ test.bat

বিষয়বস্তু সহ:

@echo off
echo %~dp0

আপনি যখন এটি কমান্ড প্রম্পট থেকে চালাবেন, আপনি এই ফলাফলটি দেখতে পাবেন:

সি: \ স্ক্রিপ্ট \


40

আরেকটি টিপ যা আপনাকে অনেক সাহায্য করবে তা হ'ল বর্তমান ডিরেক্টরিটিকে একটি ভিন্ন ড্রাইভে সেট করতে %~d0প্রথমে ব্যবহার করতে হবে cd %~dp0। এটি ডিরেক্টরিটি ব্যাচের ফাইলের ড্রাইভে পরিবর্তন করবে এবং তার ফোল্ডারে পরিবর্তন করবে।

বিকল্প হিসাবে, # একলাইনারলভার্সের জন্য, @ ওম্নি মন্তব্যগুলিতে যেমন উল্লেখ করেছেন যেমন cd /d %~dp0ড্রাইভ এবং ডিরেক্টরি উভয়ই পরিবর্তন করবে :)

আশা করি এটি কাউকে সাহায্য করবে।


22
cdএকটি অন্তর্নির্মিত প্যারামিটার রয়েছে যা ড্রাইভ এবং ফোল্ডার উভয়ই স্যুইচ করবে:cd /d %~dp0
OmnipotentEntity

2
আপনি ঠিক এবং /dযুক্তি সহায়ক, কিন্তু এটা একটি হিসেবে পোস্ট করা দাবী প্রার্থী বিকল্প উত্তর এবং না একটি মন্তব্য এই এক। যদিও এটি চিহ্নিত করার জন্য আপনাকে ধন্যবাদ , যদিও আমি এটি সম্পর্কে জানতাম না :)
মার্ভিন থোবজেন

4
আপনি ড্রাইভ এবং ফোল্ডারটি স্যুইচ করতে '' পুশড% ~ dp0 '' ব্যবহার করতে পারেন
fmuecke

25

স্ট্রবেরি পার্লের বহনযোগ্য শেল লঞ্চারের দুর্দান্ত উদাহরণ:

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%

নেতিবাচক 1 নিজে নিজে সেখানে কী করছে তা নিশ্চিত নন, তবে এটি একটি ট্রিট কাজ করে!


11
+1 খুব দরকারী। If স্টেটমেন্টটি ব্যাকস্ল্যাশ উপস্থিত রয়েছে কিনা তা পরীক্ষা করে এবং প্রয়োজনে ব্যাকস্ল্যাশ সরিয়ে দেয়। শর্তে নেতিবাচক 1 সর্বশেষ অক্ষরটি বের করে এবং সেট স্টেটমেন্টের এক্সপ্রেশনটি সর্বশেষ অক্ষরটিকে (যা ব্যাকস্ল্যাশ) মাইনাসের পথ ধরে।
ম্যাট

1
negativeণাত্মক 1 হ'ল বিয়োগফল সর্বশেষ চরিত্র। ভেরিয়েবল সাবস্ট্রিং
ফুলচলভি

12

একটি উদাহরণ চমৎকার হবে - এখানে একটি তুচ্ছ একটি

for %I in (*.*) do @echo %~xI

এটি বর্তমান ফোল্ডারে প্রতিটি ফাইলের কেবলমাত্র এক্সটেনশানগুলি তালিকাভুক্ত করে

সিএমডি প্রম্পট এক্সিকিউট থেকে আরও দরকারী পরিবর্তনশীল সংমিশ্রণের জন্য (পূর্ববর্তী প্রতিক্রিয়াতেও তালিকাভুক্ত): HELP FOR যা এই স্নিপেট ধারণ করে

সংশ্লেষ ফলাফলগুলি সংশোধনকারীদের একত্রিত করা যেতে পারে:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line

আমি "~ xI পেয়েছিলাম এই সময়ে অপ্রত্যাশিত।" উদাহরণটি চেষ্টা করে দেখছি - এটি কি কারণ আমি উইন 7 ব্যবহার করছি?
অধ্যায়

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