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

dww*_*n66 5 powershell-2.0 batch-rename parser

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

我的首要任务是通过复制名为 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"
}
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息

+ CategoryInfo          : InvalidOperation: (Split:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
Run Code Online (Sandbox Code Playgroud)

我知道我在这里遗漏了一些非常愚蠢的东西......我只是看不到它。还有其他眼睛可以帮助我吗?

Ƭᴇc*_*007 4

Get-ChildItem返回文件系统对象的列表,而不仅仅是文件名。

\n\n

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

\n\n
\n

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

\n\n

\xe2\x80\xa2 System.Object - Get-ChildItem 返回的对象类型由提供程序驱动器路径中的对象确定。

\n\n

\xe2\x80\xa2 System.String - 如果使用Name参数,Get-ChildItem 将对象名称返回\n 作为字符串。

\n
\n\n

像这样的东西:

\n\n
$orgPath = "d:\\testOrg\\"\n$delim = "-"\n\nGet-ChildItem $orgPath -Name | `\nforeach { \n  $nameArray = $_.Split($delim)\n  $newName = $nameArray[2]+$nameArray[0]+$nameArray[1]+"_"+$nameArray[3]+$nameArray[4] \n  Write-Output $newName\n}\n
Run Code Online (Sandbox Code Playgroud)\n