如何使用 PowerShell 解析文件名并重命名它们?

如何使用 PowerShell 解析文件名并重命名它们?

我有一个分析日志文件的项目。有人以他们无穷的智慧将日志文件命名为 MM-DD-YYYY-HH-MM.LOG(例如,10-31-2012-18-00.LOG 表示 2012 年 10 月 31 日下午 6:00)。

我的第一项工作是通过复制名为 YYYYMMDD_HHMM.LOG 的现有日志(例如,上面的例子为 20121031_1800.LOG)来创建一些更合理的东西,并且必须使用 powershell 来完成这项任务。

到目前为止,我的情况如下:

$orgPath = "d:\testOrg\"
$newPath = "d:\testNew\"
$delim   = "-" ;

function copyFile {
"$($orgPath) copying Files to $($newPath)" 
Get-ChildItem $orgPath | `
foreach { 
  $nameArray = $_.Split($delim)
  $newName = Write-Output $nameArray[2]+$nameArray[0]+$nameArray[1]+"_"+$nameArray[3]+$nameArray[4] 
  $targetFile = $newPath + $_.FullName.SubString($orgPath.Length) 
  New-Item -ItemType File -Path $targetFile -Force  
  Copy-Item $_.FullName -destination $targetFile
  write-host $_.DirectoryName $_.newName  
  "File Copied"
}

我一直收到错误

+ CategoryInfo          : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

我知道我忽略了一些非常愚蠢的东西……我就是看不出来。还有其他人能帮我吗?

答案1

获取子项返回文件系统对象列表,而不仅仅是文件名。

您可以使用该-Name选项让它仅返回文件名。

输出类型是 cmdlet 发出的对象的类型。

系统对象- Get-ChildItem 返回的对象类型由提供程序驱动器路径中的对象决定。

系统字符串- 如果您使用姓名参数,Get-ChildItem 以字符串形式返回对象名称。

像这样:

$orgPath = "d:\testOrg\"
$delim = "-"

Get-ChildItem $orgPath -Name | `
foreach { 
  $nameArray = $_.Split($delim)
  $newName = $nameArray[2]+$nameArray[0]+$nameArray[1]+"_"+$nameArray[3]+$nameArray[4] 
  Write-Output $newName
}

相关内容