小工具-文件时间命名

marek-piwnicki-aZxYjgudDdQ-unsplash.jpg

需求

有的时候需要频繁的修改一个文档或者是基于某份模板进行每天的复制然后再进行修改,这种场景一般都是对源文件进行修改然后手动修改文件名再加上时间,脚本就是解决这个需求。本来之前有一个基于易语言写的软件,但是易语言的特性(会报毒)就又找GPT探讨了一下,然后自己再完善最后有了这个bat脚本

用法

  1. 新建一个fileAddDateVersion.bat脚本然后把脚本内容复制粘贴进去,以【管理员】角色运行即可
  2. 对要修改的文件名右键->发送到fCopy或者是fMove区别就是一个是复制、一个是移动

举例

1
2
3
4
5
6
7
8
9
# 文件
工作日报--张得帅.xlsx

# fCopy
工作日报--张得帅.xlsx
工作日报--张得帅V.2024_0712_1110.xlsx

# fMove
工作日报--张得帅V.2024_0712_1110.xlsx

脚本

文件名:fileAddDateVersion.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
@echo off
setlocal enabledelayedexpansion

rem 获取当前日期
for /f "tokens=1-3 delims=/: " %%a in ('echo %date%') do (
set year=%%a
set month=%%b
set day=%%c
)

rem 获取当前时间
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%hour:~1,1%
set minute=%time:~3,2%

rem 年月日时分补零
if "%month:~0,1%"==" " set month=0%month:~1,1%
if "%day:~0,1%"==" " set day=0%day:~1,1%
if "%month:~0,1%"=="0" set month=0%month:~1,1%
if "%day:~0,1%"=="0" set day=0%day:~1,1%

rem 构造时间戳
set timestamp=%year%_%month%%day%_%hour%%minute%
echo %timestamp%
set sendto_path=%APPDATA%\Microsoft\Windows\SendTo
echo %sendto_path%
rem 判断参数个数
if "%~1"=="" (
rem 创建脚本的快捷方式
set bat_dir=%~dp0
set bat_file=%~nx0
echo %sendto_path%
call :createShortcut "fCopy" "c" "%sendto_path%"
ping 127.0.0.1 -n 1 >nul
move "fCopy.lnk" %sendto_path%\"fCopy.lnk"
call :createShortcut "fMove" "m" "%sendto_path%"
ping 127.0.0.1 -n 1 >nul
move "fMove.lnk" %sendto_path%\"fMove.lnk"
explorer shell:sendto
goto :eof
)

if "%~2"=="" (
echo 请输入第二个参数: 文件路径
goto :eof
)

rem 提取参数
set operation=%~1
set sourceFile=%~2

rem 确保文件存在
if not exist "%sourceFile%" (
echo 文件不存在: %sourceFile%
goto :eof
)

rem 获取文件的目录、文件名和扩展名
set fileDir=%~dp2
set fileName=%~n2
set fileExt=%~x2

rem 检查文件名中是否包含 V.,如果有则去除旧的时间戳
for /f "tokens=1 delims=V." %%a in ("%fileName%") do (
set updatedName=%%a
)

rem 添加新的时间戳
set newName=%updatedName%V.%timestamp%%fileExt%
rem 目标文件路径
set targetFile=%fileDir%%newName%

rem 选择操作
if /i "%operation%"=="c" (
copy /y "%sourceFile%" "%targetFile%"
echo 文件已复制到: %targetFile%
) else if /i "%operation%"=="m" (
move /y "%sourceFile%" "%targetFile%"
echo 文件已移动到: %targetFile%
) else (
echo 无效的操作参数,请使用 c 或 m
)

endlocal
goto :eof

:createShortcut
rem 创建快捷方式的子例程
rem 参数:1-快捷方式名称,2-传递的参数,3-目标路径
set shortcutName=%1
set shortcutArgs=%2
set targetPath=%3
set shortcutName2=%1.lnk
set shortcutName2=%shortcutName2:"=%
rem 创建快捷方式.vbs文件
(
echo Set WshShell = CreateObject("WScript.Shell"^)
echo Set oShellLink = WshShell.CreateShortcut("%shortcutName2%"^)
echo oShellLink.TargetPath = "%bat_dir%%bat_file%"
echo oShellLink.Arguments = %shortcutArgs%
echo oShellLink.WorkingDirectory = "%bat_dir%"
echo oShellLink.Save
) > "%temp%\createShortcut_%shortcutName%.vbs"

rem 运行.vbs文件创建快捷方式
cscript //nologo "%temp%\createShortcut_%shortcutName%.vbs"
del "%temp%\createShortcut_%shortcutName%.vbs"
goto :eof