关于Powershell的初学者问题(版本3正在使用中)。这些变量工作正常,但它们可能可以改进
我有一个循环
$LastWriteTime = get-childitem $file.fullname | select LastWriteTime
$LastWriteTime_text = "$LastWriteTime"
$LastWriteTime_text_short = $LastWriteTime_text.substring(16,10) -replace "\W", '_'
第2行和第3行是因为我不知道如何将第一行的输出直接重新格式化为文本。因此“......”。有用。但是使用这些额外的变量效率不高
另一个使用额外变量的格式也不太好(这有点糟糕)。我只是不知道如何管道
$check_hex = get-content -Path "C:\Test Script\Table.txt" | select-string -pattern "$file_type" | select -first 1
$check_hex_trim = $check_hex -replace "\W", '_'
$check_hex_txt = $check_hex_trim -creplace '[^A-Z]',''
是否还有一个实用示例来源如何处理这些格式化?
答案 0 :(得分:1)
$LastWriteTime
是一个[DateTime]
对象 - 当您将其转换为字符串时,会丢失大量信息。
不要将其转换为字符串,而是保持原样,然后在需要将其显示在某处时使用Get-Date -Format
或ToString()
。
如果您已有Get-ChildItem
个对象,则也无需使用FileInfo
:
foreach($file in Get-ChildItem "C:\path\with\files")
{
# grab the LastWriteTime property
$LastWriteTime = $file.LastWriteTime
# Use Get-Date -Format to get a string with the time
Get-Date $lastWriteTime -Format "HH:mm:ss"
# You can also use ToString()
$LastWriteTime.ToString("HH:mm:ss")
}
您可以使用standard date formatting strings两种方法:
PS C:\> Get-Date -Format "d"
11/2/2015
PS C:\> Get-Date -Format "o"
2015-11-02T20:44:49.2382560+01:00
PS C:\> (Get-Date).ToString("y")
November, 2015
还有custom formatting strings(如上所示):
PS C:\> [datetime]::Now.ToString("dddd, MMM d")
Monday, Nov 2
PS C:\> "{0:HH:mm:ss.fff}" -f $(Get-Date) # even the -f operator can do this!
20:48:34.415
PS C:\> Get-Date -Format "yyyy, MMMM"
2015, November