拖动文件到批处理上重命名文件为当前系统时间


为了在OneDrive图床上上传图片不会重名,导致后上传的文件覆盖先前的文件,于是有了这个需求。
谷歌了半天,明明是个很简单的需求,发现愣是没有直接的答案。
没办法,自己研究了一下批处理命令写了一个。


一、效果展示

最开始是实现了通过拖动文件到批处理文件重命名。
20190505153346.gif
随着问题的深入,最后实现了通过右键菜单,一键重命名。
20190505165727.png

二、完整代码

复制以下代码到txt文本,然后把txt后缀名改为bat,即可使用了。

实现代码1

@echo off
::获取日期 将格式设置为:20110820
set datevar=%date:~0,4%%date:~5,2%%date:~8,2%
::获取时间中的小时 将格式设置为:24小时制
set timevar=%time:~0,2%
if /i %timevar% LSS 10 (
set timevar=0%time:~1,1%
)
::获取时间中的分、秒 将格式设置为:3220 ,表示 32分20秒
set timevar=%timevar%%time:~3,2%%time:~6,2%
@echo 当前时间:%datevar%%timevar%

for %%i in (%*) do ren "%%i" "%datevar%%timevar%%%~xi"

实现代码2(更简洁)

for %%i in (%*) do ren %1 "%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%%~x1"

三、解决过程

整理一下解决过程

代码1

先是写的代码1,比较复杂

1

首先是查到了这个博主的这段代码
@echo off
::获取日期 将格式设置为:20110820
set datevar=%date:~0,4%%date:~5,2%%date:~8,2%
::获取时间中的小时 将格式设置为:24小时制
set timevar=%time:~0,2%
if /i %timevar% LSS 10 (
set timevar=0%time:~1,1%
)
::获取时间中的分、秒 将格式设置为:3220 ,表示 32分20秒
set timevar=%timevar%%time:~3,2%%time:~6,2%
@echo 当前时间:%datevar%%timevar%
作用也就不言而喻,获取当前系统时间。

2

然后就是用批处理重命名文件。
百度到了这个答案:
for %%a in (%*) do ren "%%a" "%%~na.mp4"
得知:%%a 是for语句里面的变量

3

然后在这两个答案里
知道了for %%a in (%*)是循环当前目录下所有文件的意思

4

接着在这篇帖子中得知
  • %%~ni 代表文件名
  • %%~xi 代表文件扩展名
  • %%~nxi 代表文件名和扩展名

5

最后参考这个答案:
@echo off
set t=%time:~,2%%time:~3,2%
for /f "tokens=*" %%i in ('dir/b') do ren "%%i" "%%~ni%t%%%~xi"
中的这段代码(目的是将时间加在文件名里面)
ren "%%i" "%%~ni%t%%%~xi"

6

所以最后
@echo off
::获取日期 将格式设置为:20110820
set datevar=%date:~0,4%%date:~5,2%%date:~8,2%
::获取时间中的小时 将格式设置为:24小时制
set timevar=%time:~0,2%
if /i %timevar% LSS 10 (
set timevar=0%time:~1,1%
)
::获取时间中的分、秒 将格式设置为:3220 ,表示 32分20秒
set timevar=%timevar%%time:~3,2%%time:~6,2%
@echo 当前时间:%datevar%%timevar%
在上面这段代码后面补充下面这句代码:
for %%i in (%*) do ren "%%i" "%datevar%%timevar%%%~xi"
即%datevar%%timevar%(当前时间)+%%~xi(文件后缀名)

代码2

同时参照大大给出的方法,把功能添加到了右键菜单
20190505165727.png
20190505165300.png
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\重命名为当前时间]
@="重命名为当前时间"

[HKEY_CLASSES_ROOT\*\shell\重命名为当前时间\command]
@="cmd.exe /c D:\\OneDrive\\常用软件\\重命名为当前时间.bat %1"
至此问题完美解决。

此博客中的热门博文

Blogger搭建国内可正常访问博客(超详细教程)