सापेक्ष पथ और / या फ़ाइल नाम से निरपेक्ष पथ को हल करें


155

क्या किसी फ़ाइल नाम और / या सापेक्ष पथ वाले मान से निरपेक्ष पथ पर लौटने के लिए Windows बैच स्क्रिप्ट में कोई रास्ता है?

दिया हुआ:

"..\"
"..\somefile.txt"

मुझे बैच फ़ाइल के सापेक्ष पूर्ण पथ की आवश्यकता है।

उदाहरण:

  • "somefile.txt" "C: \ Foo \" में स्थित है
  • "test.bat" "C: \ Foo \ Bar" में स्थित है।
  • उपयोगकर्ता "C: \ Foo" में एक कमांड विंडो खोलता है और कॉल करता है Bar\test.bat ..\somefile.txt
  • बैच फ़ाइल में "C: \ Foo \ somefile.txt" से लिया जाएगा %1

1
सापेक्ष पथ कहानी का अंत नहीं हैं। एनटीएफएस सहानुभूति पर भी विचार करें : सबसे अधिक संभावना है कि आपको realpathमजबूत पथ के सामान्यीकरण के लिए एनालॉग की भी आवश्यकता होगी ।
ulidtko

संभवत: आपको बिल्कुल सटीक मार्ग की आवश्यकता नहीं है! आप बस एक आधार पथ जोड़ सकते हैं: SET FilePath=%CD%\%1ताकि यह पसंद आ सके C:\Foo\Bar\..\..\some\other\dir\file.txt। ऐसे जटिल पथ को समझने के लिए कार्यक्रम लगते हैं।
Fr0sT

इन उत्तरों के बहुत सारे जटिल, या सीधे सादे छोटी गाड़ी पर पागल हैं - लेकिन, यह वास्तव में बैच में करने के लिए एक बहुत आसान बात है, नीचे मेरे जवाब पर एक नज़र डालें
BrainSlugs83

जवाबों:


160

बैच सी फ़ाइलों में, मानक सी कार्यक्रमों में, तर्क 0 में वर्तमान में निष्पादित स्क्रिप्ट का पथ शामिल है। आप %~dp0केवल 0 वें तर्क (जो वर्तमान स्क्रिप्ट है) के केवल पथ भाग को प्राप्त करने के लिए उपयोग कर सकते हैं - यह पथ हमेशा पूरी तरह से योग्य पथ है।

आप उपयोग करके अपने पहले तर्क का पूरी तरह से योग्य मार्ग भी प्राप्त कर सकते हैं %~f1, लेकिन यह वर्तमान कार्यशील निर्देशिका के अनुसार एक रास्ता देता है, जो स्पष्ट रूप से वह नहीं है जो आप चाहते हैं।

व्यक्तिगत रूप से, मैं अक्सर %~dp0%~1अपने बैच फ़ाइल में मुहावरे का उपयोग करता हूं, जो निष्पादन बैच के पथ के सापेक्ष पहले तर्क की व्याख्या करता है। हालांकि इसमें एक कमी है: यदि पहला तर्क पूरी तरह से योग्य है तो यह बुरी तरह से विफल हो जाता है।

यदि आपको रिश्तेदार और निरपेक्ष दोनों रास्तों का समर्थन करने की आवश्यकता है , तो आप फ्रेडेरिक मेनेज के समाधान का उपयोग कर सकते हैं : अस्थायी रूप से वर्तमान कार्य निर्देशिका को बदल सकते हैं।

यहाँ एक उदाहरण है जो इन तकनीकों में से प्रत्येक को प्रदर्शित करेगा:

@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"

rem Temporarily change the current working directory, to retrieve a full path 
rem   to the first parameter
pushd .
cd %~dp0
echo batch-relative %%~f1 is "%~f1"
popd

यदि आप इसे c: \ temp \ example.bat के रूप में सहेजते हैं और इसे c: \ Users \ Public के रूप में चलाते हैं

