window 批处理命令
背景
公司规定每天都要写日报,本来写日报就已经很烦了,可在写日报之前,还要一堆svn的操作就更烦了,所以就想着怎么能减少一点劳力呢。由于之前用linux写过自动化打包脚本,自然而然的就想到了window批处理命令。网上一查还真的可以各种操作。
代码思路
- 首先更新svn。
- 查看当前日期的文件夹是否已经存在了,不存在就创建一个文件夹。
- 判断当前日期中是否已经存在日报,存在的话直接提交,并跳转到结束。
- 不存在就复制昨天的日报到今天的日报文件夹中并且重命名。并且打开日报。
- 命令行暂停,等待填写日报。
- 提交svn,判断是提交整个文件夹,还是只需提交一个日报文件。
- 结束流程。
代码优化过几次,主要有以下几个原因: - 定时任务中执行脚本的时候,当前目录可能并不是脚本所在目录,所以需要通过
%~dp0
来获取到当前脚本的目录,并切换过来。 - 周末是不用写日报的,所以应该过滤掉周末(暂时不考虑法定假期)。
- 周一过来复制文件的目录是前三天的,而不是前一天的。
完整的脚本
脚本需要用电脑自动编辑器另存为ANSI编码格式,不然中文会乱码。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@echo off
rem 改成自己的名字
set userName=xxx
set fileName=xxxx_技术部_工作周报_%userName%_
rem 判断当前时间是否为工作日,法定假期除外
set workDate=%date:~-3%
if %workDate%==周六 goto endparms
if %workDate%==周日 goto endparms
rem 获取当前脚本目录
set currentPath=%~dp0
echo 当前脚本目录 : %currentPath%
cd /d %currentPath%
rem 获取当前日期20190522
set CURRENT_DATE=%date:~0,4%%date:~5,2%%date:~8,2%
rem 获取当前日期2019-05-22
set fileToday=%date:~0,4%-%date:~5,2%-%date:~8,2%
if %workDate%==周一 (set DaysAgo=3) else (set DaysAgo=1)
>"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (set DstDate=%%a)
rem 获取昨天日期2019-05-21
set fileYesterday=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
rem 获取昨天日期20190521
set YESTERDAY_DATE=%DstDate:~0,4%%DstDate:~4,2%%DstDate:~6,2%
cd 日报集
rem 1.首先更新svn
svn update
set isExist=true
echo %CURRENT_DATE%
rem 2.查看当前日期的文件夹是否已经存在了
if exist %CURRENT_DATE% (
set isExist=true
rem cd %CURRENT_DATE%
echo "当前日期的文件夹已经存在"
) else (
set isExist=false
echo "当前日期的文件夹不存在,创建文件夹"
mkdir %CURRENT_DATE%
)
set oldFile=%YESTERDAY_DATE%\%fileName%%fileYesterday%.xlsx
set newFile=%CURRENT_DATE%\%fileName%%fileToday%.xlsx
echo %oldFile%
echo %newFile%
rem 3.复制昨天的日报到今天的日报文件夹中并且重命名
if not exist %newFile% (
echo 今天的日报不存在复制昨天的日报
copy %oldFile% %newFile%
start %newFile%
) else (
echo 今天的日报已经存在,直接进行svn自动上传。
cd %CURRENT_DATE%
svn commit -m "每日周报上传-%userName%"
goto noparms
)
echo 请填写今天的日报,修改完成后按下enter键进行svn自动上传。
Pause
echo 确认文件是否已经关闭!
Pause
echo %isExist%
if %isExist%==true (
echo 文件夹已经存在,只需上传文件
cd %CURRENT_DATE%
svn add %fileName%%fileToday%.xlsx
svn commit -m "每日周报上传-%userName%"
) else (
echo 文件夹不存在,上传整个文件夹
svn add %CURRENT_DATE%
svn commit -m "每日周报上传-%userName%"
)
:noparms
echo 命令执行结束!!!!!!
Pause
:endparms
windows设置定时任务
- 右键计算机,选择【管理】,打开【计算机管理】界面;或者直接输入命令
compmgmt.msc
。 - 选择【任务计划程序】> 【任务计划程序】,点击创建基本任务。
- 根据引导填写相应的信息创建基本任务