PowerShell批量重命名xls脚本适配新文件名格式报错修复求助
问题根因
原有正则(\b\w+\b).(\d+[.]\d+[.]\d+)仅适配旧文件名「前缀名+空格+点分日期」的结构,新文件名改为「前缀名直接拼接8位日期」后,正则匹配失效,$fn数组为空,调用Get-Date时传入空参数触发报错,后续逻辑生成非法文件名_.xls,且未做容错直接删除源文件导致数据丢失。
解决方案
修改后脚本同时兼容新旧命名格式,新增容错逻辑避免源文件误删,完整代码如下:
# 变量定义 $srcFld = "\\domain\MC_REPORT\INCOMING" $arcFld = "\\domain\MC_REPORT\ARC" $UnsortFld = "\\domain\MC_REPORT\UNSORT" $mcgruzFld = "\\domain\MC_REPORT\RAIL_RUN_DATE" $mcdatcFld = "\\domain\MC_REPORT\DEMURRAGE_AT_THE_CUSTOMS" $demurrFld = "\\domain\MC_REPORT\DEMURRAGE" $prim43Fld = "\\domain\MC_REPORT\FLAT_CAR_PRICE_GROUP" $podsylFld = "\\domain\MC_REPORT\PODSYL" $pogruzFld = "\\domain\MC_REPORT\POGRUZKA" $claimsFld = "\\domain\MC_REPORT\CLAIMS" $dislzvFld = "\\domain\MC_REPORT\DISLZV" $renummFld = "\\domain\MC_REPORT\RENUM" $kontdislFld = "\\domain\MC_REPORT\KONTDISL" # 兼容新旧格式的正则:分别捕获前缀、旧格式点分日期、新格式8位日期 $regex = "^(\w+?)(?:\s(\d{2}\.\d{2}\.\d{4})|(\d{8}))_" # 重命名逻辑 Get-ChildItem $srcFld -Filter *.xls | ForEach-Object { $file = $_ $destFld = $UnsortFld $filenew = $file.Name # 匹配失败时默认用原文件名归档到 UNSORT if ($file.Name -match $regex) { $prefix = $matches[1] # 优先读取新格式8位日期,否则转换旧格式点分日期 if ($matches[3]) { $dateStr = $matches[3] } else { try { $dateStr = Get-Date $matches[2] -Format yyyyMMdd -ErrorAction Stop } catch { $prefix = $null } } if ($prefix -and $dateStr) { $filenew = "${dateStr}_${prefix}.xls" # 匹配目标归档目录 switch ($prefix) { renumm { $destFld = $renummFld } mcgruz { $destFld = $mcgruzFld } mcdatc { $destFld = $mcdatcFld } prim43 { $destFld = $prim43Fld } demurr { $destFld = $demurrFld } podsyl { $destFld = $podsylFld } pogruz { $destFld = $pogruzFld } dislzv { $destFld = $dislzvFld } claims { $destFld = $claimsFld } kontdisl { $destFld = $kontdislFld } default { $destFld = $UnsortFld } } } } # 确认复制成功后再删除源文件,避免数据丢失 try { Copy-Item -Path $file.FullName -Destination "$destFld\$filenew" -ErrorAction Stop Copy-Item -Path $file.FullName -Destination "$arcFld\$filenew" -ErrorAction Stop Remove-Item -Path $file.FullName -ErrorAction Stop } catch { Write-Warning "处理文件 $($file.FullName) 失败:$_" } }
内容的提问来源于stack exchange,提问作者wal 24
相关产品推荐
相关产品推荐

