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


10

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

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


哇,很抱歉延迟回复...您仍然需要帮助吗?
萧伯纳

是的,我真的不知道如何重新启动IIS?如何确定文件确实被复制?
the_drow 2010年

Answers:


22

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

在选择文件方面有很多重叠之处,根据Copy-Item您所需要的详细信息(例如,是否要保留文件夹结构?),通常单独使用就足够了

要复制所有*.foo*.bar从StartFolder到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:\"有和没有-递归-什么都没发生
Carmageddon

6

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

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

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


我无法使用它-Include...尽管我可以不用它复制所有内容-Include
Ben Polinsky

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 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.