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

PowerShell脚本中变量无法正确获取文件创建时间的解决方法

问题根因

你的代码存在执行顺序错误:所有读取单个文件创建时间的变量,都定义在了foreach循环外部。
代码实际运行逻辑是:

  • 运行到$FileCreationTime = $file.CreationTime等取值语句时,foreach循环还未启动,$file变量没有被赋值为当前遍历的xml文件对象
  • 后续才执行Get-ChildItem拉取文件列表、进入循环遍历文件
  • 循环外未赋值的$file如果匹配到当前会话中之前操作过的源文件夹对象,就会直接读取文件夹的创建时间,取值不会随循环内的文件切换更新。
修复方案

将所有依赖单个$file对象的变量定义,全部移动到foreach的循环代码块内部,保证每遍历到一个文件,就重新读取当前文件的创建时间属性。
另外注意路径字符串要使用英文半角双引号,不要用中文弯引号,避免路径解析错误。

修复后的参考代码:

# 拉取目标文件列表的逻辑放在循环外即可
$files = Get-ChildItem "C:\Test Folder\*.xml"

foreach($file in $files)
{
    # 所有和当前文件属性相关的取值,全部放在循环块内
    $FileCreationTime = $file.CreationTime
    $YearMonthDate = $FileCreationTime.ToString("yyMMdd")
    $MonthDate = $FileCreationTime.ToString("MMdd")
    $YearMonth = $FileCreationTime.ToString("yyMM")
    $Year = $FileCreationTime.ToString("yyyy")
    $Month = $FileCreationTime.ToString("MM")
    $Day = $FileCreationTime.ToString("dd")

    # 后续归档逻辑写在循环内即可,示例:
    # 1. 拼接一级年份目录路径,不存在则创建
    $firstLevelDir = Join-Path "C:\你的归档根路径" $Year
    if (-not (Test-Path $firstLevelDir)) {
        New-Item -ItemType Directory -Path $firstLevelDir | Out-Null
    }
    # 2. 按预设规则计算日期区间,拼接二级目录路径
    # 3. 将当前$file移动到对应二级目录下
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:57:21