前回の続きです。
今回は、コメントをいただいた箇所を対応してみましょう。
最後の二つ、比較がフェアではないですな…。
つまり
ヴァニシング・あえとす (@aetos382) August 13, 2014
ご指摘の通りです。 基本的には、文字列での差し替えはあまり好みでなかったのでてけとーに比較対象としました
Copy-StrictedFilterFileWithDirectoryStructure.ps1
は、パスをコピーしてから、いらないものを削除のためディレクトリを何度も舐めています。 単純にフィルタの有無の問題ではないよね。ということで、対応しましょう。
対応
単純に、2つ目のCopy-StrictedFilterFileWithDirectoryStructure.ps1と同様のフィルタを1つ目のCopy-StrictItemWithDirectoryStructure.ps1に組むだけです。簡単です。
適当に実装してみましょう。
利用方法
PowerShellで一番使うのはHelpです。
PS> help Copy-ItemEX -Full NAME Copy-ItemEX SYNTAX Copy-ItemEX [-Path] <string> [-Destination] <string> [[-Targets] <string[]>] [[-Excludes] <string[]>] [[-Recurse]] [[-Force]] [[-WhatIf]] [<CommonParameters>] PARAMETERS -Destination <string> Required? true Position? 1 Accept pipeline input? true (ByPropertyName) Parameter set name (All) Aliases None Dynamic? false -Excludes <string[]> Required? false Position? 3 Accept pipeline input? true (ByPropertyName) Parameter set name (All) Aliases None Dynamic? false -Force Required? false Position? 5 Accept pipeline input? false Parameter set name (All) Aliases None Dynamic? false -Path <string> Required? true Position? 0 Accept pipeline input? true (ByValue, ByPropertyName) Parameter set name (All) Aliases PSParentPath Dynamic? false -Recurse Required? false Position? 4 Accept pipeline input? true (ByPropertyName) Parameter set name (All) Aliases None Dynamic? false -Targets <string[]> Required? false Position? 2 Accept pipeline input? true (ByPropertyName) Parameter set name (All) Aliases None Dynamic? false -WhatIf Required? false Position? 6 Accept pipeline input? false Parameter set name (All) Aliases None Dynamic? false <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). INPUTS System.String System.String[] System.Management.Automation.SwitchParameter OUTPUTS System.Object ALIASES None REMARKS None
基本的な利用方法
前回の2番目に紹介したCopy-StrictedFilterFileWithDirectoryStructure.ps1と同じように利用できます。
例えば、 c:\valentia\valentia\Tools
から.ps1
がつくファイル(と、そのディレクトリ構造)だけc:\hoge
にコピーするならそのままこうです。
Targetsはファイル名で指定できるので、ワイルドカード*
も使えますよ?
Copy-ItemEX -Path c:\valentia\valentia\Tools -Destination C:\hoge -Targets *.ps1
デフォルトでは、コピーするか確認されます。
Yesを選択すると、そのファイルだけコピーされて、他のファイルでもまた聞かれます。
Yes to Allを選択すると、以降のファイルも含めてすべて確認ダイアログが出ずにコピーされます。
NoやNo to AllはYesの逆です。
もし該当フォルダに対象のファイルがなければエラーになります。
確認ダイアログを省略する
確認ダイアログを出さずに一気にコピーしたい場合は、 -Force
スイッチを付けてください。
Copy-ItemEX -Path c:\valentia\valentia\Tools -Destination C:\hoge -Targets *.ps1 -Force
対象フォルダのディレクトリツリーを舐めてコピーする
また、 c:\valentia
のフォルダから奥の階層もそのまま取得するなら-Recurse
スイッチを付けてください。
Copy-ItemEX -Path c:\valentia -Destination C:\hoge -Targets *.ps1 -Recurse
コピーを実行せずどうなるかだけ確認する
もし、コピーせずにどうなるかを試すなら-WhatIf
を使います。もちろん-Recurse
とも併用できます。
Copy-ItemEX -Path c:\valentia -Destination C:\hoge -Targets *.ps1 -Recurse -WhatIf
特定のファイルを除く
例えば、*.ps1
をコピーするが、install.ps1
は除外なら-Excludes
に指定しています。
Copy-ItemEX -Path c:\valentia -Destination C:\hoge -Targets *.ps1 -Excludes install.ps1 -Recurse
はい、簡単。ファイル名で指定できるので、ワイルドカード`*
も使えます。
パイプライン入力への対応
対応しています。
内容
説明するまでもない簡単なコードです。
process{} 節で必要な処理がされています。
- 必要なファイルのフィルタ
- いらないファイルの除去
- コピーに実施
以上です。基本的には、[I/O.FileInfo]と[I/O.DicretoryInfo]のみに対応しているので他のプロバイダはシリマセン。
まとめ
Tuple可愛いよTuple。