c: \ Users \ Public> \ temp \ example.bat .. \ windows

... आप निम्न आउटपुट का अवलोकन करेंगे:

%~dp0 is "C:\temp\"
%0 is "\temp\example.bat"
%~dpnx0 is "C:\temp\example.bat"
%~f1 is "C:\Users\windows"
%~dp0%~1 is "C:\temp\..\windows"
batch-relative %~f1 is "C:\Windows"

बैच तर्क पर अनुमत संशोधक के सेट के लिए प्रलेखन यहां पाया जा सकता है: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/call


4
आप संभाल सकते हैं %0और %1इसी तरह: %~dpnx0पूरी तरह से योग्य पथ + बैचफाइल के नाम के लिए, %~dpnx1पूरी तरह से योग्य पथ के लिए + इसके पहले तर्क का नाम [यदि यह एक फ़ाइल नाम है]। (लेकिन अगर आप कमांडलाइन पर उस पूर्ण पथ की जानकारी नहीं देंगे, तो पृथ्वी पर आप एक अलग ड्राइव पर एक फ़ाइल का नाम कैसे रखेंगे?)
कर्ट फ़िफ़ल

यह उदाहरण @ frédéric-ménez उत्तर की तुलना में कहीं अधिक जटिल है
17

3
यह NTFS सिमिलिंक पर विफल रहता है।
ulidtko 14

@ कर्टपाइफल d:\foo\..\bar\xyz.txtको अभी भी सामान्यीकृत किया जा सकता है। मैं नीचे दिए गए @ axel-heider के उत्तर के साथ इस दृष्टिकोण का उपयोग करने की सलाह देता हूं (बैच सबरूटीन का उपयोग करके - फिर आप इसे किसी भी चर पर कर सकते हैं, न कि केवल एक गिने हुए चर के साथ)।
BrainSlugs83 2

@ulidtko क्या आप विस्तृत कर सकते हैं? क्या विफल? - आप क्या होने की उम्मीद कर रहे हैं? - क्या आप मूल फ़ोल्डर में हल करने की उम्मीद कर रहे हैं? (क्योंकि अगर यह किया है कि , मैं कहेंगे कि एक विफलता - यह पहली जगह में सिमलिंक होने की बात की तरह है ...)
BrainSlugs83

151

मुझे आज सुबह एक समान जरूरत थी: एक रिश्तेदार पथ को विंडोज कमांड स्क्रिप्ट के अंदर एक निरपेक्ष पथ में कैसे परिवर्तित किया जाए।

निम्नलिखित ने चाल चली:

@echo off

set REL_PATH=..\..\
set ABS_PATH=

rem // Save current directory and change to target directory
pushd %REL_PATH%

rem // Save value of CD variable (current directory)
set ABS_PATH=%CD%

rem // Restore original directory
popd

echo Relative path: %REL_PATH%
echo Maps to path: %ABS_PATH%

2
यह वास्तव में उपयोगी है। क्या इस तरह के बैच फ़ाइल चाल के लिए कोई अच्छा संसाधन हैं?
डैनी पार्कर

8
मत सोचो कि "सीडी" के बाद "पुशड" होना आवश्यक है। आप बस "पुश% REL_PATH%" कर सकते हैं। यह वर्तमान निर्देशिका को बचाएगा और एक बार में REL_PATH पर स्विच करेगा।
एडी सुलिवन

1
@DannyParker बैच तकनीकों और उदाहरण लिपियों का एक उपयोगी संग्रह है robvanderwoude.com/batchfiles.php । यह भी देखें stackoverflow.com/questions/245395/...
HFS

