একটি ফোল্ডার থেকে অন্য ফোল্ডারে নির্দিষ্ট এক্সটেনশন সহ ফাইলগুলি অনুলিপি করতে পাওয়ারশেল স্ক্রিপ্ট লেখা Writ


10

আমি একটি পাওয়ারশেল স্ক্রিপ্ট লিখতে চাই যা ইনপুট হিসাবে নিম্নলিখিত পরামিতিগুলি পায়:
ফোল্ডার থেকে অনুলিপি করতে, এক্সটেনশনগুলি অনুমতি দেয়, ফোল্ডারে অনুলিপি করতে পারে এবং একটি বুলিয়ান ইঙ্গিত করে যে পরিবর্তনটি আইআইএস, ব্যবহারকারীর নাম এবং পাসওয়ার্ড পুনরায় আরম্ভ করা উচিত কিনা।
আমি কোন রিমোট সার্ভারে অনুলিপি করছি তা বিবেচনা করে আমি কোন সেমিডিলেটগুলি খুঁজছি?
আমি প্যারামিটারগুলিকে ভেরিয়েবলগুলিতে কীভাবে পড়ব?
আমি কীভাবে আইআইএস পুনরায় চালু করব?

আমি একাধিক ফোল্ডার অনুলিপি করতে চাইতে পারি, আমি কীভাবে একটি পাওয়ারশেল স্ক্রিপ্ট লিখব যা একটি পাওয়ারশেল স্ক্রিপ্টের জন্য আবেদন করে?


বাহ, কোনও প্রতিক্রিয়াতে বিলম্বের জন্য দুঃখিত ... আপনার এখনও সাহায্যের দরকার?
মার্কো শ

হ্যাঁ, আমি কীভাবে আইআইএস পুনরায় চালু করতে জানি না? ফাইলগুলি অনুলিপি করা হয়েছে তা আমি কীভাবে নিশ্চিত করব?
the_drow

উত্তর:


22

Get-ChildItemআপনাকে ফাইল নামক ফিল্টারগুলির সাথে পুনরাবৃত্তভাবে ফাইল এবং ডিরেক্টরি তালিকাবদ্ধ করতে দেয় allows Copy-Itemআপনাকে একটি ফাইল অনুলিপি করতে দেয়।

ফাইলগুলি নির্বাচনের ক্ষেত্রে প্রচুর পরিমাণে ওভারল্যাপ রয়েছে, Copy-Itemআপনার যা প্রয়োজন তার বিবরণ (যেমন, আপনি কি ফোল্ডার কাঠামোটি ধরে রাখতে চান?) এর উপর নির্ভর করে তার নিজেরাই যথেষ্ট is

সব অনুলিপি করতে *.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
কোন কাজ হয় না, আমি চেষ্টা করেছি: Copy-Item -path "C:\Users\username\Pictures\" -include "*.JPG", "*.PNG" -Destination "D:\"সাথে-ছাড়া এবং ছাড়া - কিছুই হয় না
কারমেজডন

6

আমি আইআইএস অংশটি সম্বোধন করতে পারছি না, তবে ডিরেক্টরি কাঠামো সংরক্ষণ করার সময় ফাইলের অনুলিপি অন্যান্য উত্তরের তুলনায় আরও সহজ হতে পারে:

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 

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.