Robocopy 和在 Powershell 中使用变量

Robocopy 和在 Powershell 中使用变量

我正在尝试在 powershell 中设置一个 robocopy 作业,使用数组和变量将文件复制到目标目录。我希望它使用基于当前日期的特定值。

这是我创建的用于获取当前日期的 powershell 变量:

$FYDate=Get-Date -Format "MM-MMM" (注:我只想要当前月份)

输出:

04-Apr

这是我在 powershell 中创建的数组:

$FYDates = "FY20\01-Oct", "FY20\02-Nov", "FY20\03-Dec", "FY20\04-Jan", "FY20\05-Feb", "FY20\06-Mar", "FY20\07-Apr", "FY20\08-May", "FY20\09-Jun", "FY20\10-Jul", "FY20\11-Aug", "FY20\12-Sep"

输出如下:

FY20\01-Oct
FY20\02-Nov
FY20\03-Dec
FY20\04-Jan
FY20\05-Feb
FY20\06-Mar
FY20\07-Apr
FY20\08-May
FY20\09-Jun
FY20\10-Jul
FY20\11-Aug
FY20\12-Sep

我想要实现的是让 robocopy 使用该$FYDate变量,并基于该值使用$FYDates数组中的一个值。

这是我目前拥有的 robocopy 脚本行:

ROBOCOPY D:\home\test_sftp\inbox C:\temp\test\UoT_Working\sams\FY20\"$FYDate" *sams* /E`

这确实创建了名为 04-Apr 的目录,所以我知道$FYDate变量有效。我如何将两者配对?

例如:如果值为 04-Apr,我希望 robocopy 使用 FY20\07-Apr 作为目标目录。我只是不知道如何编写脚本 robocopy 以使用这两个变量将文件复制到该位置。

答案1

我原来的解决方案几乎完全忽略了重点——财政年度抵消的月份数字。这个似乎做了提问者的意图。

这将使用内置 cmdlet 构建路径Join-Path。它可以轻松地为您处理路径分隔符。

代码的作用是什么……

  • 定义财务年度月份偏移
  • 定义目标路径的根
  • 迭代当前年份的 12 个月
  • 创建一个临时日期以供使用
  • 得出偏移月份数
  • 纠正“没有第 13 个月这种事”
  • 显示临时日期
  • 构建并显示目标路径

这似乎可以完成你需要做的事情。[咧嘴笑]

代码 ...

$FYMonthOffset = 3
$RootDestPath = 'C:\temp\test\UoT_Working\sams'

foreach ($Index in 1..12)
    {
    # create some dates to work with
    $TempDate = Get-Date -Month $Index

    $FY_MNumber = $TempDate.Month + $FYMonthOffset
    # does the year need to change when the month wraps around?
    if ($FY_MNumber -gt 12)
        {
        $FY_MNumber -= 12
        }

    'Test date = {0, 24}' -f $TempDate.ToString('MM-MMM')
    Join-Path -Path $RootDestPath -ChildPath ('{0:00}-{1}' -f $FY_MNumber, $TempDate.ToString('MMM'))
    ''
    }

输出 ...

Test date =                   01-Jan
C:\temp\test\UoT_Working\sams\04-Jan

Test date =                   02-Feb
C:\temp\test\UoT_Working\sams\05-Feb

Test date =                   03-Mar
C:\temp\test\UoT_Working\sams\06-Mar

Test date =                   04-Apr
C:\temp\test\UoT_Working\sams\07-Apr

Test date =                   05-May
C:\temp\test\UoT_Working\sams\08-May

Test date =                   06-Jun
C:\temp\test\UoT_Working\sams\09-Jun

Test date =                   07-Jul
C:\temp\test\UoT_Working\sams\10-Jul

Test date =                   08-Aug
C:\temp\test\UoT_Working\sams\11-Aug

Test date =                   09-Sep
C:\temp\test\UoT_Working\sams\12-Sep

Test date =                   10-Oct
C:\temp\test\UoT_Working\sams\01-Oct

Test date =                   11-Nov
C:\temp\test\UoT_Working\sams\02-Nov

Test date =                   12-Dec
C:\temp\test\UoT_Working\sams\03-Dec

答案2

很确定你只是想要一个哈希表:

$h = @{}
$h["04-Apr"] = "FY20\07-Apr"
$h["05-May"] = "FY20\08-May"

然后在你的 robocopy 中使用

$h.$FYDate

或类似的东西。

相关内容