6
@EddieSullivan यदि निर्देशिका में परिवर्तन विफल रहता है (निर्देशिका मौजूद नहीं है, कोई अनुमति नहीं है ...), तो पुश कमांड भी विफल रहता है और वास्तव में निर्देशिका स्टैक पर कोई मान नहीं बढ़ाएगा। पॉप करने के लिए अगला कॉल (और सभी लगातार कॉल) गलत मूल्य पॉप करेगा। pushd .इस मुद्दे का उपयोग करना रोकता है।
स्वेन्स

1
ध्यान दें कि यह उन रास्तों पर काम नहीं करेगा जो फ़ाइल हैं या गैर-मौजूद पथ पर जहाँ बीच में कहीं .. है। यह मेरे लिए शो स्टॉपर नहीं था, लेकिन यह एक पुन: प्रयोज्य समाधान के लिए एक कमजोरी है।
मिहाई दानिला

97

इनमें से अधिकांश जवाब जटिल और सुपर छोटी गाड़ी पर पागल लगते हैं, यहां मेरा है - यह किसी भी पर्यावरण चर पर काम करता है, नहीं %CD%या PUSHD/ POPD, या for /fबकवास - बस सादे पुराने बैच फ़ंक्शन। - निर्देशिका और फ़ाइल भी मौजूद नहीं है।

CALL :NORMALIZEPATH "..\..\..\foo\bar.txt"
SET BLAH=%RETVAL%

ECHO "%BLAH%"

:: ========== FUNCTIONS ==========
EXIT /B

:NORMALIZEPATH
  SET RETVAL=%~dpfn1
  EXIT /B

7
यह वास्तव में एक साफ, काम और सीधा समाधान है।
रजवन

3
बहुत संक्षिप्त। मैं अब इस टेचीनीक का व्यापक रूप से उपयोग कर रहा हूं।
पॉलो फ्रांसा लैकरडा

यह% ~ dpfn1 क्यों है और केवल% ~ f1 नहीं है? क्या यह किसी प्रकार का हल है? % 7 और विंडोज़ 10 पर कम से कम मेरे लिए% ~ f1 ठीक काम करता है।
इल -

1
@ il - ya जैसा दिखता है %~f1, वैसे ही छोटा है %~dpfn1- इसलिए, %~f1इसके बजाय बेझिझक उपयोग करें । Long - लंबे प्रारूप में ~इसका मतलब है कि उद्धरणों को हटाएं, dड्राइव का pमतलब है, पथ का मतलब है, nअकेले बिना किसी एक्सटेंशन के फ़ाइल नाम होगा, लेकिन fnविस्तार के साथ फ़ाइल नाम का अर्थ है। 1पहला तर्क का मतलब है। - (मेरा मानना ​​है कि यह प्रारूप विंडोज 7. से पहले आता है)
BrainSlugs83

@ BrainSlugs83 ये चर XP (cmd.exe में) के बाद से उपलब्ध हैं, लेकिन तब से उनका उपयोग नहीं बदला है:% ~ f1 -% 1 को पूरी तरह से योग्य पथ नाम में विस्तारित करता है; % ~ d1 - केवल एक ड्राइव अक्षर के लिए% 1 का विस्तार करता है; % ~ p1 - केवल एक पथ पर% 1 ​​का विस्तार करता है; % ~ n1 - केवल फ़ाइल नाम के लिए% 1 का विस्तार करता है; % ~ X1 - केवल फाइल एक्सटेंशन में% 1 का विस्तार करता है। % ~ Fn1 के लिए कोई विशेष मामला नहीं है, यह नाम + एक्सटेंशन का उत्पादन नहीं करता है, एफ स्विच केवल डी, पी, एन और एक्स से अधिक पूर्वता लेता है जब वे संयुक्त होते हैं। लगता है कि डी, पी और एन को जोड़ने का कोई अच्छा कारण नहीं है।
इल -

35

आपके पास (और तर्क ऑपरेटरों का उपयोग करने के लिए) तर्क पारित करने के लिए एक और बैच फ़ाइल होने के बिना, आप उपयोग कर सकते हैं FOR /F:

