2012-10-30 33 views
1

使用以下代碼選擇幫助從多個日期文件列表中選擇1個文件,然後複製到共享。使用非常親切的同胞堆垛機提供使用模板文本文件包含許多文件的Foreach命令

$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\" 
+0

沒有一個得到這個任何想法以下? – MoOriginal

回答

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\"} 
} 
} 
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單獨的文件夾?

+0

再次感謝您的回覆 - 不幸的是文件夾和文件的格式是可以改變的。我們實際上可以使用該日期的所有內容 - 這是真的。然而,你給出的這個代碼給出了一個錯誤。 – MoOriginal

+0

Copy-Item:無法將參數綁定到參數'Path',因爲它爲空。 在行:8字符:20 +拷貝項目-Path <<<< $ filename.FullName 「\\ server50 \ CapacityManagerReports_Archive \」 + CategoryInfo:InvalidData:(:) [複印-項目],ParameterBindingValidationException + FullyQualifiedErrorId :ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CopyItemCommand – MoOriginal

+0

這意味着沒有找到相應的文件。請檢查'$ template + $ pastdate.Day +「_」+ $ pastdate.Month +「_」+ $ pastdate.Year'會顯示正確的格式 –

相關問題