如何在PowerShell中为文件夹及子文件夹内所有文件追加创建日期
解决PowerShell批量复制并给所有层级文件追加创建时间的方案
原有脚本仅处理了根目录下的一级文件/文件夹,子文件夹内的文件没有被单独遍历更名,因此不会追加创建时间。
修正后的完整脚本如下:
$path = "C:\test1" $destination = "C:\test2" # 遍历源路径下所有层级的文件,包含子文件夹内的文件 Get-ChildItem -Path $path -File -Recurse | ForEach-Object { # 计算文件在源目录下的相对路径,用来在目标目录保留原目录结构 $relativePath = $_.FullName.Substring($path.Length).TrimStart('\','/') # 生成带创建时间前缀的新文件名 $newFileName = $_.CreationTime.ToString("yyyy-MM-dd") + $_.BaseName + $_.Extension # 拼接目标路径:目标根目录 + 原相对父路径 + 新文件名 $targetDir = Join-Path -Path $destination -ChildPath (Split-Path -Path $relativePath -Parent) $targetFullPath = Join-Path -Path $targetDir -ChildPath $newFileName # 自动创建目标路径下不存在的文件夹 if (-not (Test-Path -Path $targetDir)) { New-Item -ItemType Directory -Path $targetDir | Out-Null } # 复制文件到目标路径 Copy-Item -Path $_.FullName -Destination $targetFullPath }
核心改动说明:
- 给
Get-ChildItem增加了-File参数,只遍历文件对象,避免处理文件夹本身;增加-Recurse参数,遍历所有子文件夹内的文件 - 新增了相对路径计算逻辑,保留原有的文件夹层级结构,不会把所有文件都堆在目标根目录下
- 新增了目标文件夹自动创建逻辑,避免子文件夹不存在时复制报错
- 对每一个单独的文件生成带创建时间的新名称,确保所有层级的文件都能正常追加创建日期
内容的提问来源于stack exchange,提问作者Snags
相关产品推荐
相关产品推荐