FOR /F %%i IN ("..\relativePath") DO echo absolute path: %%~fi

जहां iमें %%~fiचर पर परिभाषित किया गया है /F %%i। जैसे। यदि आपने उसे बदल दिया /F %%aतो अंतिम भाग होगा %%~fa

कमांड प्रॉम्प्ट पर एक ही काम करने के लिए (और एक बैच फ़ाइल में नहीं) के %%साथ बदलें %...


निर्देशिका को बदलना महत्वपूर्ण नहीं है, क्योंकि यह इस तथ्य से नुस्खा को मजबूत बनाता है कि cdकमांड %CD%पर्यावरण चर को बदलता नहीं है (उदाहरण के लिए आप ड्राइव पर हैं D:और आपका लक्ष्य पथ चालू है C:)
jez

@ जेजे के लिए आप उपयोग कर सकते हैंcd /D D:\on.other.drive
सेबस्टियन

FOR /F %%i IN ("..\relativePath") DO echo absolute path: %%~fi..\relativePathरिक्त स्थान होने पर विफल रहेगा
सेबस्टियन

1
यह तब काम आया जब मैंने / F ध्वज को हटा दिया और %% ~ dpfnI का उपयोग किया। ध्यान दें कि for /?प्रतिस्थापन के मापदंडों के साथ भ्रम से बचने के लिए, चर नामों के लिए बड़े अक्षरों का उपयोग करने का सुझाव है
सेबस्टियन

1
@SebastianGodelet हटाने /Fउन रास्तों पर काम नहीं करेगा जो मौजूद नहीं हैं, और यह वाइल्डकार्ड वर्णों को हल करेगा। यदि आप चाहते हैं कि महान, लेकिन अगर आप की कार्यक्षमता चाहते हैं /F, तो आपको बस tokensकीवर्ड का उपयोग करने की आवश्यकता है :FOR /F "tokens=*" %%I IN ("..\relative Path\*") DO echo absolute path: %%~fI
स्वेन्स

15

यह एड्रियन प्लिसन के उत्तर में अंतराल को भरने में मदद करने के लिए है (जो इसे संपादित करने के साथ ही ऊपर उठाया जाना चाहिए ;-):

आप% ~ f1 का उपयोग करके अपने पहले तर्क का पूरी तरह से योग्य पथ भी प्राप्त कर सकते हैं, लेकिन यह वर्तमान पथ के अनुसार एक रास्ता देता है, जो स्पष्ट रूप से वह नहीं है जो आप चाहते हैं।

दुर्भाग्य से, मैं नहीं जानता कि 2 को एक साथ कैसे मिलाया जाए ...

एक को संभालने %0और %1इसी तरह कर सकते हैं :

  • %~dpnx0पूरी तरह से योग्य ड्राइव + पाथ + नाम + बैचफाइल के विस्तार के लिए,
    %~f0यह भी पर्याप्त है;
  • %~dpnx1पूरी तरह से योग्य ड्राइव + पथ + नाम + इसके पहले तर्क का विस्तार [यदि यह बिल्कुल फ़ाइल नाम है],
    %~f1भी पर्याप्त है;

