从Excel创建一系列PowerShell变量以在Robocopy中执行
使用PowerShell模块importexcel,我已经创建了变量,作业正在运行,但有一些警告。来自源的数据被转储到目标的根目录中(这是基于我创建的变量而期望的,这是我请求帮助的许多领域之一)从Excel创建一系列PowerShell变量以在Robocopy中执行,excel,powershell,variables,robocopy,Excel,Powershell,Variables,Robocopy,使用PowerShell模块importexcel,我已经创建了变量,作业正在运行,但有一些警告。来自源的数据被转储到目标的根目录中(这是基于我创建的变量而期望的,这是我请求帮助的许多领域之一) 是否有方法将“文件夹名称”附加到目标变量?制作$destination=\\server2\share\PROJECTS\304401 在问题1中的问题解决之前,问题2是不相关的,但理想情况下,我希望作业处理上面excel代码段下方的100行。不幸的是,我所写的代码失败了。这就好像源和目标被捆绑在一起,
$destination=\\server2\share\PROJECTS\304401
- 是否有方法将“文件夹名称”附加到目标变量?制作
$destination=\server2\share\PROJECTS\304401
连接路径
,它非常适合您的需要:
$destination = Join-Path $project.Destination -ChildPath $project.'Folder Name'
我注意到您在foreach
循环中使用了$dataJob01
,这是用于迭代的数组。试着改用这个(我更改了变量的名称,这样可以帮助您理解。$line
正是这样)
ForEach
创建了一个$project
变量,但从未使用过。这是为什么?我只是偶然发现了这一点,但写出来的略有不同。$destination=-join($($project.destination),$($project.foldername'))
,但robocopy似乎忽略了文件,只覆盖了目录。谢谢你,因为这非常有帮助,而且你的方法看起来更干净。现在来和机器人对抗。感谢you@mrn3ff没问题,我很高兴它能为您工作:)@mrn3ff之所以$destination=-join($($project.destination),$($project.Folder Name'))
无法工作,是因为您创建的是数组而不是字符串。如果在本例中使用-join
运算符,则可以执行$destination=$project.destination,$project.Folder Name'-join'
,考虑到$project.destination
以反斜杠结尾,但建议100%使用连接路径,因为它可以避免可能的错误:)
$destination = Join-Path $project.Destination -ChildPath $project.'Folder Name'
$xlsx = Import-Excel "C:\temp\test.xlsx"
ForEach ($line in $xlsx)
{
$source = $line.Source
$destination = Join-Path $line.Destination -ChildPath $line.'Folder Name'
robocopy $source $destination /e /copy:DATU /dcopy:DAT /log:C:\temp\log.txt
}