あるフォルダーから別のフォルダーに特定の拡張子を持つファイルをコピーするPowerShellスクリプトを作成する


10

次のパラメーターを入力として取得するPowerShellスクリプトを記述したいと思います。
コピー元のフォルダー、拡張機能、コピー先のフォルダー、および変更によりIIS、ユーザー名、パスワードを再起動するかどうかを示すブール値。
リモートサーバーにコピーしていることを考慮して、どのコマンドレットを確認する必要がありますか?
パラメータを変数に読み込むにはどうすればよいですか?
IISを再起動するにはどうすればよいですか?

複数のフォルダーをコピーしたいと思うかもしれませんが、powershellスクリプトを呼び出すpowershellスクリプトをどのように記述すればよいですか?


返信が遅れて申し訳ありません。それでもサポートが必要ですか?
Marco Shaw、

はい、IISを再起動する方法がわかりません。ファイルが本当にコピーされていることを確認するにはどうすればよいですか?
the_drow 2010

回答:


22

Get-ChildItemファイル名フィルターで再帰的に含めて、ファイルとディレクトリーをリストできます。Copy-Itemファイルをコピーできます。

ファイルの選択に関して多くの重複がありますCopy-Item。必要なものの詳細に応じて、多くの場合それ自体で十分です(たとえば、フォルダー構造を保持しますか?)

すべてをStartFolderからDestFolderにコピーする*.foo*.barは:

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:\"ません、私は試しました:-recurseの有無にかかわらず-何も起こりません
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

一部の人々がここで述べたように- インクルードは機能しません。

ネストされたフォルダーで機能させるために、2つのステップのアプローチを使用しました: 'filter' +空のフォルダーを削除

#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.