সিএমডি দিয়ে ফাইল পাথ থেকে ফোল্ডার পাথ কীভাবে পাবেন


151

আমার ফোল্ডারে যাওয়ার জন্য সিএমডি ফাইল দরকার। % 0 দিয়ে আমি ফাইলের নাম পেতে পারি। তবে ফোল্ডারের নাম কীভাবে পাবেন?

সি: \ টেম্পি \ টেস্ট.ক্যামডি >> টেস্ট.কম

PS আমার বর্তমান ডিরেক্টরি! = স্ক্রিপ্টের ফোল্ডার।

উত্তর:


310

ফোল্ডারের নাম এবং ড্রাইভের জন্য, আপনি ব্যবহার করতে পারেন:

echo %~dp0

আপনি বিভিন্ন সংশোধক ব্যবহার করে আরও অনেক তথ্য পেতে পারেন:

%~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

The modifiers can be combined to get compound results:
%~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

এটি "for /?" এর একটি অনুলিপি পেস্ট? প্রম্পটে কমান্ড। আশা করি এটা সাহায্য করবে.

সম্পর্কিত

শীর্ষ 10 ডস ব্যাচের টিপস (হ্যাঁ, ডস ব্যাচ ...) batchparams.bat দেখায় (উত্স হিসাবে উত্সের লিঙ্ক):

C:\Temp>batchparams.bat c:\windows\notepad.exe
%~1     =      c:\windows\notepad.exe
%~f1     =      c:\WINDOWS\NOTEPAD.EXE
%~d1     =      c:
%~p1     =      \WINDOWS\
%~n1     =      NOTEPAD
%~x1     =      .EXE
%~s1     =      c:\WINDOWS\NOTEPAD.EXE
%~a1     =      --a------
%~t1     =      08/25/2005 01:50 AM
%~z1     =      17920
%~$PATHATH:1     =
%~dp1     =      c:\WINDOWS\
%~nx1     =      NOTEPAD.EXE
%~dp$PATH:1     =      c:\WINDOWS\
%~ftza1     =      --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE

কুল। অন্য কারও উইকি পোস্ট সংশোধন করার জন্য আমার কি বিশেষ স্কোর দরকার?
ওয়াদিহ এম।

@Wadih এম .: সাধারনত দরকারী লিংক stackoverflow.com/questions/18557/...
JFS

@Wadih এম .: বিশেষ করে stackoverflow.com/questions/130654/...
JFS

@ ওয়াদিহ এম .: উপরের লিঙ্কটি থেকে: "+750 সম্প্রদায়ের 'উইকি সম্পাদনযোগ্য' পোস্টগুলি সম্পাদনা করতে"
জেফস

সুতরাং আপনি যদি কোনও সিএমডি স্ক্রিপ্টটি স্ক্রিপ্টের অবস্থানের স্থানে ওয়ার্কিং ডিরেক্টরি সেট করতে চান: cd /d "%~dp0"( স্ট্যাকওভারফ্লো / প্রশ্ন / ৪৪45১161668৮ থেকে )
নাইজেল টাচ

52

গৃহীত উত্তর সহায়ক, তবে আপনি যদি মানগুলিতে উত্তীর্ণ না হন তবে কোনও পাথ থেকে কোনও ফাইল নাম কীভাবে পুনরুদ্ধার করবেন তা অবিলম্বে সুস্পষ্ট নয়। আমি এই থ্রেড থেকে এটি কাজ করতে সক্ষম হয়েছি, তবে অন্যরা এত ভাগ্যবান না হলে এটি কীভাবে করা হয় তা এখানে:

@echo off
setlocal enabledelayedexpansion enableextensions

set myPath=C:\Somewhere\Somewhere\SomeFile.txt
call :file_name_from_path result !myPath!
echo %result%
goto :eof

:file_name_from_path <resultVar> <pathVar>
(
    set "%~1=%~nx2"
    exit /b
)

:eof
endlocal

এখন :file_name_from_pathফাংশনটি যে কোনও জায়গায় যুক্তি হিসাবে পাস করার জন্য নয়, মানটি পুনরুদ্ধার করতে ব্যবহৃত হতে পারে। যদি আর্গুমেন্টগুলি অনির্ধারিত ক্রমে ফাইলটিতে প্রবেশ করা যায় বা পথটি কোনওভাবেই ফাইলের মধ্যে না যায় তবে এটি চূড়ান্ত সহায়ক হতে পারে।


বাহ, আশ্চর্যজনক! উইন্ডোজ ব্যাচ ফাইলগুলি একই ফাইলের অভ্যন্তরে ফাংশন সমর্থন করে, কীভাবে দরকারী! কখন থেকে এটি সম্ভব হয়েছিল?
লুক

2
আমি পছন্দ করি যে আপনি রেফারেন্স (যেমনটি) এবং মান দ্বারা ("চারপাশে"!) দিয়ে উভয়ই ভেরিয়েবলগুলি পাস করতে পারেন। ঠিক আছে, আপনার কাছে সম্ভবত "স্থানীয়" ভেরিয়েবল এবং একটি কল স্ট্যাক নেই ... তবে ওহে: এটি সর্বোপরি একটি সেমিডি স্ক্রিপ্ট, যাইহোক এটি একটি বড় পদক্ষেপ;) আমি সম্মত হচ্ছি, একটি ফাইলের মধ্যে বিভাজক জিনিসগুলি অনেক বেশি কার্যকর বিভিন্ন ফাইল প্রায় বিভাজন চেয়ে :)
লুক

