2008-09-24 13 views
23

मैं एमएस पावरशेल के लिए एक स्क्रिप्ट लिख रहा हूं। यह स्क्रिप्ट Copy-Item कमांड का उपयोग करती है। इस आदेश के वैकल्पिक तर्कों में से एक है "-container"। तर्क के लिए प्रलेखन में कहा गया है कि इस तर्क को निर्दिष्ट करना "कॉपी ऑपरेशन के दौरान कंटेनर ऑब्जेक्ट्स को संरक्षित करता है।"पावरहेल की कॉपी-आइटम-कंटेनर तर्क का अर्थ क्या है?

यह सब ठीक है और अच्छा है, क्योंकि मैं एक प्रतिलिपि बनाने के दौरान अनपेक्षित कंटेनर ऑब्जेक्ट्स चाहता हूं। लेकिन सभी गंभीरता में, यह तर्क क्या करता है? विशेष रूप से उस मामले में जहां मैं डिस्क स्थान पेड़ को एक स्थान से दूसरे स्थान पर कॉपी कर रहा हूं, Copy-Item कमांड के व्यवहार में इससे क्या अंतर होता है?

उत्तर

22

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

इस पर एक पकड़ है ... यदि आप निर्देशिका सूचीकरण करते हैं और इसे कॉपी-आइटम पर पाइप करते हैं, तो यह फ़ोल्डर संरचना को संरक्षित नहीं करेगा। यदि आप फ़ोल्डर संरचना को संरक्षित करना चाहते हैं, तो आपको -पाथ संपत्ति और -क्र्रेस स्विच निर्दिष्ट करना होगा।

+0

कि बहुत स्पष्ट है। धन्यवाद! –

+3

-container एक स्विच है, इसलिए इसे मूल्य पास करने के लिए ':' की आवश्यकता है। '-container: $ false'। –

34

मुझे भी उपयोगी से कम दस्तावेज मिला। मैंने कुछ परीक्षण किए हैं कि -Container पैरामीटर -Recurse के साथ फ़ाइलों और फ़ोल्डरों की प्रतिलिपि बनाते समय कैसे काम करता है।

ध्यान दें कि -Container का अर्थ -Container: $true है।

# X:. 
# ├───destination 
# └───source 
#  │ source.1.txt 
#  │ source.2.txt 
#  │ 
#  └───source.1 
#    source.1.1.txt 
  • सारे उदाहरण के लिए, वर्तमान स्थान (पीडब्ल्यूडी) X:\ है:

    इस फ़ाइल संरचना मैं उदाहरण के लिए इस्तेमाल किया है।

  • मैंने पावरशेल 4.0 का उपयोग किया।

    Copy-Item -Path source -Destination .\destination 
    Copy-Item -Path source -Destination .\destination -Container 
    # X:. 
    # ├───destination 
    # │ └───source 
    # └───source (...) 
    

    निम्नलिखित एक त्रुटि देता है::


1) सिर्फ स्रोत फ़ोल्डर (खाली फ़ोल्डर) को कॉपी करने के

Copy-Item -Path source -Destination .\destination -Container: $false 
# Exception: Container cannot be copied to another container. 
#   The -Recurse or -Container parameter is not specified.  

2) पूरी कॉपी करने के लिए फाइलों के साथ फ़ोल्डर संरचना:

Copy-Item -Path source -Destination .\destination -Recurse 
Copy-Item -Path source -Destination .\destination -Recurse -Container 
# X:. 
# ├───destination 
# │ └───source 
# │  │ source.1.txt 
# │  │ source.2.txt 
# │  │ 
# │  └───source.1 
# │    source.1.1.txt 
# └───source (...)  

3) एक ही फ़ोल्डर में सभी सन्तान (फ़ाइलों और फ़ोल्डरों) कॉपी करने के लिए:

Copy-Item -Path source -Destination .\destination -Recurse -Container: $false 
# X:. 
# ├───destination 
# │ │ source.1.1.txt 
# │ │ source.1.txt 
# │ │ source.2.txt 
# │ │ 
# │ └───source.1 
# └───source (...) 
+4

यह उत्तर अधिक वोटों के पात्र है। यह कल्पना के लिए कुछ नहीं छोड़ता है। +1 –

संबंधित मुद्दे