একটি ডস কমান্ড দ্বারা বর্তমান ফোল্ডার নাম পান?


58

ডস কমান্ড ব্যবহার করে বর্তমান ফোল্ডারের নাম (বর্তমান ডিরেক্টরি পাথ নয়) পাওয়া সম্ভব? যদি তাই হয়, কিভাবে?

আমার কাছে সবচেয়ে কাছেরটি এটি ছিল তবে এটি তা করে না:

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

দ্রষ্টব্য: উপরের প্রয়াসটি আমি স্ট্রিংটি টোকানাইজ করার চেষ্টা করছিলাম এবং সিআরআর ভেরিয়েবল হিসাবে শেষ টোকেন সেটটি পেয়েছিলাম।


আপনার যদি কোনও প্রকার জিএনইউ টুলসেট ইনস্টল করা থাকে, আপনি যেতে পারবেন cd | sed "s/.*\\//"(যা সিডি (সিডাব্লুডি) এর আউটপুটটিকে একটি নিয়মিত এক্সপ্রেশন অনুসন্ধানে সরিয়ে দেয় এবং প্রতিস্থাপন করে, চূড়ান্তের আগে সমস্ত কিছু nothing কিছুই না দিয়ে প্রতিস্থাপন করে)
ফোশি

2
আমার জিএনইউ সরঞ্জামগুলি এড়াতে হবে যাতে ব্যাচ ফাইলটি যে কারও জন্য কাজ করতে পারে। আমার প্রশ্ন যাইহোক "খাঁটি ডস" এর জন্য।
জাজোফান

