带有使用模板txt文件的许多文件的文件夹的Foreach命令

时间:2012-10-30 11:54:55

标签: powershell-v2.0

使用以下代码选择帮助从许多日期文件列表中选择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

但我不确定如何在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\"

2 个答案:

答案 0 :(得分: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的单独文件夹?

答案 1 :(得分: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\"}
 }
}