2011-04-27 12 views
17

मेरे पास एक बैच फ़ाइल है जो यूएसबी कुंजी पर है। मुझे बैच में ड्राइव नाम पता होना चाहिए।विंडोज बैच स्क्रिप्ट वर्तमान ड्राइव नाम प्राप्त करें

उदाहरण, यदि यह ई है: \ mybatch.bat यह ई: \ F: \, G: \ आदि के लिए एक ही चीज़ मिलनी चाहिए जब यह खोला जाए।

मैं बैच स्क्रिप्ट में ऐसा कैसे कर सकता हूं। (विंडोज़)

+0

क्या आप उस ड्राइव को चाहते हैं जहां बैच स्थित है या वर्तमान कार्यशील निर्देशिका का ड्राइव? वे दो अलग हैं। – Joey

उत्तर

27

%CD% वह है जो आप खोज रहे हैं। यह बैच फ़ाइल की वर्तमान कार्यशील निर्देशिका या इसे चलाने वाले कमांड को प्रिंट करता है। यदि आपकी बैच फ़ाइल ड्राइव की जड़ पर है, तो यह केवल ड्राइव अक्षर प्रिंट करेगी, अन्यथा आपको पहले 2 अक्षरों को पार्स करना होगा।

उदाहरण:

echo %CD% 

प्रिंट

E:\ 
एक फ्लैश ड्राइव ई करने के लिए घुड़सवार पर

:.

अद्यतन: एंड्री के रूप में टिप्पणी में कहा, अगर आप सिर्फ पथ के पहले तीन अक्षर के लिए देख रहे हैं, तो यह% सीडी% के बजाय का उपयोग करें:

%CD:~0,3% 

यह E:\ में परिणाम होगा, के लिए उदाहरण, ड्राइव पर कहीं भी।

+0

मैं अपने जावा फ़ाइल को संकलित करने के लिए भी geany संपादक को कॉन्फ़िगर करने की कोशिश कर रहा हूं भले ही यूएसबी पर आईएम। मैंने% सीडी% जेडीके \ bin \ javac "% f" का उपयोग किया लेकिन यह काम नहीं किया। वैसे भी आपका जवाब सही है और जितनी जल्दी हो सके मैं आपका उत्तर स्वीकार करूंगा। ty – SBSTP

+0

केवल% सीडी% के बजाय% सीडी% \ प्रयास करें। अन्यथा itll ई के लिए देखो: ई के बजाय JDK \ बिन \ javac: \ JDK \ बिन \ javac –

+0

मैं एक सरल स्क्रिप्ट किया था, 'code' बंद @echo गूंज% सीडी% ठहराव ' code' मुद्रित सी : \ नहीं सी: – SBSTP

9

यदि एक .CMD/.BAT फ़ाइल के अंदर से चलाया जाता है, तो आप वर्तमान/कार्यशील निर्देशिका प्राप्त करने के लिए %~dp0 का उपयोग कर सकते हैं। यह एक छोटा सा सुरक्षित है क्योंकि यह यूएनसी पथों और ऐसे लोगों से अवगत है। उस चर के वाक्यविन्यास के लिए संदर्भ here उपलब्ध है।

+0

सत्य नहीं है @ewall: पैरामीटर 0 हमेशा बैच फ़ाइल स्थान की निर्देशिका को बरकरार रखता है - जो किसी अन्य ड्राइव से बैच फ़ाइल कहलाता है तो वर्तमान कार्यशील निर्देशिका नहीं हो सकती है। एक पूरी तरह से योग्य पथनाम के साथ बैच फ़ाइल को कॉल करने से वर्तमान कार्य निर्देशिका को उस पथ में नहीं बदला जाता है। यही कारण है कि% सीडी% उपयोगी है - यह वर्तमान कार्यशील निर्देशिका दिखाता है, बैच फ़ाइल स्थान नहीं। –

14

एम $ प्रलेखन "Using batch parameters" कहते हैं:

संशोधक:% ~ D0

विवरण: ड्राइव अक्षर को% 0 विस्तृत करता है।

1

आप इसके साथ किसी भी ड्राइव से सभी यूएसबी ड्राइव अक्षरों को पा सकते हैं।

@echo off 

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

if %%l equ 2 (
echo %%i is a USB drive. 
     ) 
     ) 
0

बहुत बहुत धन्यवाद @ Sparky3489, अगर मैं सिर्फ एक USB फ्लैश ड्राइव है, मैं इस अपने एल्गोरिथ्म के भीतर डाल दिया, सही होने के बाद

echo %%i is a USB drive. 
Set FlashDrive=%%I 

मैं भी

के पहचानकर्ता के शब्दों को बदल दिया
Echo %%i is a USB Flash Drive~! 

फिर, के बाद, {और बाहर} एल्गोरिथ्म, मैं फ्लैश ड्राइव पथ जैसे जोड़ सकते हैं ...

Set FlashPath=%FlashDrive%\Users\Public\Documents 

फिर अन्य पथ की स्थापना करके जैसे

Set SourcePath=C:\Users\Public\Documents 

मैं फ्लैश ड्राइव के लिए एक बैच फ़ाइल बैकअप कर सकते हैं, (कहा जा सकता है के माध्यम से विंडोज अपने त्वरित लॉन्च विंडो में एक एसोसिएटेड चिह्न के साथ लघु कट ~ "त्वरित लॉन्च" खोजें, अगर मैं इस बारे में बात कर रहा हूं कि मैं किस बारे में बात कर रहा हूं)।

Rem * * * * * * * * * Start Batch File * * * * * * * * * * 
@Echo OFF 
cls 
Echo FlashDrive UpDater for 
Echo. 
Echo Excel, Word ... 
Echo * * * * * * * * * ~ Excel SpreadSheets ~ * * * * * * * * * 
XCopy /D /I /V /Y /U /S "%SourcePath%\Excel Documents\*.*" "%FlashPath%\Excel Documents\" 
Echo * * * * * * * * * ~ Word Documents ~ * * * * * * * * * 
XCopy /D /I /V /Y /U /S "%SourcePath%\Word Documents\*.*" "%FlashPath%\Word Documents\" 
Echo. 
Echo. 
Echo FlashDrive = %FlashDrive% 
Echo FlashPath = %FlashPath% 
Echo. 
Echo * Bonus Switch Info * * * * * 
Echo * XCopy Switch /D ~ Copies Files Changed On or After the Specified Date. 
Echo *   {If no Date is Given, Copies only those Files whose 
Echo *   Source Time is Newer than the Destination Time}. 
Echo * XCopy Switch /I ~ Copies More than One File to Destination (Assumes Destination is a Directory) 
Echo * XCopy Switch /S ~ Copies Directories and Subdirectories Except Empty Ones 
Echo * XCopy Switch /V ~ Verifies Each New File. 
Echo * XCopy Switch /U ~ Copies only Files that Already Exist in Destination. 
Echo * XCopy Switch /Y ~ Suppresses Prompting to Confirm You Want to Overwrite an Existing Destination File. 
Echo. 
Rem for More Info on XCopy Switches GoTo http://support.microsoft.com/kb/128756 
Echo Directory Path = %~DP0 
Echo. 
Echo * Batch File Name = %0 * 
Echo. 
Rem Echo %CD:~0,2%, {Returns "Drive Letter & Colon"} 
Rem Echo %CD:~0,3%, {Returns "Drive Letter & Colon & BackSlash"} 
Pause 
cls 
Pause 
Exit 
Rem * * * * * * * * * End Batch File * * * * * * * * * * 
संबंधित मुद्दे