Powershell を使用してフォルダーの特定の部分、具体的には次のリストのみをコピーする必要があります。
$files = @("MyProgram.exe",
"MyProgram.exe.config",
"MyProgram.pdb",
".\XmlConfig\*.xml")
人間が読める形式:ターゲットフォルダーのルートの下にある3つの特定のファイルと、ソースパスのルートの下にあるフォルダーMyProgram.*
の下のすべてのXMLファイル(私の場合)。フォルダが存在しない場合は、宛先に作成する必要があります。XmlConfig
..\bin\Release\
XmlConfig
私が試したこと:
(1) 次のことを試しましたが、機能しませんでした。つまり、宛先パスにフォルダーまたはファイルが作成されませんでした。
Copy-Item -Recurse -Path "..\bin\Release\" -Destination ".\Test\" -Include $files
(2)-Include
を削除すると、サブフォルダーとファイルを含むフォルダー構造全体が正常に作成されます。
Copy-Item -Recurse -Path "..\bin\Release\" -Destination ".\Test\"
-Include
フィルターがどのように機能するかについての私の理解には何か問題があるに違いありません:
(3) ワイルドカードの配列が必要な仮定をテストしました-Include
が、これもうまくいきませんでした:
$files = @("*MyProgram.exe*",
"*MyProgram.exe.config*",
"*MyProgram.pdb*",
"*.\XmlConfig\*.xml*")
私の場合、適切に行う方法についてアドバイスしてくださいCopy-Item
。
更新(以下の回答に基づく):
文字列の配列を取る一般的な実装を探しています。これにより、必要なすべてのファイル/パスを 1 か所にまとめて簡単に編集できるようになり、Powershell の知識のない人でも必要に応じてそれを理解して変更できるようになります。したがって、最終的には、任意のプロジェクトに対して XCOPY 展開を実行する単一のスクリプトになり、入力ファイルが唯一の可変部分になります。上記の例では、入力は次のようになります (input.txt
メイン スクリプトに保存され、引数として渡されます)。
MyProgram.exe
MyProgram.exe.config
MyProgram.pdb
.\XmlConfig\*.xml
多くの人が正規表現を知っているわけではないので、ワイルドカードのアプローチを好みます。