آموزش دستور PowerShell Copy-Item
در این مقاله میخوانید
- آموزش دستور پاورشل کپی آیتم
- آموزش دستور PowerShell Copy Item recurse subfolders
- آموزش دستور PowerShell Copy Item create folder
- آموزش دستور PowerShell copy item without folder
- آموزش دستور PowerShell copy specific file type
- آموزش دستور PowerShell copy-item exclude files
- آموزش دستور PowerShell copy item exclude folder
- آموزش دستور PowerShell copy item exclude (Files and Folders)
- آموزش دستور PowerShell copy-item exclude file types
- آموزش دستور PowerShell copy-item exclude empty folders
- آموزش دستور PowerShell copy-item exclude hidden files
- آموزش دستور PowerShell copy item exclude existing files
- آموزش دستور PowerShell copy item overwrite
- آموزش دستور PowerShell copy-item overwrite directory
- آموزش دستور PowerShell copy-item progress
- آموزش دستور PowerShell copy item from network share
- آموزش دستور PowerShell copy item Merge multiple folders
- آموزش دستور PowerShell copy item and rename the file
- جمع بندی
پاورشل از موتورهای هوشمند و خودکار کاربران ویندوزی است که به مدیریت بهتر شبکههای کامپیوتری کمک قابل توجهی میکند. در واقع شرکت مایکروسافت، پاورشل را به منظور یک ابزار قدرتمند برای حل مشکلات و خودکار کردن فرآیندهای سیستم عامل ویندوز معرفی کرده است. این ابزار شرکت ویندوز، دستورات و کاربردهایی دارد که هر یک از کاربران پیش از شروع باید از آن مطلع باشند. در این مطلب از آموزش پاورشل قصد داریم تا دستورات PowerShell Copy Item را با ذکر مثال مورد بررسی قرار دهیم. پس در ادامه همراه با ما باشید.
خرید سرور ویندوز برای مدیریت با پاورشل از پارس پک
از این مقاله میتوانید برای مدیریت سرویسهای ویندوز خود استفاده کنید و اگر قصد خرید انواع سرویس ویندوز پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، میتوانید جهت کسب اطلاعات بیشتر به لینکهای زیر مراجعه کنید.
آموزش دستور پاورشل کپی آیتم
بهطور کلی میتوان با استفاده از دستور Copy-Item برای کپی کردن یک مورد از یک مکان به مکان دیگر استفاده کرد. این دستور فقط مورد را کپی میکند و پس از آن برش یا حذف نمیشود. همچنین Copy-Item میتواند آیتم را کپی و تغییر نام دهد و فقط باید نام جدید را در پارامتر Destination در دستور PowerShell copy-item وارد نمود.
مطابق با MSDN نحوه دستور copy-item به شکل زیر است:
Copy-Item [-Path] <String[]> [[-Destination] <String>] [-Container] [-Force] [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Recurse] [-PassThru] [-Credential <PSCredential>] [-WhatIf] [-Confirm] [-FromSession <PSSession>] [-ToSession <PSSession>] [<CommonParameters>]
در این مطلب به منظور نوشتن، اجرا و رفع اشکال اسکریپت پاورشل، از Windows PowerShell ISE استفاده شده است. برای مشاهده چند نمونه از موارد کپی PowerShell در ادامه باز هم همراه با ما باشید.
مثال 1)
در این مثال، نحوه کپی کردن یک فایل از یک مکان به مکان دیگر با استفاده از دستور Copy-Item انجام شده و مشاهده میشود که فایل در محل مقصد کپی شده است.
Copy-Item "D:\Source\Test.docx" -Destination "D:\Bijay\Destination"
آموزش کپی آیتم در پاورشل
مثال 2)
در این مثال، نحوه کپی کردن همه فایلها از یک مکان به مکان دیگر بررسی میشوند و در واقع چند نوع فایل مختلف در پوشه Source، با استفاده از cmdlet در PowerShell Copy-Item، از پوشه منبع در پوشه مقصد کپی میگردند.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination"
نحوه کپی کردن تمام فایل ها
آموزش دستور PowerShell Copy Item recurse subfolders
برای کپی کردن زیر پوشههای بازیابی آیتم در PowerShell میتوان از دستور زیر استفاده کرد. در این حالت در پوشه Source، یک پوشه فرعی وجود دارد که دارای چند پرونده است و وقتی دستور زیر را اجرا میشود، فقط پوشه را ایجاد میکند و پروندههایی را که در پوشه فرعی ارائه شدهاند کپی نمیکند.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination"
در حقیقت، اگر پوشه فرعی دارای زیر پوشه تو در تو باشد، هنگام اجرای cmdlet در Copy-Item PowerShell، زیر پوشه تو در تو ایجاد نمیشود.
برای کپی کردن آیتمها به صورت بازگشتی، باید از پارامتر -Recurse با cmdlet Copy-Item PowerShell استفاده کرد.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse
پس از اجرای دستور بالا، می توان مشاهده کرد که پوشه فرعی شامل پوشه های فرعی تو در تو و پرونده ها را در پوشه مقصد ایجاد می کند.
آموزش دستور PowerShell Copy Item create folder
با استفاده از دستور زیر میتوان آیتمها را از پوشه منبع کپی و در یک پوشه جدید (NewFolder جدید) در مقصد ذخیره کرد. در اینجا میبایست در پارامتر Destination ، باید نام پوشهای مانند زیر را ارائه کرد.
Copy-Item "D:\Source" -Destination "D:\Bijay\Destination\NewFolder" –Recurse
کپی در فولدر جدید
آموزش دستور PowerShell copy item without folder
به منظور کپی آیتمها و فایلها، بدون پوشه میتوان از اسکریپت زیر استفاده نمود. باید اشاره کرد که دستور زیر موارد یا پروندهها را فقط از پوشه اصلی کپی مینماید و فایلها را از پوشههای فرعی کپی نمیکند.
Get-ChildItem D:\Source\ -File | Copy-Item -Destination D:\Bijay\Destination
در صورتی که قصد کپی کردن فایلها به صورت بازگشتی از زیرفولدرها باشد، باید از پارامتر -Recurse مانند زیر استفاده کرد.
Get-ChildItem D:\Source\ -File -Recurse | Copy-Item -Destination D:\Bijay\Destination
آموزش دستور PowerShell copy specific file type
برای کپی کردن فایلهای خاص (به عنوان مثال فایلهایی با فرمت PDF) میتوان از نمونه اسکریپت زیر استفاده کرد.
Copy-Item -Path D:\Source\* -Destination D:\Bijay\Destination -Filter '*.pdf'
نحوه کپی فایل ها با پسوندی مشخص
آموزش دستور PowerShell copy-item exclude files
هنگامی که از دستور PowerShell copy-item cmdlets برای کپی کردن آیتمها استفاده میشود، به وسیله اسکریپت زیر میتوان برخی از فایلها و بخشها را حذف کرد و مانع از انتقال شد.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude TestPDF.pdf,Test.docx
با استفاده از اسکریپت PowerShell فوق فایل TestPDF.pdf و Test.docx از فهرست حذف و Copy-Item نیز پروندهها را از زیر پوشهها و زیر پوشهای تو در تو حذف میکند. علاوه بر این اسکریپت مربوطه را میتوان مانند موارد زیر وارد کرد.
مثال1)
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude @("TestPDF.pdf","Test.docx")
مثال 2)
$exclusionFiles = @("TestPDF.pdf","Test.docx") Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude $exclusionFiles
آموزش دستور PowerShell copy item exclude folder
با استفاده از اسکریپت زیر میتوان در هنگام کپی کردن آیتمها و فولدرها، برخی از فولدرها را در صورت خواست خارج و حذف کرد.
Copy-Item -Path (Get-Item -Path "D:\Source\*" -Exclude ('Subfolder')).FullName -Destination "D:\Bijay\Destination\" -Recurse –Force
به این ترتیب هنگام کپی کردن، پوشه فرعی از Source حذف میشود. اما اگر بخواهیم چندین پوشه را حذف کنیم، (مثلاً میخواهیم نام پوشهها را به عنوان Folder1 ،Folder2 حذف کنیم) ،باید از اسکریپت زیر استفاده شود.
Copy-Item -Path (Get-Item -Path "D:\Source\*" -Exclude ('Folder1', 'Folder2')).FullName -Destination "D:\Bijay\Destination\" -Recurse –Force
آموزش حذف چند فولدر در حین کپی
آموزش دستور PowerShell copy item exclude (Files and Folders)
در این دستور نیز میتوان در هنگام کپی کردن، فایلها و فولدرها را به همراه هم در میان آنها خارج و حذف کرد.
Copy-Item -Path (Get-Item -Path "D:\Source\*" -Exclude ('Folder1', 'Test.docx')).FullName -Destination "D:\Bijay\Destination\" -Recurse –Force
آموزش دستور PowerShell copy-item exclude file types
برای حذف کردن یا به قولی مستثنی کردن انواعی از فایلها در کپی کردن میتوان از اسکریپت زیر استفاده نمود. در مثال زیر اسکریپت به شکلی نوشته شده است که امکان کپی کردن فایلهای PDF وجود نداشته باشد.
$exclusionFiles = @("*.pdf") Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude $exclusionFiles
در اینجا فایل های pdf از پوشههای فرعی و زیر پوشههای تو در تو در هنگام کپی کردن پروندهها حذف میشوند.
همچنین اگر بخواهیم بیشتر از یک نوع فایل را مستثنی یا حذف نماییم، میتوان از اسکریپت زیر استفاده نمود. در اینجا برای مثال فایلهایی با پسوند pdf و txt حذف شدهاند.
$exclusionFiles = @("*.pdf","*.txt") Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination\" -Recurse -Exclude $exclusionFiles
آموزش دستور PowerShell copy-item exclude empty folders
در این اسکریپت در هنگام کپی کردن پوشه خالی به مقصد انتقال نمییابد. به این ترتیب این اسکریپت همه پوشهها و فولدرها ارزیابی میکند و مانع از انتقال نمونههای خالی میشود.
$Source = "D:\Source\" $items = Get-ChildItem $Source -Force $Destination="D:\Bijay\Destination\" ForEach ($item in $items) { if((Get-ChildItem -Path $($item.FullName)).Count -gt 0) { Copy-Item -Path $item.FullName -Destination $Destination -Force -Recurse } }
عدم کپی فولدر های خالی
آموزش دستور PowerShell copy-item exclude hidden files
در بسیاری از مواقع که نمیخواهیم فایلهای مخفی شده و یا به اصطلاح hidden شده کپی گردد، میتوان از اسکریپت زیر استفاده کرد. به این ترتیب فولدرهای مخفی کپی نمیشوند.
ForEach ($FileItem in (gci -Path 'D:\Source' -Recurse)) { Copy-Item $FileItem.FullName -Destination 'D:\Bijay\Destination' }
آموزش دستور PowerShell copy item exclude existing files
این دستور فرآیند کپی کردن را بررسی میکند و در صورتی که فایل یا پوشهای در مقصد وجود داشته باشند، آن فایل یا پوشه را کپی نمیکند و تنها در صورتی که در مقصد این مورد نباشد، انجام میگردد. برای انجام این دستور میتوان از اسکریپت زیر استفاده نمود.
$sourceFile = 'D:\Source\Test.docx' $destinationFile = 'D:\Bijay\Destination\Test.docx' if (-not (test-path $destinationFile)) { Copy-Item $sourceFile -Destination $destinationFile }
اسکریپت PowerShell زیر هر فایل موجود در پوشه را بررسی مینماید و اگر پرونده در پوشه مقصد وجود داشته باشد، آن را کپی نمیکند. در غیر این صورت پرونده در پوشه مقصد کپی میگردد. همچنین پروندهها از نظر پوشه ها و زیر پوشه ها نیز بررسی میشوند.
$Source = "D:\Source\" $items = Get-ChildItem $Source -Force $Destination="D:\Bijay\Destination\" ForEach ($item in $items) { $destinationFile = $Destination+$item.FullName if (-not (test-path $destinationFile)) { Copy-Item -Path $item.FullName -Destination $Destination -Force -Recurse } }
آموزش دستور PowerShell copy item overwrite
به طور پیش فرض، وقتی با استفاده از دستور زیر آیتمی کپی شود، آن مورد در مقصد انتقال مییابد.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse
این اسکریپت برای فایلها کاملا درست به کار میرود، اما برای فولدرها خطا ایجاد میکند.
میتوان با افزودن پارامتر Confirm: $ true مانند زیر یک پیام تأیید اضافه کرد و به این ترتیب وقتی اسکریپت PowerShell زیر اجرا میگردد، سیستم درخواست تایید میکند.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse -Confirm:$true -Force
آموزش دستور PowerShell copy-item overwrite directory
برای برطرف کردن خطای فوق در دستور PowerShell copy-item overwrite directory میتوان از اسکریپت زیر استفاده کرد.
Copy-Item "D:\Source\*" -Destination "D:\Bijay\Destination" -Recurse -Force
آموزش دستور PowerShell copy-item progress
در صورتی که از دستور PowerShell copy-item استفاده شود و قصد ایجاد یک نوار پیشرفت یا progress bar را داشته باشیم، از اسکریپت زیر استفاده میگردد.
Function Copy-WithProgress { [CmdletBinding()] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $Source, [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $Destination ) $Source=$Source.tolower() $Filelist=Get-Childitem "$Source" –Recurse $Total=$Filelist.count $Position=0 foreach ($File in $Filelist) { $Filename=$File.Fullname.tolower().replace($Source,'') $DestinationFile=($Destination+$Filename) Write-Progress -Activity "Copying data from '$source' to '$Destination'" -Status "Copying File $Filename" -PercentComplete (($Position/$total)*100) Copy-Item $File.FullName -Destination $DestinationFile $Position++ } } $src="D:\Data\Songs" $dest="D:\Bijay\Destination" Copy-WithProgress -Source $src -Destination $dest
به این ترتیب progress bar یا نوار پیشرفت به شکل زیر به وجود میآید.
آموزش دستور PowerShell copy item from network share
با استفاده از اسکریپت زیر ، اجازه کپی آیتم از شبکه داده میشود.
$Session = New-PSSession -ComputerName "Server01" -Credential "Domain\username" Copy-Item "D:\SourceFolder\" -Destination "C:\DestinationFolder\" -ToSession $Session
همچین اگر بخواهیم به صورت بازگشتی کپی کنیم باید پارامتر -Recurse اضافه گردد.
$Session = New-PSSession -ComputerName "Server01" -Credential "Domain\username" Copy-Item "D:\SourceFolder\" -Destination "C:\DestinationFolder\" -ToSession $Session -Recurse
آموزش دستور PowerShell copy item Merge multiple folders
حال با کاربرد اسکریپت زیر میتوان چندین پوشه را هنگام استفاده از cmdletهای PowerShell Copy-Item ادغام کرد.
Copy-Item -Path D:\Source\*,D:\Source1\*,D:\Source2\* -Destination D:\Bijay\Destination\
اسکریپت PowerShell فوق همه پروندهها را از پوشه های Source ، Source1 و Source2 در پوشه Destination کپی می کند.
آموزش دستور PowerShell copy item and rename the file
هنگام کپی کردن فایل با استفاده از Copy-Item، میتوان نام آن را نیز تغییر داد و این کار با اسکریپت PowerShell زیر را انجام میشود.
Copy-Item -Path D:\Source\Test.docx -Destination D:\Bijay\Destination\NewTest.docx
در اینجا فایل Test.docx در پوشه Destination با نام جدید کپی میشود و نام فایل NewTest.docx خواهد بود.
جمع بندی
در این مقاله آموزش ویندوز از سری مقالات آموزش سیستم عامل نحوه کار با کپی آیتم در پاورشل را آموزش دادیم، امیدواریم با استفاده از این دستورات بتوانید از این ابزار بیشترین استفاده را داشته باشید.