带有变量和字符串的 PowerShell Get-ChildItem
PowerShell Get-ChildItem with variable and string
再次尝试使用 PowerShell 删除文件。
我现在正在尝试删除以 "Export_" 开头的文件,然后是两位数的年份,然后是 Julian 日期。例如,今天是 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
.
再次尝试使用 PowerShell 删除文件。
我现在正在尝试删除以 "Export_" 开头的文件,然后是两位数的年份,然后是 Julian 日期。例如,今天是 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
.