Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将当前时间分配给powershell变量_Powershell - Fatal编程技术网

将当前时间分配给powershell变量

将当前时间分配给powershell变量,powershell,Powershell,我拼凑了一个PowerShell脚本,每次计算机重新启动时都会触发它(通过任务调度器) 脚本将执行以下操作: 查找位于特定目录中的csv文件 通过在文件末尾附加时间/日期戳重命名文件 将该文件移动到存档文件夹中 在白天,软件应用程序会自动创建一个新的csv文件。因此,下次计算机重新启动时,它会重复上述步骤 最后一步-脚本还会查看归档文件夹,并删除所有大于7天的文件 有时(并非所有时间),当计算机重新启动并运行脚本时,它会完成步骤1和2,但不会完成步骤3。 这意味着csv文件被重命名,但脚本没有将

我拼凑了一个PowerShell脚本,每次计算机重新启动时都会触发它(通过任务调度器)

脚本将执行以下操作:

  • 查找位于特定目录中的csv文件
  • 通过在文件末尾附加时间/日期戳重命名文件
  • 将该文件移动到存档文件夹中
  • 在白天,软件应用程序会自动创建一个新的csv文件。因此,下次计算机重新启动时,它会重复上述步骤

  • 最后一步-脚本还会查看归档文件夹,并删除所有大于7天的文件
  • 有时(并非所有时间),当计算机重新启动并运行脚本时,它会完成步骤1和2,但不会完成步骤3。 这意味着csv文件被重命名,但脚本没有将其移动到归档文件夹中

    为什么?? 我在PowerShell ISE中打开脚本并手动运行脚本,我看到了原因: 存档文件夹中已存在同名文件

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

    结果表明,分配了Get Date值的变量没有更新。 它仍然包含旧的时间

    如果我在PowerShell脚本中做的第一件事是: $rightNow=获取日期

    我知道将当前日期和时间分配给变量不是最佳做法,而且很明显,随着时间的推移,变量不会自动更新。那很好。我不需要它。我希望它能抓取当前日期和时间(在这行代码运行时),并将其分配给名为$rightNow的变量

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

    以下是我当前的脚本:

    $source = "C:\Logs"
    $destination = "C:\Logs\archive"
    $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:\Logs\archive"
    $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)
    }
    

    $rightNow=获取日期-格式为“\u yyyyMMdd\u hhmmss”