递归地将文件添加到文件夹中,如果文件夹不存在则创建文件夹。

3

我试图递归地将配置文件添加到以下路径中:C:\Users*\AppData\Roaming\

目前我的代码如下:

#Sets config file as source.
$Source = "$dirFiles\NewAgentAP\AgentAP.cfg"

#Recursive copying of a file to specific folder destination.
$Destination = 'C:\Users\*\AppData\Roaming\Trio\Trio Enterprise'
Get-ChildItem $Destination | ForEach-Object {Copy-Item -Path $Source -Destination $_ -Force}

如果用户还没有路径,我希望powershell脚本能够为每个用户添加路径,并随后添加.cfg文件。我已经尝试搜索此问题,但没有找到解决方法。


将你的单引号改为双引号并查看是否有所帮助。使用你现在的代码,PowerShell 假定文件夹名称是 *,而不将其作为通配符使用。 - Drew
没有改变结果。尝试使用 'C:\Users\*\' 作为路径,似乎可以正常工作。问题似乎是一些用户有一个 AppData 文件夹,而其他用户没有,因此脚本无法继续。如果我提供一个已经存在的路径,它就像魔术般地工作。谢谢。 - Rainoa
这是通过MSI包中的自定义操作完成的吗?还是通过Active Directory或其他机制运行?如果这是一个软件包,它是否安装了一个带有自己的EXE的应用程序,该应用程序会被启动,还是安装了一个插件并连接到其他东西? - Stein Åsmul
1个回答

3
我认为在这里一个好的解决方案是遍历所有用户文件夹,确保目标路径存在,然后执行复制操作。
#Sets config file as source.
$Source = "$dirFiles\NewAgentAP\AgentAP.cfg"

#Recursive copying of a file to specific folder destination.
$Destination = 'AppData\Roaming\Trio\Trio Enterprise'
Get-ChildItem C:\Users\* -Directory | ForEach-Object {New-Item -Path (Join-Path $_.FullName $Destination) -ItemType "directory" -Force | Copy-Item -Path $Source -Destination $_ -Force}

使用New-Item命令创建文件夹,加上-Force开关可让命令在文件夹不存在时创建它,并传递文件夹对象;如果文件夹已存在,则只传递文件夹对象而不执行其他操作。

这种方法很有趣!快要成功了。目前它在C:\Users\*\AppData\Roaming\Trio\创建了一个名为“Trio Enterprise”的文件,而不是创建C:\Users\*\AppData\Roaming\Trio\Trio Enterprise\AgentAP.cfg。尝试在$Destination的末尾添加一个额外的反斜杠,但没有起作用。 - Rainoa
1
我会使用New-Item -ItemType "directory"代替New-Item -Force。别名MD似乎暗示了这一点。 - user6811411
已更新以包含项目类型,感谢您的建议。 - TheMadTechnician

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接