如何解决如何使用日期或时间戳使用 Powershell 创建空日志或文本文件?
如何使用powershell创建一个空文件,类似于Linux上的“touch”,文件名中带有时间戳?
与以下没有太大区别:
md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"
尽管该文件实际上并不是空的,但它确实将日期合并到了文件名中。
在 Powershell 上的尝试:
PS /home/nicholas/powershell/file_ops> New-Item -ItemType file foo.txt
New-Item: The file '/home/nicholas/powershell/file_ops/foo.txt' already exists.
New-Item: The file '/home/nicholas/powershell/file_ops/foo.txt' already exists.
PS /home/nicholas/powershell/file_ops> New-Item -ItemType file bar.txt
Directory: /home/nicholas/powershell/file_ops
Mode LastWriteTime Length Name
---- ------------- ------ ----
----- 12/20/2020 10:56 AM 0 bar.txt
PS /home/nicholas/powershell/file_ops> $logfile = "./"+$FN+"-LOG-AddUser_$(get-date -Format yyyymmdd_hhmmtt).txt"
理想情况下,生成任意数量的空日志或文本文件。
另见:
https://community.spiceworks.com/topic/1194231-powershell-adding-a-variable-into-a-log-filename
https://superuser.com/q/502374/977796
https://4sysops.com/archives/understanding-the-powershell-_-and-psitem-pipeline-variables/
https://unix.stackexchange.com/q/278939/101935
解决方法
在最简单的情况下,如果您想无条件地创建一个文件,请使用New-Item -Force
- 但请注意,如果目标文件存在,则其内容为丢弃:
# CAVEAT: Truncates an existing file. `-ItemType File` is implied.
# * Outputs a [System.IO.FileInfo] instance describing the new file,which
# $null = ... discards here.
# * `Get-Date -UFormat` allows you to perform Unix-style date formatting.
$null = New-Item -Force "$(Get-Date -UFormat "%Y_%m_%d_%I_%M_%p").log"
-
New-Item
的(位置隐含的)-Path
参数支持路径的数组,因此您可以一次传递多个路径。 -
默认情况下,会创建一个 空 文件,但您可以选择通过
-Value
参数提供(初始)内容。
如果您真的想模拟 touch
Unix 实用程序的行为,则需要做更多的工作,默认意味着(注意 touch
支持多种选择[1]):
- 如果文件不存在,创建它(作为一个空文件)。
- 否则,将最后修改的时间戳更新为当前时间点(并保留现有内容)。
$file = "$(Get-Date -UFormat "%Y_%m_%d_%I_%M_%p").log"
# Trick: This dummy operation leaves an existing file alone,# but creates the file if it doesn't exist.
Add-Content -LiteralPath $file -Value $null
(Get-Item -LiteralPath $file).LastWriteTime = Get-Date
注意:
-
以上仅限于由文字路径指定的单个文件,不包括错误处理。
-
有关自定义 PowerShell 函数
Touch-File
,请参阅 this answer,它以 PowerShell 惯用方式实现了大部分touch
实用程序的功能,包括功能正确处理通配符模式。-
所述函数也可用作an MIT-licensed Gist。假设您已查看链接的代码以确保它是安全的(我个人可以向您保证,但您应该始终检查),您可以按如下方式直接安装:
irm https://gist.github.com/mklement0/82ed8e73bb1d17c5ff7b57d958db2872/raw/Touch-File.ps1 | iex
-
[1] 链接页面是 touch
的 POSIX 规范,它要求最低功能;具体实现可能支持更多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。