批处理文件创建备份并使用时间戳重命名

20

我有以下的网络路径来将文件复制到档案文件夹中。它会将文件1文件夹复制到档案,但我想添加两个无法实现的调整。

  1. 文件1-1重命名为文件1 - 日期+时间
  2. 现在运行会显示一个带有复制代码的cmd框,是否可能在后台运行或者有一个加载屏幕来显示进度?

对于我的代码,我遵循了这个例子来将名称更改为日期。

copy "F:\Folder\File 1.xlsx" "F:\Folder\Archive\File 1-1.xlsx"
/f "tokens=1-5 delim s=/ " %%d in ("%date%") do rename "F:\Folder example 2.xlsx" "F:\Folder\File example %%e-%%f-%%g.xlsx"
5个回答

32

试一下这个:

ren "File 1-1" "File 1 - %date:/=-% %time::=-%"

这需要额外的文档吗,还是只使用这个就足够了? - CustomX
1
哦,赢得如此轻松。这是使用Windows环境变量(如“%DATE%”和“%TIME%”)完成的最简单直接的方法。谢谢!太棒了。 - Slink
我的答案仅适用于特定的问题。 - Endoro
仅使用 %DATE% 将在日期字符串中输出 /,这会导致我的路径出现问题。使用 %date:/=-% 将 / 替换为 - 字符,我的路径就可以正常工作了。 - Steve Root
1
8年过去了,我仍在使用它! - Michael
显示剩余2条评论

26

看看这是否是您想要做的:

@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%

copy "F:\Folder\File 1.xlsx" "F:\Folder\Archive\File 1 - %stamp%.xlsx"

3
6年后,我用它了。 - jqning
1
这个解决方案的好处在于将日期的最重要部分放在新文件名的前面,因此年份先于月份,月份先于日期。(这意味着按名称排序的文件也按日期排序。)而且它不受区域设置的影响。如果您将除复制命令之外的所有命令都放在批处理文件中,您可以运行此文件,然后进行多次复制运行,所有运行都具有相同的日期和时间。 - finch
@finch 补充一下,在文件名之前加上日期和时间戳会按照日期先后将文件分组在一起。否则,你会有一堆以"A"开头的文件,然后是一堆以"B"开头的文件,然后你需要找到并选择具有相同日期的文件。希望这样说得清楚。适用于备份多个文件。即便如此,这仍然更好。 - Mouthpear

11

我修改了Foxidrive的答案,以便复制整个文件夹及其所有内容。 此脚本将创建一个文件夹,并将另一个文件夹的内容备份到其中,包括其中的任何子文件夹。

如果您将此脚本放置在每小时定期任务中,需要注意,因为您可能会很快用原始文件夹的副本填满驱动器。在使用Bitbucket等工具之前,我正在使用类似的脚本将我的代码离线保存。

@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=YourPrefixHere_%YYYY%%MM%%DD%@%HH%%Min%
rem you could for example want to create a folder in Gdrive and save backup there
cd C:\YourGoogleDriveFolder
mkdir %stamp%
cd %stamp%

 xcopy C:\FolderWithDataToBackup\*.* /s 

2
根据当前系统日期,重命名所有的.pdf文件。例如,名为Gross Profit.pdf的文件将被重命名为Gross Profit 2014-07-31.pdf。如果您明天运行它,它将被重命名为Gross Profit 2014-08-01.pdf
您可以用报告名称Gross Profit替换?,但这只会重命名一个报告。使用?将重命名Conduit文件夹中的所有内容。之所以有这么多?,是因为一些.pdf文件名很长。如果您只放置了12个?,那么任何长度超过12个字符的名称都将在第13个字符处被截断。尝试使用1个?,然后尝试使用多个??的长度应该略长或与最长的报告名称一样长。
@ECHO OFF
SET NETWORKSOURCE=\\flcorpfile\shared\"SHORE Reports"\2014\Conduit
REN %NETWORKSOURCE%\*.pdf "????????????????????????????????????????????????? %date:~-4,4%-%date:~-10,2%-%date:~7,2%.pdf"

0

是的,要使其在后台运行,请创建批处理文件的快捷方式并进入属性。我现在正在使用Linux机器,但我相信您想要的选项在高级选项卡中。

您还可以通过vbs脚本运行批处理脚本,如下所示:

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

这将在不显示CMD窗口的情况下执行您的批处理文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接