带有变量和字符串的PowerShell Get-ChildItem

时间:2018-11-05 19:34:19

标签: powershell scripting get-childitem

再次尝试使用PowerShell删除文件。

我现在正在尝试删除以“ Export_”开头的文件,然后删除两位数字的年份以及儒略日期。例如,今天将是Export_18309。 18309之后还有其他数字,但它们不相关。使用我当前的代码“ Export_”是一个字符串,并且我的日期已转换为Int,以便我可以进行数学运算并递增它。

我将$dval设置为18302作为我正在使用的文件的测试用例。我知道它目前没有删除任何内容,因为我将输出到文本文件以进行手动验证,然后再继续。但是,如果文本文件的输出不正确,则尝试删除是没有意义的。

我的问题目前在function WriteArch代码块内。我正在尝试将字符串和int组合在一起以使PowerShell显示仅以“ Export_”和$dval开头的结果作为Export_ $ dval。我以更好地描绘我正在尝试的方式来编写了特定的代码行。

编辑:WriteArch中的for循环是将18302递增到18303,然后是18304,以此类推,因为我要删除脚本运行前一周的文件。

$path0 = 'U:\PShell\Testing\IBM3 Cleanup\logfiles'
$archLog = 'U:\PShell\Testing\IBM3 Cleanup\LogArchive.txt'

$day = (Get-Date).DayOfWeek
$date = (Get-Date).ToString("yy") + ((Get- 
Date).DayOfYear).ToString("D3") 
$dval = $date -as [Int]

$dval = Switch ($day) {
"Monday" { ($dval - 7); break }
"Tuesday" { ($dval - 8); break }
"Wednesday" { ($dval - 9); break }
"Thursday" { ($dval - 10); break }
"Friday" { ($dval - 11) }
}

Clear-Content $archLog

$dval = 18302

function WriteArch {
    param( $dval, $path0)
        for ($i = 0; $i -le 4; $i++) {
            Get-ChildItem -Path $path0|
            Where { $_.FullName -Match "Export_" + "$dval"}|
            Add-Content $archLog
            $dval++ 
        }
}

WriteArch $dval $path0

Invoke-Item $archLog

1 个答案:

答案 0 :(得分:2)

Match运算符支持正则表达式。对于您所描述的场景,我认为这有点过头了-我建议使用Like*是必不可少的,因为它告诉PowerShell在您指定的名称之后还有更多名称。

Fullname包含完整路径,包括父目录等-听起来您想将匹配项基于BaseName,文件名不包括扩展名。

Where { $_.BaseName -like "Export_$dval*"}

$dval变量置于引号中会强制PowerShell将int隐式转换为string

Comparison operators documentation,一个很好的参考。