使用 powershell 替换文本文件中的行或日期

使用 powershell 替换文本文件中的行或日期

我正在尝试在文本文件的第 59 行插入今天的日期。我该怎么做?

第 59 行有 30 个空格,然后像这样。PowerShell 脚本运行后会更改日期,因此它必须是不会在文件上查找日期的脚本。

                                Rep.Setproperty "Date","1/1/2013"

我只想将日期更改为运行 PowerShell 脚本的日期。文本文件不是 PowerShell 脚本。

这是必须每周运行且无需用户交互的操作。这就是为什么我们需要通过 PowerShell 脚本更改日期。我查过您提供的链接,但我被卡住了,所以我在这里发帖。还有两件事我还可以做。

  1. 替换第 59 行的日期
  2. 发送今天的日期来替换原来的日期。

这是我目前所拥有的。

$date = Get-Date
$CMSReport = Get-content C:\reports\CMSReport.acsauto
$CMSReport | ForEach-Object {
    if ($_.Readcount 59) {
        $_ -replace '\w+','Rep.SetProperty "Dates","2/4/2013"'
    } else {
        $_
    }
} |
Set-Content testCMS.acsauto

显然,“2/4/2013”​​必须用某种变量来改变,该变量将获取运行命令的日期。

答案1

为什么要使用 PowerShell 进行一次性字符串匹配/替换?如果您需要在一堆文件中重复执行此操作或在单个文件中多次替换,那么情况就不同了,但编写脚本执行此操作可能比执行一次性替换(甚至二十次)花费更长的时间。

无论如何,您需要的东西都可以在这里找到:

https://blogs.technet.com/b/heyscriptingguy/archive/2008/01/17/how-can-i-use-windows-powershell-to-replace-characters-in-a-text-file.aspx?Redirected=true

融入到你的场景中:

$infile = "C:\myinputfile.txt"
$outfile = "C:\myoutputfile.txt"
$content = Get-Content -Path $infile
$content[58] = $content[58] -replace "([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d", [datetime]::Today.ToShortDateString()
$content | Set-Content $outfile

相关内容