2010-04-22 10 views
7

मेरे पास मेरी बैट फ़ाइल में निम्न चीज़ें हैं। कहते हैं किबल्ले कमांड का उपयोग करके सबस्ट्रिंग

सेट पथ = c: \ अस्थायी \ परीक्षण

तो बुनियादी तौर पर मैं एक आउटपुट जो मुझे के रूप में ग परिणाम देना होगा करना चाहते हैं: \ \

अस्थायी

मैं बल्लेबाजी में किसी भी indexOf बराबर लगता है फ्लॉप आदेश।

धन्यवाद।

उत्तर

5

पृष्ठभूमि:

>set fullname=c:\mypath\oldfile 
>set changedname=%fullname:oldfile=newfile% 
>echo %changedname% 
c:\mypath\newfile 

समस्या के लिए लागू:

> set fullname=c:\mypath\oldfile 
> set pathonly=%fullname:oldfile=% 
> echo %pathonly% 
c:\mypath\ 
1

एक प्रश्न जो वास्तव में मुझे चाहता है 4DOS अभी भी मौजूद है। हालांकि, मुझे कुछ ऐसा मिला जो alt.msdos.batch.nt में मदद कर सकता है। set के लिए मैन्युअल पृष्ठ में अधिकांश जानकारी होती है। (आदेश help set)

set test=123456789 

rem extract chars 0-5 from the variable test 
set test=%test:~0,5% 

echo %test% 

(नोट: Windows XP SP3 पर परीक्षण)

0

भोले सबस्ट्रिंग समस्या आप उन्हें हर बार अपने पथ बदल समायोजित करने के लिए है कि है और यह करने के लिए एक सामान्य समाधान नहीं है मुसीबत।

@echo off 
set foo=C:\Temp\Test 
call :strip 
echo %foo% 
goto :eof 

:strip 
if not "%foo:~-1%"=="\" (
    set foo=%foo:~0,-1% 
    goto :strip 
) 
goto :eof 

यह एक चर करने के लिए हार्ड-कोडेड है, लेकिन है कि आसानी से तय हो गई है, यदि आवश्यक:

निम्नलिखित बैच फ़ाइल अवधारणा कैसे आप पथ के काट-छांट भाग कर सकता का एक सबूत देता है।

यहां मुख्य भाग strip सबराउटिन है जो एक बैकस्लैश मिलने तक स्ट्रिंग के अंतिम चरित्र को लूप और कट करता है। यह प्रभावी रूप से पथ के अंतिम भाग को हटा देता है।

1

आप ऐसा क्यों चाहते हैं?

Johannes' जवाब एक संभव समाधान है, लेकिन शायद पथ आप के लिए किया जा रहा है (या किया जा सकता है) स्क्रिप्ट को एक तर्क, जिस स्थिति में आप निम्न सिंटैक्स का उपयोग कर सकते हैं के रूप में पारित हो जाता है देखें:

REM Extracts the drive and path from argument %1 
SET p=%~dp1 

वैकल्पिक रूप से आप .. और स्क्रिप्ट पथ (%0) गठबंधन हो सकता है:

REM Sets p to a sibling of the script directory 
SET p=%~dp0..\test 
संबंधित मुद्दे