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

标签 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

最佳答案

Match 运算符支持正则表达式。我认为这对于您描述的场景来说有点矫枉过正 - 我建议使用 Like* 至关重要,因为它告诉 PowerShell 在您指定的内容之后还有更多内容。

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

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

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

Comparison operators documentation ,很好的引用。

关于带有变量和字符串的 PowerShell Get-ChildItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161014/

相关文章:

python - 从 32 位 python 运行 64 位 powershell

multithreading - PowerShell 多线程压缩目录

linux - 首选终端脚本语言

scripting - InDesign 将图层复制到另一个文档

powershell - 如何防止 Get-ChildItem 遍历特定目录?

powershell - Powershell在静态方法中调用表达式输出

powershell - 无法读取 VSTS Online 发布变量

bash - 如何查找两个列表之间的校验和匹配(但不在两个列表内)?

Powershell Get-ChildItem -recurse不能获取所有项目

powershell - 如何跳过 Get-ChildItem 返回访问被拒绝的错误