%~f1इस बात से स्वतंत्र काम करेगा कि आपने अपना पहला तर्क कैसे निर्दिष्ट किया: सापेक्ष पथों के साथ या निरपेक्ष पथों के साथ (यदि आप नामकरण करते समय फ़ाइल का विस्तार निर्दिष्ट नहीं करते हैं %1, तो इसे जोड़ा नहीं जाएगा, भले ही आप उपयोग करें %~dpnx1- हालांकि

लेकिन अगर आप पहली जगह में कमांडलाइन पर उस पूर्ण पथ की जानकारी नहीं देंगे, तो आप किसी भी तरह से एक अलग ड्राइव पर एक फ़ाइल का नाम कैसे देंगे?

हालांकि, %~p0, %~n0, %~nx0और %~x0काम में विस्तार या फ़ाइल नाम का ही विस्तार के साथ आ सकते हैं, आप पथ (driveletter के बिना) में रुचि होना चाहिए, फ़ाइल नाम (विस्तार के बिना), पूर्ण फ़ाइल नाम। लेकिन ध्यान दें, जबकि %~p1और %~n1पहले तर्क के मार्ग या नाम का पता लगाने के लिए काम करेंगे, %~nx1और %~x1जब तक आप पहले से कमांडलाइन पर इसका इस्तेमाल नहीं करते, तब तक एक्सटेंशन को + नहीं जोड़ेगा।


इसके साथ समस्या %~dpnx1यह है कि यह वर्तमान निर्देशिका के सापेक्ष तर्क का पूरी तरह से योग्य मार्ग देता है , जबकि ओपी उस निर्देशिका के सापेक्ष पथ चाहता है जहां बैच फ़ाइल रहती है
एड्रियन प्लिसन

@ एड्रियन प्लिसन: %~dpnx11 तर्क का पूरी तरह से योग्य पथ देता है। बिल्कुल भी सापेक्ष नहीं और वर्तमान dir के सापेक्ष भी नहीं। dड्राइव के लिए है, pपथ के लिए है, nफ़ाइल नाम बिना प्रत्यय के लिए है, xप्रत्यय के लिए है, 1पहले तर्क के लिए है। - और नाथन का सवाल था: "क्या किसी फ़ाइलनाम और / या किसी अन्य पथ से एक निरपेक्ष पथ पर लौटने का कोई तरीका है?"
कर्ट फ़िफ़ेल

वर्णन के साथ पूर्ण और सापेक्ष पथ उपयोग और स्रोत दोनों । सराहना!
it3xl

10

आप इसके लिए बैच फ़ंक्शंस का भी उपयोग कर सकते हैं:

@echo off
setlocal 

goto MAIN
::-----------------------------------------------
:: "%~f2" get abs path of %~2. 
::"%~fs2" get abs path with short names of %~2.
:setAbsPath
  setlocal
  set __absPath=%~f2
  endlocal && set %1=%__absPath%
  goto :eof
::-----------------------------------------------

:MAIN
call :setAbsPath ABS_PATH ..\
echo %ABS_PATH%

endlocal

9

BrainSlugs83 के उत्कृष्ट समाधान के लिए छोटा सुधार । कॉल में आउटपुट वातावरण चर का नामकरण करने की अनुमति देने के लिए सामान्यीकृत।

@echo off
setlocal EnableDelayedExpansion

rem Example input value.
set RelativePath=doc\build

rem Resolve path.
call :ResolvePath AbsolutePath %RelativePath%

rem Output result.
echo %AbsolutePath%

rem End.
exit /b

rem === Functions ===

rem Resolve path to absolute.
rem Param 1: Name of output variable.
rem Param 2: Path to resolve.
rem Return: Resolved absolute path.
:ResolvePath
    set %1=%~dpfn2
    exit /b

यदि C:\projectआउटपुट से चलाया जाता है:

C:\project\doc\build

4

मैंने इस समस्या के कई समाधान नहीं देखे हैं। कुछ समाधान सीडी और अन्य बैच कार्यों का उपयोग करते हुए डायरेक्टरी ट्रैवर्सल का उपयोग करते हैं। मेरी व्यक्तिगत प्राथमिकता बैच फ़ंक्शंस और विशेष रूप से, मेसअब्सोल्यूट फ़ंक्शन के रूप में है , जो डॉसिप्स द्वारा प्रदान की गई है।

फ़ंक्शन के कुछ वास्तविक लाभ हैं, मुख्य रूप से यह आपकी वर्तमान कार्य निर्देशिका को नहीं बदलता है और दूसरी बात यह है कि जिन रास्तों का मूल्यांकन किया जा रहा है, उनका अस्तित्व भी नहीं है। आप यहां फ़ंक्शन का उपयोग करने के बारे में कुछ उपयोगी सुझाव पा सकते हैं ।

यहाँ एक उदाहरण स्क्रिप्ट और इसके आउटपुट है:

@echo off

set scriptpath=%~dp0
set siblingfile=sibling.bat
set siblingfolder=sibling\
set fnwsfolder=folder name with spaces\
set descendantfolder=sibling\descendant\
set ancestorfolder=..\..\
set cousinfolder=..\uncle\cousin

call:MakeAbsolute siblingfile      "%scriptpath%"
call:MakeAbsolute siblingfolder    "%scriptpath%"
call:MakeAbsolute fnwsfolder       "%scriptpath%"
call:MakeAbsolute descendantfolder "%scriptpath%"
call:MakeAbsolute ancestorfolder   "%scriptpath%"
call:MakeAbsolute cousinfolder     "%scriptpath%"

echo scriptpath:       %scriptpath%
echo siblingfile:      %siblingfile%
echo siblingfolder:    %siblingfolder%
echo fnwsfolder:       %fnwsfolder%
echo descendantfolder: %descendantfolder%
echo ancestorfolder:   %ancestorfolder%
echo cousinfolder:     %cousinfolder%
GOTO:EOF

::----------------------------------------------------------------------------------
:: Function declarations
:: Handy to read http://www.dostips.com/DtTutoFunctions.php for how dos functions
:: work.
::----------------------------------------------------------------------------------
:MakeAbsolute file base -- makes a file name absolute considering a base path
::                      -- file [in,out] - variable with file name to be converted, or file name itself for result in stdout
::                      -- base [in,opt] - base path, leave blank for current directory
:$created 20060101 :$changed 20080219 :$categories Path
:$source http://www.dostips.com
SETLOCAL ENABLEDELAYEDEXPANSION
set "src=%~1"
if defined %1 set "src=!%~1!"
set "bas=%~2"
if not defined bas set "bas=%cd%"
for /f "tokens=*" %%a in ("%bas%.\%src%") do set "src=%%~fa"
( ENDLOCAL & REM RETURN VALUES
    IF defined %1 (SET %~1=%src%) ELSE ECHO.%src%
)
EXIT /b

और आउटपुट:

C:\Users\dayneo\Documents>myscript
scriptpath:       C:\Users\dayneo\Documents\
siblingfile:      C:\Users\dayneo\Documents\sibling.bat
siblingfolder:    C:\Users\dayneo\Documents\sibling\
fnwsfolder:       C:\Users\dayneo\Documents\folder name with spaces\
descendantfolder: C:\Users\dayneo\Documents\sibling\descendant\
ancestorfolder:   C:\Users\
cousinfolder:     C:\Users\dayneo\uncle\cousin

मुझे आशा है कि यह मदद करता है ... मुझे यकीन है कि यह मदद की :) पुनश्च DosTips के लिए फिर से धन्यवाद! आपने धमाल मचाया!


