एक बैच में, ड्राइव पथ के बजाय वॉल्यूम नाम का उपयोग करने वाले पथ को कैसे निर्दिष्ट करें?


1

एक बैच में, क्या ड्राइव अक्षर के बजाय वॉल्यूम नाम का उपयोग करके पथ निर्दिष्ट करने का कोई तरीका है? (जैसे: \\ RECOVERY \ Docs \ ... जैसी कोई चीज़

या, यदि संभव नहीं है, तो यह जांचने का एक तरीका है कि क्या कोई विशिष्ट वॉल्यूम नाम किसी विशिष्ट ड्राइव अक्षर से संबंधित है (जैसे: यदि F: \ RECOVERY ऐसा करते हैं तो)

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


मुझे यकीन नहीं है कि एक लेखन बैकअप प्रोग्राम में जत्था यह अच्छी तरकीब है...
Daniel Beck

वास्तव में, मैं एक कमांड लाइन टूल का उपयोग करूंगा जो मेरे लिए काम करेगा। उदाहरण: सिंक "D: \ दस्तावेज" "E: \ backup"
tigrou

यदि आपका प्रोग्राम यूएनसी रास्तों का उपयोग कर संभाल सकता है \\?\Volume{GUID} एक अच्छा विचार होगा, उदाहरण देखें यहाँ इन रास्तों का पता कैसे लगाएं (एक बार)।
Daniel Beck

मात्रा UNC रास्तों का पता लगाने के लिए, दौड़ें mountvol C: /L में cmd, C: ड्राइव अक्षर है। यदि आप इसकी पुष्टि करते हैं तो मैं इसे उत्तर के रूप में पोस्ट करूंगा। यदि ऐसा नहीं होता है तो आप हमेशा इन संस्करणों को आगे वर्णमाला में वापस ले जा सकते हैं (X स्रोत के लिए X, गंतव्य के लिए Y), और बाद में इनका उपयोग करें ...
Daniel Beck

मुझे पहले से ही पता चल गया है कि HKLM \ System \ MountedDevices का उपयोग करके गाइड कैसे खोजा जाता है, हालाँकि माउंटवोल तेज़ है: D। कमांड लाइन टूल C # में लिखा गया है। मैंने उसे UNC के रास्ते देने की कोशिश की, लेकिन उसने System.Security.Pims.FileIOPermission.HasIllegalCharacters प्रकार का अपवाद फेंक दिया।
tigrou

जवाबों:


2

व्यक्तिगत रूप से मैं WMI का उपयोग करता हूं (अगर सीएमडी एक है तो विकी) और लेबल प्राप्त करें - & gt; वहां से ड्राइव लेटर लिंक। यह करना बहुत कठिन नहीं है, लेकिन मैं एक टिप्पणी से सहमत हूं कि बैच फ़ाइल सबसे अच्छा समाधान नहीं हो सकती है ... इतने नाजुक बैकअप संचालन के लिए। उस ने कहा, यहाँ तर्क जल्दी से प्राप्त करने के लिए:

@echo off
set VAR=Source
for /f "skip=1" %%L in ('wmic logicaldisk where volumename^="SourceLabel" Get Caption') do @call :SetVar %%L
set VAR=Destination
for /f "skip=1" %%L in ('wmic logicaldisk where volumename^="DestinationLabel" Get Caption') do @call :SetVar %%L

echo Copying data from %Source% to %Destination%
goto :EOF

:SetVar
set Label=%1
if NOT [%Label%]==[] set %VAR%=%Label%
goto :EOF

आपको बस इतना करना है कि सोर्सलैब को सोर्स ड्राइव के असली लेबल से बदल दिया जाए, डेस्टिनेशन लेबल के साथ। एक बार जब आप इको कमांड में सही संदर्भ प्राप्त करते हैं - आप इसके और "गोटो: ईओएफ" निर्देश के बीच कोई अन्य तर्क रख सकते हैं।


महान! एक आखिरी सवाल: मैं कैसे आसानी से जांच कर सकता हूं कि क्या वॉल्यूमेंस में से एक नहीं मिला है और एक संदेश प्रिंट करता है?
tigrou

आपको बस var परिभाषित होने के लिए परीक्षण करने की आवश्यकता है, उदा। if not defined Source (echo Source not found&&goto :EOF) if not defined Destination (echo Destination not found&&goto :EOF)
BartekB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.