我想读取包含字符串“scp error”的文件夹中今天文件时间戳(即今天的日期yyyymmdd)的所有.log文件。如果条件满足,则将不带扩展名的.log文件的名称移动到新的.txt文件“redrop_files. txt”
这是我目前所尝试的方法
Get-Item File*.log | ForEach-Object {
$fil = $_.Name;
foreach ($line in Get-Content $fil) {
if ($line -eq "scp error") {
$stat = "FAILED"
}
}
if ($stat -eq "FAILED") {
$errorfile = Get-ChildItem *.log | Rename-Item -NewName { $fil -replace '.log','' }
Add-Content -Path .\redrop_files.txt "`n" $errorfile
}
}
3条答案
按热度按时间webghufk1#
你有一个主要问题:你没有把
grep
的结果存储在任何地方,所以变量f
是未定义的。如果您只需要文件名,那么为什么要将
-n
与grep一起使用还不清楚;-l
似乎更有意义。因此:
f4t66c6m2#
尝试以下操作,
ttygqcqt3#
你的代码有一些小错误,还有一些可以改进的地方,比如用
switch
来读取文件。最大的问题是你实际上是在重命名文件,Rename-Item
实际上是在重命名文件。你想做的是把.BaseName
属性(没有扩展名的文件名)附加到你的redrop_files.txt
文件中。