编写PowerShell脚本以将具有特定扩展名的文件从一个文件夹复制到另一个文件夹

the*_*row 16 powershell

我想编写一个获得以下参数作为输入的 powershell 脚本:
要复制的文件夹、扩展允许、要复制到的文件夹和一个布尔值,指示更改是否应重新启动 IIS、用户名和密码。
考虑到我要复制到远程服务器,我应该查看哪些 cmdlet?
如何将参数读入变量?
如何重新启动 IIS?

考虑到我可能想要复制多个文件夹,我该如何编写一个调用 powershell 脚本的 powershell 脚本?

Ric*_*ard 30

Get-ChildItem允许您列出文件和目录,包括递归地使用文件名过滤器。Copy-Item允许您复制文件。

在选择文件方面有很多重叠,通常Copy-Item根据您需要的细节(例如,您想保留文件夹结构吗?)

将所有*.foo*.bar从 StartFolder复制到 DestFolder:

Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Run Code Online (Sandbox Code Playgroud)

如果您需要保留文件夹结构,事情会变得更加困难,因为您需要构建目标文件夹名称,例如:

$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
    }
Run Code Online (Sandbox Code Playgroud)

robocopy可能更容易:

robocopy StartFolder DestFolder *.foo *.bar /s
Run Code Online (Sandbox Code Playgroud)

最后,选择的方式将取决于需要什么的细节。

(在上面我已经避免了别名(例如,Copy-Item而不是copy)并明确使用参数名称,即使它们是位置。)

  • 不起作用,我试过:`Copy-Item -path "C:\Users\username\Pictures\" -include "*.JPG", "*.PNG" -Destination "D:\"` 带和不带 -recurse -没发生什么事 (2认同)

Mar*_*uer 6

我无法解决 IIS 部分,但保留目录结构的文件副本可能比其他答案中显示的要简单得多:

Copy-Item -path "StartFolder" -Recurse -Include "*.foo","*.bar" -Destination "DestFolder" -Container
Run Code Online (Sandbox Code Playgroud)

-Container参数是魔部分将复制结构在目的地,因为它是在源。


归档时间:

查看次数:

89675 次

最近记录:

5 年,2 月 前