【问题标题】:How can we Replace date in a text file using Windows Powershell scripting?我们如何使用 Windows Powershell 脚本替换文本文件中的日期?
【发布时间】:2018-06-01 14:27:46
【问题描述】:

我正在编写一个 windows powershell 脚本来打开/编辑一个文本文件。

它有很多记录,每条记录都按逗号分隔值(csv)排序:

我想要达到的步骤:

  1. 打开服务器 A 目录中的文本文件。
  2. 用“当前日期”或其他方式编辑“日期”字段。
  3. 将相同的文本文件保存在相同的位置(文件夹)。
  4. 将所有文件复制到不同服务器 B 的新文件夹中。

我刚刚写了这段代码sn-p:

$path = "C:\PSFiles\Rec_File_001.txt" 
$Filedata = Get-Content $path
$Record01 = $Filedata[0].split(",")
$Record01Date = $Record01[3]
$Record01CurrentDate = Get-Date -format yyMMdd
$Record01 -replace $Record01Date, $Record01CurrentDate
Set-Content $path

请问有什么帮助吗?

【问题讨论】:

  • 将您的问题分解成更小的部分,并针对您遇到问题的部分提出具体问题。
  • 我是脚本方面的新手。第一件事是更换日期。我将把问题编辑得更具体。谢谢
  • 回答您的第一个问题 - 是的,这是可能的。然后第二个来帮助你,你可以使用 get-content 并且你可以使用 replace
  • 数据示例中的日期并不总是在同一列中。这是一个错误还是数据的真实样子?
  • 感谢您的意见。问题是首先,我如何将记录存储在数组中。接下来,当我替换日期时,如何将新日期保存在文件中。当我使用“Set-Content”-path 时,它会删除文件中的所有数据。

标签: arrays windows shell powershell automation


【解决方案1】:

您在这里有多个问题。我将解决标题中出现的问题 - 替换文本文件中的文本。

脚本:

# current date in a new format
$CurrentDate = Get-Date -format yyMMdd

#replace old format
Get-Content -ReadCount 500 -Path C:\PSFiles\Rec_File_001.txt | % {$_ -replace "(0[1-9]|1[012])\d{1,2}(0[1-9]|[12][0-9]|3[01])", "$CurrentDate"} | Set-Content -Path C:\PSFiles_output\Rec_File_001.txt

这需要日期格式Date(mmYYdd) 的正则表达式并将其交换为新格式。一个选项-ReadCount 限制了一次通过管道的行数。

【讨论】:

  • 感谢您的代码。代码编译没有错误,但日期仍然没有在文本文件中物理替换。我想也许我没有将记录正确存储在数组中或没有写入文件?
  • @sunny238: 你能把完整的文件贴出来让我测试一下吗?
【解决方案2】:
Import-CSV $Path -header text1, text2, text3, date, text5 | 
Select text1, text2, text3, @{Name="Date"; Expression={Get-Date -format yyMMdd}}, text5 |
ConvertTo-Csv -NoTypeInformation |
Select-Object -Skip 1 |
Set-Content $Path

或者:

$data = Import-CSV $Path -header text1, text2, text3, date, text5
$data | ForEach {"Date" = Get-Date -format yyMMdd}
$data | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Set-Content $Path

【讨论】:

  • 在最初的问题中他说他不想使用Import-CSV,现在被编辑掉了。
  • 在最初的问题中,他说他不想使用Import-CSV 因为... 我认为这不是正当理由。可以使用-header ... 添加标题,然后使用| ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Set-Content $Path 抑制
  • 是的,我同意。对于提出这个问题的人来说,这将是有教育意义的,为什么这不是一个正当的理由。
【解决方案3】:

希望这会有所帮助。在 powershell 中运行以下命令:

$(Get-Item ath/filename.extensionfilename).creationtime=$(get-date "2019-10-15T15:45:12.2723844+01:00")

$(Get-Item C:\temp\log\txt.log).creationtime=$(get-date "2019-10-15T15:45:12.2723844+01:00")

这是 Microsoft 的一篇文章,解释了如何修改文件 https://devblogs.microsoft.com/scripting/use-powershell-to-modify-file-access-time-stamps/ 的时间戳

下面是那篇文章中的表格,显示了您可以修改的涉及时间的属性。

+----------------+----------+-----------------+---------------------------+
|      Name      |  Member  |      Type       |        Definition         |
+----------------+----------+-----------------+---------------------------+
| CreationTime   | Property | System.DateTime | CreationTime {get;set;}   |
| LastAccessTime | Property | System.DateTime | LastAccessTime {get;set;} |
| LastWriteTime  | Property | System.DateTime | LastWriteTime {get;set;}  |
+----------------+----------+-----------------+---------------------------+

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多