我努力创build一个(相当简单)batch file脚本,以满足这些要求:
1文件是每天创build的,所以在那里应该只有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"
它发现文件确定。 它以我想要的格式(但使用当前的date和时间,不知道如何使用修改或创builddate)重命名它,并正确地移动它。 但它只适用于单个文件。 如果目录中存在多个文件,则会出错,导致无法将多个文件合并为一个文件(这是有道理的,它不能将所有文件重命名为1个文件。
但是我卡住了。 我不知道如何进一步。 有人可以帮我吗? 我隐约了解代码在做什么,但不足以操纵它做我想做的事情。
Powershell也是一个select,但是我更加不了解如何在那里做。 如果还有另一种可以通过任务调度程序轻松调度的选项,也可以使用。
这一点powershell做你想要的。 只需在引号之间的顶部放置源目录和目标目录的完整path即可。
编辑:添加关于文件创build时间的位。 编辑:添加命名示例,#是注释,一次只留下一个$name = uncommented,如果取消注释多个,它将是最后一个未注释的生效。
$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 }
除此之外,我强烈build议每天花一点时间学习PowerShell,这是一个非常棒的工具,比批处理脚本更友好,因为脚本语言很容易阅读,主要是因为它几乎是纯文本的英语。 这是一个很好的资源资源! 🙂