我正在尝试在 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
或类似的东西。