You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

路径存10个文件才执行复制的PowerShell脚本报错求助

解决PowerShell中DateTime.ParseExact无效日期字符串错误

错误根源

这个错误是因为ParseExact方法要求传入的字符串必须完全匹配指定的日期格式,一旦字符串长度不对、包含非数字字符,或是无效日期(比如20240230),就会抛出异常。你修改循环条件后,大概率是在生成待检查的文件名、或从现有文件名提取日期时,出现了不符合格式的字符串。

排查与修复步骤

1. 定位错误代码

先找到脚本中调用[DateTime]::ParseExact的行,添加调试输出确认传入的字符串和格式是否匹配:

# 在ParseExact前添加调试打印
$dateStr = "你要解析的字符串"
$format = "yyyyMMdd" # 你指定的日期格式
Write-Host "尝试解析的字符串: $dateStr, 指定格式: $format"
$parsedDate = [DateTime]::ParseExact($dateStr, $format, $null)

运行后查看输出,就能快速定位哪段字符串不符合格式要求。

2. 用TryParseExact替代ParseExact避免崩溃

换成TryParseExact方法,即使解析失败也不会直接终止脚本,还能给出明确提示:

$dateStr = "待解析的字符串"
$format = "yyyyMMdd"
$parsedDate = $null

if ([DateTime]::TryParseExact(
    $dateStr,
    $format,
    [System.Globalization.CultureInfo]::InvariantCulture,
    [System.Globalization.DateTimeStyles]::None,
    [ref]$parsedDate
)) {
    # 解析成功,继续后续逻辑
} else {
    Write-Error "日期字符串 '$dateStr' 不符合指定格式 '$format'"
    exit 1
}

3. 修正文件存在性检查逻辑

先按FH规范预生成10个目标文件名,再批量检查是否全部存在:

# 定义基础路径和目标日期(日期可手动指定,比如"20240520")
$basePath = "C:\Your\XML\File\Path"
$targetDate = Get-Date -Format "yyyyMMdd"

# 生成10个符合FH规范的文件名
$targetFileNames = 1..10 | ForEach-Object {
    "FH_{0}_{1:D2}.xml" -f $targetDate, $_
}

# 检查所有文件是否存在
$allFilesExist = $true
foreach ($fileName in $targetFileNames) {
    $fullPath = Join-Path -Path $basePath -ChildPath $fileName
    if (-not (Test-Path -Path $fullPath -PathType Leaf)) {
        Write-Warning "缺失文件: $fullPath"
        $allFilesExist = $false
        break
    }
}

# 仅当全部文件存在时执行FTP复制
if ($allFilesExist) {
    Write-Host "所有目标文件存在,开始复制到FTP..."
    foreach ($fileName in $targetFileNames) {
        $localPath = Join-Path -Path $basePath -ChildPath $fileName
        # 替换为你的FTP复制逻辑,示例如下
        # $ftpUrl = "ftp://your-ftp-server/target/path/$fileName"
        # $webClient = New-Object System.Net.WebClient
        # $webClient.Credentials = New-Object System.Net.NetworkCredential("username", "password")
        # $webClient.UploadFile($ftpUrl, $localPath)
        Write-Host "已完成复制: $fileName"
    }
} else {
    Write-Error "存在缺失文件,终止FTP复制操作"
    exit 1
}

4. 规范文件名日期提取逻辑(若从现有文件提取日期)

如果日期是从现有文件名中提取的,用正则表达式精准匹配FH规范,避免提取错误字符串:

$exampleFileName = "FH_20240520_01.xml"
# 匹配FH_YYYYMMDD_XX.xml格式
if ($exampleFileName -match '^FH_(\d{8})_(\d{2})\.xml$') {
    $extractedDateStr = $matches[1]
    $fileIndex = $matches[2]
    Write-Host "提取的日期: $extractedDateStr, 文件序号: $fileIndex"
} else {
    Write-Error "文件名 '$exampleFileName' 不符合FH命名规范"
}

内容的提问来源于stack exchange,提问作者user3658390

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:23:41