ঠিক আছে. একটি দ্রুত গুগল রেগেক্স অনুসন্ধান প্রয়োগের জন্য একটি এসও ফলাফল দেখিয়েছে এবং ভিবিএস স্ক্রিপ্টে প্রতিস্থাপন করেছে ( স্ট্যাকওভারফ্লো / প্রশ্ন / 127318/… ) যা একই বাক্য গঠন ব্যবহার করতে পারে এবং একই ফলাফল তৈরি করতে পারে - আমি বিশ্বাস করি উইন্ডোজ 98 সাল থেকে ভিবিএস স্ক্রিপ্টটি নির্মিত হয়েছে, তাই প্রত্যেকের জন্য বেশ যে কোনও জায়গায় হওয়া উচিত! (আপনি খুব সহজেই এটি * নিক্স
ওএসেও

3
এফওয়াইআই, for /fটমউইজ উভয়ই %~n*এমএস-ডস সমর্থিত নয়। (উইন্ডোজ ' cmd.exeহয় না ডস, এটা একটি নেটিভ উইন্ডোজ প্রোগ্রাম।)
grawity

উত্তর:


84

সবচেয়ে কম উপায় আমি খুঁজে পেয়েছি:

for %I in (.) do echo %~nxI

বা একটি .bat স্ক্রিপ্টের মধ্যে:

for %%I in (.) do echo %%~nxI

অথবা .bat এ ভেরিয়েবলের মান পান।

for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%

ব্যাখ্যা: http://www.robvenderwoude.com/ntfor.php

nx অর্থ কেবল ফাইলের নাম এবং এক্সটেনশান


আমি লিঙ্কটি এবং পরামর্শটি পছন্দ করি তবে আমি যখন এটি একটি ব্যাচ ফাইলে রাখি তখন আমি কোনও আউটপুট ছাড়াই শেলটি তাত্ক্ষণিকভাবে বন্ধ করে পাই। সেখানে কোথাও একটি সিনট্যাক্স ত্রুটি আছে?
জাজোফান

3
উদাহরণটি ইন্টারেক্টিভভাবে কমান্ড লাইনে কাজ করবে। ব্যাচ ফাইলে এটি ব্যবহার করতে আপনার %সাথে সমস্ত উপস্থিতি প্রতিস্থাপন করতে হবে %%
মাইক ফিৎসপ্যাট্রিক

2
এছাড়াও, উদাহরণটি পিরিয়ড ( .) সহ আমার ফোল্ডারের নামগুলি যেমন আমার% USERPROFILE% ফোল্ডারটি সঠিকভাবে পরিচালনা করে না ।
মাইক ফিটজপ্যাট্রিক

1
হ্যাঁ, আপনি '%' এর সাথে '%' প্রতিস্থাপন করলে কাজ করে works চমৎকার উত্তর. যদি এটি আগে উল্লেখ করা হত তবে গ্রহণযোগ্য উত্তর হত।
জাঙ্গোফান

1
এই godশ্বর-ভয়ঙ্কর অশুভ যাদু যাই হোক না কেন, আমি আনন্দিত এটি কার্যকর। আমি বেশিরভাগ *
এক্সপেনশন

30

আপনি যদি ব্যাচের ফাইলের বর্তমান অবস্থানটি জানতে চান (এবং যদি আপনার উইন্ডোজ খুব প্রাচীন প্রকাশ না হয়), for /?একটি 'ডস বাক্স' উইন্ডোতে টাইপ করুন । নিচে নামুন. পড়ুন।

আপনি খুঁজে পাবেন, যে আপনি এখন ( ব্যাচের ফাইলের মধ্যে থেকে ) এই ভেরিয়েবলগুলি পড়তে পারেন :

%0      - as the name how this batchfile was called
%~d0    - as the drive letter where this batchfile is located ('\\' in case of share)
%~p0    - as path (without the drive letter) where this batchfile is located
%~n0    - as filename (without suffix) of this batchfile
%~x0    - as filename's suffix (without filename) of this batchfile
%~a0    - as this batchfile's file attributes
%~t0    - as this batchfile's date+time
%~z0    - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]

এটি অনেক ক্ষেত্রে কাজ করে। ধরে নিন, ব্যাচফাইল বলা হয় mytest.bat। আপনি এটিকে বিভিন্ন উপায়ে কল করতে পারেন:

  1. ..\..\to\mytest.bat ............................... (আপেক্ষিক পথ)
  2. d:\path\to\mytest.bat........................... (পুরো পথ)
  3. \\fileserver\sharename\mytest.bat... (দূরবর্তী ভাগের পথ)

... এবং আপনি সর্বদা আপনার ভেরিয়েবলগুলিতে সঠিক মান পাবেন।


1
বাহ, আকর্ষণীয়ভাবে আপনার অধিকার যথেষ্ট। "প্রতিধ্বনি% ~ dp0" কমান্ডটি আমার সমস্যাটিও সমাধান করে এবং এর আরও মার্জিত।
জাঙ্গোফান

5
ঠিক আছে - তাহলে আমাকে '+1' দেওয়ার জন্য যত্নশীল?
কুর্ট ফেফেল

না, যে কারণে 'জন্য /?' আমি স্পষ্টতই প্রথম স্থানটি দেখেছিলাম এবং তাই এই উত্তরটি কারও দ্বারা প্রত্যাশিত চেয়ে ভাল আর কিছু নয়।
jangofan

4
@ জাজোফান: সুতরাং আপনি বলছেন যে 'বাহ, আকর্ষণীয়ভাবে যথেষ্ট আপনি সঠিক ...' এমন কিছু যা আপনি ইতিমধ্যে জানতেন ?! এমন একটি উত্তর যা আপনার জ্ঞানের অবদান রাখেনি? (আপনি জানেন, '+1' ar-অ্যারোতে ক্লিক করছে - গৃহীত উত্তরটি দেওয়া আলাদা নয় ....)
কার্ট ফিফিল

1
মনে হচ্ছে শেষটা হওয়া উচিত %~dpnx0, তাই না?
luc

15

টমসের উত্তর আমি ব্যক্তিগতভাবে পছন্দ করেছি, যতক্ষণ না এটি ডীর নামে বিন্দুগুলির সাথে লড়াই করে। এটি আমাকে একটি ইঙ্গিত দিয়েছে:

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa

5

টমের উত্তরটি ভাল, তবে এটির সময়কালের সাথে যদি আপনার ডিরেক্টরি নাম থাকে (যেমন ডাব্লু এক্সউজেডস -২.৯.৪) আপনি কেবল পুরো নামটি পাবেন। সুতরাং এর পরিবর্তে wxwidgets-2.9 ​​আউটপুট হবে কারণ .4 এক্সটেনশন হিসাবে বিবেচিত হয়েছে (হ্যাঁ, এটি একটি ডিরেক্টরি নাম হলেও!)।

পুরো আউটপুট নাম পেতে আপনাকে শেষ পর্যন্ত এক্সটেনশনটি যুক্ত করতে হবে:

FOR %I IN (.) DO Echo %~nI%~xI

এবং ব্যাচ ফাইল মোডে:

FOR %%I IN (.) DO Echo %%~nI%%~xI

বা অবশ্যই এর পরিবর্তে ব্যাচ ফাইলে একটি ভেরিয়েবল সেট করুন:

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI

4

অন্য একটি উপায় হ'ল:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%  

এটি "দিয়ে কাজ করে।" এবং পথনামে ফাঁকা স্থান

এটার কাজ কি?

  1. পুরো ফাইলের নামটি (ড্রাইভলেটর-পথ-ফাইল-নাম-এক্সটেনশন) MyPathভারে রাখুন

  2. ফাইল থেকে নাম এবং এক্সটেনশানটি MyPathvar থেকে সরান

এটি ইউএনসি পাথগুলির সাথেও কাজ করে। আপনার যদি পথের শেষে ব্যাকস্ল্যাশ দরকার হয়। দ্বিতীয় সেট কমান্ডের \পরে অপসারণ করুন MyPath, যেমন।

set "MyPath=%%MyPath:%~nx0=%%"

1
তাহলে এটি কীভাবে আলাদা%~dp0
অমিত নাইডু

4

আপনি বর্তমান দির একটি ভেরিয়েবলে পেতে পারেন। এক রৈখিক:

set a=%cd%

পরিক্ষা কর

echo %a%

6
তিনি বর্তমান ডিরেক্টরি নামটি চান, পুরো পথটি নয়, এবং == সিডি হিসাবে, আপনি% cd% ব্যবহার করতে পারেন।
প্যারাড্রয়েড

2

খুবই সাধারণ

for %%d in ("%CD%") do echo %%~nxd

অথবা

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

পথের শেষের ব্যাকস্ল্যাশ সম্পর্কে সতর্ক থাকুন, এটি শেষের ব্যাকস্ল্যাশ হতে হবে না be


1

এই থ্রেডে আমার উত্তর এটি 3 টি সাধারণ লাইনে করে:

@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul

1

এটি একটি ব্যাচের ফাইল থেকে আমার জন্য কাজ করে। এটি বর্তমান ওয়ার্কিং ডিরেক্টরি নামটি দেয়।

pushd %1 & for %%i in (.) do @echo %%~ni
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.