从 Excel 创建一系列 PowerShell 变量以在 Robocopy 中执行

Create a series of PowerShell variables from Excel to execute in Robocopy

使用 PowerShell 模块导入excel 我已经创建了变量并且作业是 运行ning 但有一些注意事项。来自源的数据被转储到目标的根目录中(这是基于我创建的变量的预期 - 这是我寻求帮助的众多领域之一)。

$dataJob01 = Import-Excel "C:\temp\test.xlsx"


ForEach ($project in $dataJob01){
    $source = $($dataJob01.Source)
    $destination = $($dataJob01.Destination)

    robocopy $source $destination /e /copy:DATU /dcopy:DAT /log:C:\temp\log.txt
}
  1. 有没有办法将“文件夹名称”附加到目标变量?制作 $destination = \server2\share\PROJECTS4401

在问题 1 中的问题解决之前,问题 2 是无关紧要的,但理想情况下我希望作业处理上面 excel 代码段下方的 100 行代码。不幸的是,我编写的代码失败了。就好像源和目标被捆绑在一起而不是在每一行上被处理。我认为 ForEach 合适,但我是菜鸟。

  1. 当我针对多行 运行 执行此操作时,我没有收到任何输出并且作业失败。

希望我不会以错误的方式解决这个问题,并且有人会为我提供一些指导。

  • 有没有办法将“文件夹名称”附加到目标变量?制作 $destination = \server2\share\PROJECTS4401

在这里您可以使用 Join-Path,它非常适合您的需要:

$destination = Join-Path $project.Destination -ChildPath $project.'Folder Name'

我注意到您在 foreach 循环中使用了 $dataJob01,这是您用来迭代的数组。尝试改用它(我更改了变量的名称,因此它可以帮助您理解。$line 就是这样)。

$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
}