You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerShell移动文件时为文件名追加日期以避免覆盖的实现方法

PowerShell移动文件时为文件名追加日期以避免覆盖的实现方法

嗨,作为PowerShell新手遇到这种文件覆盖的问题太正常啦,我来帮你把脚本改一改,完美实现你要的功能!

首先先理清楚你的需求:把同名的PDF文件移动到对应的同名文件夹里,同时给每个PDF加上创建日期后缀,这样就不会出现覆盖或者报错的情况了对吧?

咱们来一步步调整你的脚本:

核心思路

  1. 提取每个PDF文件的创建日期,格式化成你需要的MM_dd_yyyy(两位月份_两位日期_四位年份)形式
  2. 把原文件名和日期后缀拼接成新的文件名
  3. 确保目标文件夹存在(哪怕之前没有也能自动创建)
  4. 把文件移动到目标文件夹的新路径下

完整修改后的脚本

$folder = 'V:\Files'
Set-Location $folder

# 遍历目录下所有PDF文件
Get-ChildItem *.pdf | ForEach-Object {
    # 获取文件创建日期,格式化为MM_dd_yyyy的后缀
    $dateSuffix = $_.CreationTime.ToString('MM_dd_yyyy')
    # 生成带日期后缀的新文件名
    $newFileName = "$($_.BaseName)_$dateSuffix.pdf"
    # 组合目标路径:同名文件夹 + 新文件名
    $destinationPath = Join-Path -Path $_.BaseName -ChildPath $newFileName

    # 检查目标文件夹是否存在,不存在则自动创建
    if (-not (Test-Path -Path $_.BaseName -PathType Container)) {
        New-Item -Path $_.BaseName -ItemType Directory -Force | Out-Null
    }

    # 移动文件到目标路径
    Move-Item -Path $_.FullName -Destination $destinationPath
}

脚本细节解释

  • $_.CreationTime.ToString('MM_dd_yyyy')$_代表当前正在处理的PDF文件,CreationTime是它的创建时间,用ToString把时间转成你需要的格式,比如5/1/2023会变成05_01_2023
  • $newFileName = "$($_.BaseName)_$dateSuffix.pdf"BaseName是文件的名字(不带.pdf后缀),拼接后就能得到像123456789_05_01_2023.pdf这样的新文件名
  • Join-Path:这个命令是PowerShell里安全拼接路径的方式,避免手动写斜杠出现错误,比如会自动拼成123456789\123456789_05_01_2023.pdf
  • Test-PathNew-Item:这部分是做兜底的,万一目标文件夹还没创建,会自动帮你建出来,避免移动文件时报错
  • Move-Item:最后把原文件移到新的目标路径,因为每个文件的日期后缀不一样,完全不用担心覆盖问题啦

小调整提示

如果你不想用创建日期,而是想用文件的最后修改日期,只需要把$_.CreationTime改成$_.LastWriteTime就可以啦,根据你的实际需求调整就行。

备注:内容来源于stack exchange,提问作者SpecialK78

火山引擎 最新活动