将当前时间分配给powershell变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将当前时间分配给powershell变量相关的知识,希望对你有一定的参考价值。
我拼凑了每次计算机重新启动时触发(通过任务计划程序)的PowerShell脚本。
该脚本将执行以下操作:
- 查找位于特定目录中的csv文件
- 通过在末尾附加时间/日期戳来重命名文件
- 将该文件移动到存档文件夹中
在白天,软件应用程序会自动创建一个新的csv文件。因此,下次计算机重新启动时,它会重复上述步骤。
- 最后一步 - 该脚本还会查看存档文件夹并删除大于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复制到日志文件?