1

使用以下代码选择帮助从许多日期文件列表中选择 1 个文件,然后复制以共享。使用 Stacker 同伴非常友好地提供的以下代码

$pastdays = -7

$pastdate = [datetime]::Now.AddDays($pastdays)

$files = Get-ChildItem "V:\Capacity Manager Size reports\"

$filename = ($files | Where-Object {$_.Name -like "Database_Server1_Userdb1_" + $pastdate.Day  + "_" + $pastdate.Month + "_" + $pastdate.Year+ "*.pdf"})

Copy-Item -Path $filename.FullName "\\Server50\report_Archive"

我需要扩展此过程以针对文件夹中的许多文件运行 - 每个文件的名称略有不同,但文件名遵循通用模板

原始文件名示例:

Database_Server1_UserDB1_30_10_2012_00_20_51
Database_Server2_UserDB2_30_10_2012_01_20_51

ETC

ETC

但我不确定如何在 foreach 中最好地做到这一点?

我正在考虑创建一个模板文件以加载到一个变量中,该变量包含在复制之前要检查的所有文件示例

所以:

$Report_Template = Get-Content "C:\Powershell\FileTemplate_Name.txt";

FileTemplate_name.txt:

Database_Server1_tempdb_

Database_Server1_UserDB1_

Database_Server1_UserDB2_

Database_Server2_UserDB2_

Database_Server2_UserDB4_


$Report_Template = Get-Content "C:\Powershell\QCM_Template_Name.txt";

$pastdays = -7

$pastdate = [datetime]::Now.AddDays($pastdays)

$files = Get-ChildItem "V:\Capacity Manager Size reports\"

foreach($template in $Report_Template)

$filename = ($files | Where-Object {$_.Name -like $template + $pastdate.Day  + "_" + $pastdate.Month + "_" + $pastdate.Year+ "*.pdf"})

Copy-Item -Path $filename.FullName "\\Server50\CapacityManagerReports_Archive\"
4

2 回答 2

0

我做了以下这似乎工作

$Report_Template = Get-Content "C:\Powershell\QCM_Template_Name.txt";
$pastdays = -3
$pastdate = [datetime]::Now.AddDays($pastdays)
$Results = Get-ChildItem "V:\Capacity Manager Size reports\"
Foreach ($Files in $Results)
{foreach($template in $Report_Template)
 {If ($files.Name -like $($template + $pastdate.Day + "_" + $pastdate.Month + "_" + $pastdate.Year +"*.pdf"))
  {Copy-Item -Path $files.FullName "\\Server50\CapacityManagerReports_Archive\"}
 }
}
于 2012-11-02T10:44:58.990 回答
0

尝试这个:

$Report_Template = Get-Content "C:\Powershell\QCM_Template_Name.txt";
$pastdays = -7
$pastdate = [datetime]::Now.AddDays($pastdays)
$files = Get-ChildItem "V:\Capacity Manager Size reports\"
foreach($template in $Report_Template)
{
    $filename = ($files | Where-Object {$_.Name -like $template + $pastdate.Day  + "_" + $pastdate.Month + "_" + $pastdate.Year+ "*.pdf"})
    Copy-Item -Path $filename.FullName "\\Server50\CapacityManagerReports_Archive\"
}

但是你真的需要模板文件吗?您不能使用文件扩展名或名称的某些部分,或者只是从该日期复制所有内容吗?也许您的初始文件夹结构错误,您最好切换到多个文件夹,例如每个 Database_Server1 的单独文件夹?

于 2012-11-02T07:42:20.280 回答