我有一个分析日志文件的项目。有人以他们无穷的智慧将日志文件命名为 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
}