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)
我知道我在这里遗漏了一些非常愚蠢的东西......我只是看不到它。还有其他眼睛可以帮助我吗?
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$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