2012-04-19 28 views
7

में सापेक्ष पथ में पूर्ण पथ को कनवर्ट करें क्या बैच फ़ाइल में किसी रिश्तेदार पथ पर एक पूर्ण पथ को परिवर्तित करना संभव है? (this के विपरीत)। जाहिर है आपको दो इनपुट की आवश्यकता होगी: कनवर्ट करने के लिए पूर्ण पथ, और एक पूर्ण संदर्भ पथ जिसे आप इसके साथ जोड़ना चाहते हैं।बैच फ़ाइल

जैसे:

Path to convert: c:\documents\mynicefiles\afile.txt 
Reference path: c:\documents 
Result:   mynicefiles\afile.txt 

उत्तर

5
@echo off 
setlocal EnableDelayedExpansion 
set Path_to_convert=c:\documents\mynicefiles\afile.txt 
set Reference_path=c:\documents 
set Result=!Path_to_convert:*%Reference_path%\=! 
echo Result: %Result% 
+0

धन्यवाद, यह पूरी तरह से काम करने लगता है! मैंने पहले कभी उस वाक्यविन्यास को नहीं देखा है, क्या आप कृपया स्पष्टीकरण या लिंक प्रदान कर सकते हैं? –

+0

मैं भी उत्साहित हूं क्योंकि यह काम करता है, भले ही मैं कहने से नफरत करता हूं, मुझे नहीं पता कि क्यों। –

+0

टाइप करें: 'एसईटी /? 'और" पर्यावरण परिवर्तनीय प्रतिस्थापन के तहत स्पष्टीकरण को निम्नानुसार बढ़ाया गया है:% पथ: str1 = str2% "और निम्नानुसार:" विलंबित वातावरण परिवर्तनीय विस्तार आपको ... " – Aacini

0

यहाँ एक और तरीका है, तो अपने अभाव एक स्ट्रिंग की शुरुआत से% सीडी% दूर करने के लिए काम करता है कि है। यह धीमा है लेकिन यदि आप स्थिति की अनुमति देते हैं तो आप लूप की संख्या को कम कर सकते हैं।

call :removeCommonAtStart outvar C:\Users\Public\Documents\ASUSAccess 

:removeCommonAtStart 
:: Description: loops through two strings and sets new variable representing unique data 
:: Required parameters: 
:: name - name of the variable to be returned 
:: test - string to have common data removed from start 
:: Optional parameters: 
:: remove - string if not defined then use %cd% as string. 
:: Required functions: 
:: removelet 
set name=%~1 
set test=%~2 
set remove=%~3 
if not defined remove set remove=%cd% 
set endmatch= 
FOR /L %%l IN (0,1,150) DO if not defined notequal call :removelet 
goto :eof 

:removelet 
:: Description: called by removeCommonAtStart to remove one letter from the start of two string variables 
:: Required preset variables: 
:: test 
:: remove 
:: name 
set test=%test:~1% 
set %name%=%test:~1% 
set remove=%remove:~1% 
if "%test:~0,1%" neq "%remove:~0,1%" set notequal=on&exit /b 
goto :eof