धन्यवाद @ulidtko मैंने पहले सहानुभूति के खिलाफ कोशिश नहीं की है।
दिनो नोव

2

आप बस उन्हें संक्षिप्त कर सकते हैं।

SET ABS_PATH=%~dp0 
SET REL_PATH=..\SomeFile.txt
SET COMBINED_PATH=%ABS_PATH%%REL_PATH%

यह आपके रास्ते के बीच में \ _ \ _ के साथ विषम दिखता है, लेकिन यह काम करता है। पागल कुछ भी करने की जरूरत नहीं है :)


यह सिर्फ काम करता है। आगे को सरल बनाया जा सकता हैecho %~dp0..\SomeFile.txt
२०:४०

1

आपके उदाहरण में, Bar \ test.bat, DIR / B / S .. \ somefile.txt से पूर्ण पथ वापस आ जाएगा।


यह एक बुरा विचार नहीं है ... क्या मुझे एक परिणाम के साथ डीआईआर के परिणाम पर लूप करना चाहिए और बस पहले परिणाम को पकड़ना चाहिए?
नाथन टेलर

मैंने कई फाइलों के साथ समस्या के बारे में सोचा। आपने यह निर्दिष्ट नहीं किया कि क्या गुणकों में कोई समस्या थी, इसलिए मैं इसके साथ गया था। फॉर फॉर लूप के रूप में, मुझे लूप के लिए "../" खिलाने में दिक्कत हो रही है, लेकिन ymmv। यदि आप इसे डीआईआर कमांड पर नहीं ले जा सकते हैं, तो आप आउटपुट को एक फ़ाइल में भेज सकते हैं और उसके माध्यम से लूप ले सकते हैं। मैं रास्ता निकालने के 'मानक' तरीके को बुरा नहीं कह रहा हूँ, यह सिर्फ इतना है कि मुझे लगा कि मेरा जो आपने पूछा उससे अधिक किया। दोनों समाधान 'कुछ' करते हैं, और वे दोनों मुद्दों का अपना सेट है।
जॉर्ज सिस्को

