重命名文件并添加时间戳的脚本(服务器 2012 r2)

重命名文件并添加时间戳的脚本(服务器 2012 r2)

我正在努力创建一个满足以下要求的(相当简单的)批处理文件脚本:

  • 在名为 Source 的文件夹中查找文件(任意名称 .csv)
  • 将文件重命名为 File_YYYYMMDD_HHMinMinSS.csv(如果可能的话,时间戳应该是修改/创建日期(修改/创建应该是同一件事,因此两者都可以)
  • 将其移动到名为“目标”的文件夹,以便可以对其进行进一步的操作。

每天创建 1 个文件,因此其中应该只有 1 个,但如果有多个文件(由于某种原因脚本未运行),它应该能够处理多个文件或只选择第一个并正确处理。 (我可以安排它每天运行多次以拾取任何以前未处理的文件。

到目前为止,这是我的代码。我从谷歌上拼凑了它,它在某种程度上可以工作,但并没有达到我想要的效果。

echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%

set stamp=%YYYY%%MM%%DD%_%HH%%Min%%Sec%

move "c:\test\source\*.csv" "c:\test\destination\File_%stamp%.csv"

它找到了正确的文件。它以我想要的格式重命名它(但使用当前日期和时间,不确定如何使用修改或创建日期)并正确移动它。但它只适用于单个文件。如果目录中有多个文件,它会出错,无法将多个文件合并为一个文件(这是有道理的,它无法将所有文件重命名为 1 个文件。

但我被困住了。我不知道该怎么做。有人能帮我吗?我大概知道代码在做什么,但还不足以操纵它做我想要做的事情。

Powershell 也是一个选项,但我对如何在那里操作知之甚少。如果有另一个可以通过任务计划程序轻松安排的选项,那也行。

答案1

这个 powershell 可以满足您的要求。只需将源目录和目标目录的完整路径放在引号之间的顶部即可。

编辑:添加了有关文件创建时间的部分。编辑:添加了命名示例,# 是注释,$name =一次只能取消注释一个,如果取消注释多个,则最后一个取消注释的注释将生效。

$source = "c:\te\s"
$destination = "c:\te\d"

Get-ChildItem $source -Recurse -Include *.csv | % {
    $name = $_.Name.Split(".")[0] + "_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    #$name = "Finished_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    #$name = "Finished_" + $_.Name.Split(".")[0] +  "_" + ($_.CreationTime | Get-Date -Format yyyymmdd) + "_" + ($_.CreationTime | Get-Date  -Format hhmmss) + ".csv"
    Rename-Item $_ -NewName $name
    Move-Item "$($_.Directory)\$name" -Destination $destination
}

顺便说一句,我强烈建议每天留出一点时间来学习 PowerShell,它确实是一个很棒的工具,并且比批处理脚本更加用户友好,作为脚本语言,它易于阅读,主要是因为它几乎是用简单的英语编写的。这是资源中的好资源!:)

相关内容