如何使用日期或时间戳使用 Powershell 创建空日志或文本文件?
How to create an empty log or text file with Powershell using date or timestamp?
如何使用 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/
在最简单的情况下,如果您想无条件地创建一个文件,请使用New-Item -Force
- 但请注意,如果目标文件存在,其内容为discarded:
# 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
注:
以上仅限于文字路径指定的单个文件,不包括错误处理。
请参阅 this answer 了解 自定义 PowerShell 函数 Touch-File
,它在 PowerShell 中实现了大部分 touch
实用程序的功能- 惯用风格,包括正确处理 通配符 模式的能力。
所述功能 也可用作 an MIT-licensed Gist。假设你已经查看了链接的代码以确保它是安全的(我个人可以向你保证,但你应该经常检查),你可以直接安装它,如下所示:
irm https://gist.github.com/mklement0/82ed8e73bb1d17c5ff7b57d958db2872/raw/Touch-File.ps1 | iex
[1] 链接页面是 touch
的 POSIX 规范,它要求 最小 功能;具体实现可能支持更多。
如何使用 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/
在最简单的情况下,如果您想无条件地创建一个文件,请使用New-Item -Force
- 但请注意,如果目标文件存在,其内容为discarded:
# 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
注:
以上仅限于文字路径指定的单个文件,不包括错误处理。
请参阅 this answer 了解 自定义 PowerShell 函数
Touch-File
,它在 PowerShell 中实现了大部分touch
实用程序的功能- 惯用风格,包括正确处理 通配符 模式的能力。所述功能 也可用作 an MIT-licensed Gist。假设你已经查看了链接的代码以确保它是安全的(我个人可以向你保证,但你应该经常检查),你可以直接安装它,如下所示:
irm https://gist.github.com/mklement0/82ed8e73bb1d17c5ff7b57d958db2872/raw/Touch-File.ps1 | iex
[1] 链接页面是 touch
的 POSIX 规范,它要求 最小 功能;具体实现可能支持更多。