ओह..और, यदि आप सफलतापूर्वक DIR के माध्यम से लूप करते हैं, तो आप एक फ़ाइल पर रीडायरेक्ट ओवरराइट कर सकते हैं और अंतिम परिणाम प्राप्त कर सकते हैं। यदि आप ऑर्डर को इस तरीके से उलटते हैं जो आपको स्वीकार्य है, तो आप केवल पहला परिणाम प्राप्त कर सकते हैं। यदि आपको फ़ाइल के माध्यम से लूप करना है, तो पहला परिणाम प्राप्त करने के लिए आदेश को उलट देना जो अंतिम स्थिति में होगा, मदद भी कर सकता है। कारण है कि मैं सुझाव देता हूं कि वास्तव में उनके साथ सौदा करने के बजाय बहुत सारी चीजों को प्राप्त करना और त्यागना आसान हो सकता है। मुझे नहीं पता कि मेरे सोचने का तरीका आपको समझ में आता है या नहीं। बस इसे एक विचार के रूप में वहाँ डाल दिया।
जॉर्ज सिस्को

यदि आपको किसी फ़ोल्डर में पथ को सामान्य करने की आवश्यकता है, तो मैं इस समाधान का सुझाव देता हूं: stackoverflow.com/questions/48764076/…
uceumern

0

PowerShell इन दिनों बहुत आम है इसलिए मैं इसे अक्सर C # आह्वान करने के एक त्वरित तरीके के रूप में उपयोग करता हूं क्योंकि इसमें हर चीज के लिए कार्य हैं:

@echo off
set pathToResolve=%~dp0\..\SomeFile.txt
for /f "delims=" %%a in ('powershell -Command "[System.IO.Path]::GetFullPath( '%projectDirMc%' )"') do @set resolvedPath=%%a

echo Resolved path: %resolvedPath%

यह थोड़ा धीमा है, लेकिन वास्तविक स्क्रिप्टिंग भाषा का सहारा लिए बिना प्राप्त कार्यक्षमता को हरा पाना मुश्किल है।


0

stijn के समाधान के तहत सबफ़ोल्डर्स के साथ काम करता है C:\Program Files (86)\,

@echo off
set projectDirMc=test.txt

for /f "delims=" %%a in ('powershell -Command "[System.IO.Path]::GetFullPath( '%projectDirMc%' )"') do @set resolvedPath=%%a

echo full path:    %resolvedPath%

0

फाइलें अन्य सभी उत्तर देखें

निर्देशिकाएँ

..आपके सापेक्ष पथ होने के साथ , और आप वर्तमान में हैं D:\Projects\EditorProject:

cd .. & cd & cd EditorProject (सापेक्ष पथ)

निरपेक्ष मार्ग उदा

D:\Projects


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.