将当前时间分配给powershell变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将当前时间分配给powershell变量相关的知识,希望对你有一定的参考价值。

我拼凑了每次计算机重新启动时触发(通过任务计划程序)的PowerShell脚本。

该脚本将执行以下操作:

  1. 查找位于特定目录中的csv文件
  2. 通过在末尾附加时间/日期戳来重命名文件
  3. 将该文件移动到存档文件夹中

在白天,软件应用程序会自动创建一个新的csv文件。因此,下次计算机重新启动时,它会重复上述步骤。

  1. 最后一步 - 该脚本还会查看存档文件夹并删除大于7天的所有文件。

有时(并非所有时间)计算机重新启动并且脚本运行时,它完成步骤1和2但不完成步骤3.所以这意味着csv文件被重命名但脚本没有将其移动到存档文件夹中。

为什么?我在PowerShell ISE中打开脚本并手动运行脚本,我看到原因:存档文件夹中已存在具有该名称的文件。

如果始终使用日期/时间戳(直到第二个)动态重命名文件名,怎么会发生这种情况。

结果是分配了Get-Date值的变量未更新。它仍然包含旧时代。

如果我在PowerShell脚本中做的第一件事是:$ rightNow = Get-Date,为什么会发生这种情况

我知道将当前日期和时间分配给变量并不是最佳做法,显然变量不会随着每一秒的变化而自动更新。没关系。我不需要它。我期望它做的是获取当前日期和时间(在这行代码运行时)并将其分配给我的变量$ rightNow。

由于某种原因,变量没有得到更新。为什么会这样?对我来说,快速获取当前日期和时间(直到第二个)并将其用作文件名的一部分的最佳方法是什么?

这是我目前的脚本:

$source = "C:Logs"
$destination = "C:Logsarchive"
$old = 7
$rightNow = Get-Date

# delete all files in the archive folder that are > 7 days old
Get-ChildItem $destination -Recurse |
Where-Object {-not $_.PSIsContainer -and 
$rightNow.Subtract($_.CreationTime).Days -gt $old } |
Remove-Item

# rename all csv files in the Log folder by appending currentDate_currentTime
Get-ChildItem -Path $source* -Include *.csv  | % {
    $name = $_.Name.Split(".")[0] + "_" + ($_.CreationTime | Get-Date -Format yyyyMMdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    Rename-Item $_ -NewName $name
    Move-Item "$($_.Directory)$name" -Destination $destination
}
答案

您不使用重命名中的当前日期,而是使用文件的CreationTime属性。如果你想要当前的日期时间尝试

$name = $_.BaseName + [datetime]::now.ToString('_yyyyMMdd_hhmmss') + $_.Extension

或者更好的是,只需将重命名作为移动过程的一部分。

$source = "C:Logs"
$destination = "C:Logsarchive"
$old = 7

# delete all files in the archive folder that are > 7 days old
Get-ChildItem $destination -Recurse -File |
    Where-Object { $_.CreationTime -lt [datetime]::Today.AddDays(-$old) } |
    Remove-Item

# rename all csv files in the Log folder by appending currentDate_currentTime
Get-ChildItem -Path $source* -Include *.csv  | % {
    $_ | Move-Item -Dest $("$destination" + $_.BaseName + [datetime]::now.ToString('_yyyyMMdd_hhmmss') + $_.Extension)
}

以上是关于将当前时间分配给powershell变量的主要内容,如果未能解决你的问题,请参考以下文章

Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?

我正在使用来自 python 的 powershell 命令获取一些数据,而 Windows 中没有 cmd!如何将此输出分配给字符串变量?

如何使用PowerShell将选择查询的输出从DataSet复制到日志文件?

通过 Powershell 脚本将权限角色分配给服务主体

如何将当前连接的 wifi 网络的 SSID 分配给批处理脚本中的变量? [复制]

如何通过powershell将用户权限分配给本地用户帐户?