1

次のコードを使用してヘルプを選択すると、多くの日付の付いたファイルのリストから1つのファイルを選択し、コピーして共有します。仲間のスタッカーから非常に親切に提供された次のコードを使用する

$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\"
4

2 に答える 2

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 に答える
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 に答える