1
আমার মনে হয় "গোটো: ইওফ" "গোটো ইওফ" হওয়া উচিত .. কোলন ছাড়াই .. যেহেতু এটি আমার জন্য ব্রেকিং ছিল।
একটি খুদিরি

2
এছাড়াও দেখুন: ss64.com/nt/syntax-args.html - %~dp1কেবল ড্রাইভ এবং পাথের জন্য ব্যবহার করুন ।
অ্যান্ড্রু

2
@ কৌথ্রি সঠিক: ss64.com/nt/goto.html কোলনের সাহায্যে গোটো এন্ডলোকালটি এড়িয়ে যায় (এবং আপনি যে কোনও কিছু পরে রাখেন, বিরতির মতো)। এছাড়াও আপনার পথে যদি ফাঁকা জায়গা থাকে (বা উদ্ধৃতিগুলি আমারপথের অংশ হতে পারে)"!myPath!
রিক

8

এগুলি ভেরিয়েবলগুলিতে নির্ধারণের জন্য, সামনের চিহ্ন বা সমান চিহ্নের পরে স্পেস যুক্ত না করা নিশ্চিত করুন:

set filepath=%~dp1
set filename=%~nx1

তাহলে আপনার কোন সমস্যা নেই।


5

যদি কেউ বিকল্প পদ্ধতি চায় ...

যদি এটি পথে শেষ উপ-ডিরেক্টরি হয় তবে আপনি এই ওয়ান-লাইনারটি ব্যবহার করতে পারেন:

cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s

এটি নিম্নলিখিতগুলি ফিরে আসবে:

c:\directory\subdirectory

.... আগের ডিরেক্টরিতে ফিরে আসে। / বিজ্ঞাপনটি কেবল ডিরেক্টরিগুলি দেখায় / বি হল একটি খালি বিন্যাসের তালিকা / এর মধ্যে সমস্ত উপ-ডিরেক্টরি অন্তর্ভুক্ত। এটি মুদ্রণের জন্য ডিরেক্টরিটির সম্পূর্ণ পথ পেতে ব্যবহৃত হয়।


এটি সম্ভবত বর্তমান ডিরেক্টরি বিরুদ্ধে কাজ করে, একটি ডিরেক্টরি নয় যেখানে স্ক্রিপ্ট ফাইলটি অবস্থিত।
মাইক চালি

4

আমার লুপটিতে আমার একই সমস্যা ছিল যেখানে আমি একই ডিরেক্টরিতে জিপ ফাইলগুলি বের করতে এবং তারপরে জিপ ফাইলটি মুছতে চাইতাম। সমস্যাটি হ'ল 7z এর জন্য আউটপুট ফোল্ডার প্রয়োজন, সুতরাং আমাকে প্রতিটি ফাইলের ফোল্ডার পথটি অর্জন করতে হয়েছিল। এখানে আমার সমাধান:

FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
  7z.exe x %%i -aoa -o%%i\..
) 

%% আমি একটি সম্পূর্ণ ফাইলের নাম এবং% ii \ .. কেবল প্যারেন্ট ফোল্ডারটি দিয়েছিলাম।

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


দ্রুত এবং ময়লা. আমি যে পছন্দ! আপনি কখনই ভাবেন নি যে আপনি "\ .." দিয়ে কোনও ফাইলের পথ বাড়িয়েছেন এবং মূল ফোল্ডারটি শেষ করবেন end
অলিভার আর।

এটি আমার জন্য উইন 10 তে কাজ করেছে: ফর / আর "সি: D সোর্সডির"% আই ইন ইন (* .জিজেড) ডিও সি: \ 7-জিপ 64 \ 7z.exe x "% I" -আউ -ও% আমি \ .. \
বি

হ্যাঁ! এটি এই সমস্যাটি ঘটিয়েছে যে% ~ dp1 (ইত্যাদি) শুধুমাত্র% 0,% 1,% 2 ইত্যাদিতে কাজ করে
আর্টিলিয়াস

3

ওয়াদিহের গৃহীত উত্তর যদি আপনার পক্ষে কাজ না করে, তবে চেষ্টা করুন echo %CD%


0

এটি কিছু সম্পাদিত উদাহরণের সাথে মিলিয়ে দেওয়া হয়েছিল সিএমডি

@Echo off

Echo ********************************************************
Echo *  ZIP Folder Backup using 7Zip                        *
Echo *  Usage: Source Folder, Destination Drive Letter      *
Echo *  Source Folder will be Zipped to Destination\Backups *
Echo ********************************************************
Echo off

set year=%date:~-4,4%
set month=%date:~-10,2%
set day=%date:~-7,2%
set hour=%time:~-11,2%
set hour=%hour: =0%
set min=%time:~-8,2%

SET /P src=Source Folder to Backup: 
SET source=%src%\*
call :file_name_from_path nam %src%
SET /P destination=Backup Drive Letter:
set zipfilename=%nam%.%year%.%month%.%day%.%hour%%min%.zip
set dest="%destination%:\Backups\%zipfilename%"


set AppExePath="%ProgramFiles(x86)%\7-Zip\7z.exe"
if not exist %AppExePath% set AppExePath="%ProgramFiles%\7-Zip\7z.exe"

if not exist %AppExePath% goto notInstalled

echo Backing up %source% to %dest%

%AppExePath% a -r -tzip %dest% %source%

echo %source% backed up to %dest% is complete!

TIMEOUT 5

exit;

:file_name_from_path <resultVar> <pathVar>
(
    set "%~1=%~nx2"
    exit /b
)


:notInstalled

echo Can not find 7-Zip, please install it from:
echo  http://7-zip.org/

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