एक फ़ोल्डर से दूसरे में कुछ एक्सटेंशन के साथ फ़ाइलों को कॉपी करने के लिए एक पॉवरशेल स्क्रिप्ट लिखना


10

मैं एक पॉवरशेल स्क्रिप्ट लिखना चाहूंगा जिसे इनपुट के रूप में निम्नलिखित पैरामीटर मिलते हैं:
फ़ोल्डर से कॉपी करने के लिए, एक्सटेंशन की अनुमति देता है, फ़ोल्डर को कॉपी करने के लिए और एक बूलियन यह दर्शाता है कि क्या परिवर्तन को IIS, उपयोगकर्ता नाम और पासवर्ड को फिर से शुरू करना चाहिए।
मुझे क्या देखना चाहिए कि मैं एक दूरस्थ सर्वर की नकल कर रहा हूं?
मैं मापदंडों को चर में कैसे पढ़ूं?
मैं IIS को कैसे पुनः आरंभ करूँ?

यह देखते हुए कि मैं कई फ़ोल्डरों की प्रतिलिपि बनाना चाहता हूं, मैं एक पॉवरशेल स्क्रिप्ट कैसे लिख सकता हूं जो एक पॉवरशेल स्क्रिप्ट को इनवॉइस करता है?


वाह, किसी भी प्रतिक्रिया में देरी के लिए खेद है ... क्या आपको अभी भी मदद की ज़रूरत है?
मार्को शॉ

हां, मैं वास्तव में IIS को पुनरारंभ करने का तरीका नहीं जानता हूं? मैं यह कैसे सुनिश्चित करूँ कि फ़ाइलें वास्तव में कॉपी की गई हैं?
The_drow

जवाबों:


22

Get-ChildItemआपको फ़ाइल नाम और फ़ाइल निर्देशिकाओं को सूचीबद्ध करने की अनुमति देता है, जिसमें फ़ाइल नाम फ़िल्टर के साथ पुनरावर्ती शामिल हैं। Copy-Itemआपको एक फ़ाइल कॉपी करने की अनुमति देता है।

फ़ाइलों का चयन करने के मामले में बहुत अधिक ओवरलैप है, अक्सर यह Copy-Itemअपने आप में पर्याप्त है कि आपको क्या ज़रूरत है (उदाहरण के लिए आप फ़ोल्डर संरचना को बनाए रखना चाहते हैं?) के विवरण के आधार पर पर्याप्त है

सभी को कॉपी करने के लिए *.fooऔर *.barStartFolder से DestFolder तक:

Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"

यदि आपको फ़ोल्डर संरचना को संरक्षित करने की आवश्यकता है तो चीजें कठिन हो जाती हैं क्योंकि आपको गंतव्य फ़ोल्डर नाम बनाने की आवश्यकता है, कुछ इस तरह से:

$sourcePath = 'C:\StartFolder'
$destPath = 'C:\DestFolder'

Get-ChildItem $sourcePath -Recurse -Include '*.foo', '*.bar' | Foreach-Object `
    {
        $destDir = Split-Path ($_.FullName -Replace [regex]::Escape($sourcePath), $destPath)
        if (!(Test-Path $destDir))
        {
            New-Item -ItemType directory $destDir | Out-Null
        }
        Copy-Item $_ -Destination $destDir
    }

लेकिन robocopyआसान होने की संभावना है:

robocopy StartFolder DestFolder *.foo *.bar /s

अंत में चुनने का तरीका क्या आवश्यक है के विवरण पर निर्भर करेगा।

(ऊपर में मैंने उपनामों से परहेज किया है (उदाहरण के Copy-Itemबजाय copy) और स्पष्ट रूप से पैरामीटर नामों का उपयोग करें भले ही वे स्थितीय हों।)


2
Does not काम, मैंने कोशिश की: Copy-Item -path "C:\Users\username\Pictures\" -include "*.JPG", "*.PNG" -Destination "D:\"के साथ और -recurse बिना - कुछ नहीं होता
Carmageddon

6

मैं IIS भाग को संबोधित नहीं कर सकता, लेकिन निर्देशिका संरचना को संरक्षित करते हुए फ़ाइल की प्रतिलिपि अन्य उत्तरों में दिखाए गए की तुलना में बहुत सरल हो सकती है:

Copy-Item -path "StartFolder" -Recurse -Include "*.foo","*.bar" -Destination "DestFolder" -Container

-Containerतर्क जादू बात यह है कि गंतव्य में संरचना को दोहराने जाएगा के रूप में यह स्रोत में है।


मैं इसके साथ काम करने में असमर्थ हूं -Include... हालांकि मैं इसे बिना सब कुछ कॉपी करने के लिए प्राप्त कर सकता हूं-Include
बेन पॉलिन्स्की

1

मेरे लिए काम करने का एकमात्र उपाय है

Copy-Item -path 'c:\SourceFolder\*.foo' -destination 'c:\DestFolder'

-Includeपैरामीटर का उपयोग करने वाले अन्य समाधान काम नहीं करते थे।


1

जैसा कि कुछ लोगों ने यहां बताया है -Include काम नहीं करता है।

नेस्टेड फ़ोल्डरों के साथ काम करने के लिए मैंने दो चरणों का उपयोग किया: 'फ़िल्टर' + खाली फ़ोल्डरों को हटा दें

#copy with folder structure
Copy-Item -path $source -Recurse -Filter "*.foo" -Destination $destination -Container

#remove empty folders
dir $destination -Directory -Recurse |
    %{ $_.FullName} |
    sort -Descending |
    where { !@(ls -force $_) } |
    rm 

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.