我只需要使用 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
我的情况如何正确提供建议。
更新(基于以下答案):
我正在寻找一个采用字符串数组的通用实现。它打开了将所有必要的文件/路径放在一个地方的可能性,以便于编辑,以便非 Powershell 知识的人可以根据需要理解和修改它。因此,最终它将是为任何项目执行 XCOPY 部署的单个脚本,输入文件是唯一的可变部分。对于上面的例子,输入看起来像这样(保存input.txt
并作为参数传递给主脚本):
MyProgram.exe
MyProgram.exe.config
MyProgram.pdb
.\XmlConfig\*.xml
我更喜欢通配符方法,因为没有多少人知道正则表达式。