::两个冒号::表示注释
::学会使用帮助,任何命令 加 /?,列出帮助信息
::@echo off取消回显
::set赋值
::%date%=如:2017/03/06 %time%=如:15:02:57.48
::%date:~0,4%%date:~5,2%%date:~8,2%=得到时间,如20170306
::cd /d 可以跨盘符切换目录
::%cd%表示cd的当前路径
::echo输出显示
::rd /S /Q D:\temp,非空也删除文件夹
::rd D:\temp,rd删除文件夹,如果文件夹为空,则删除,否则不删除
::>>重定向(输出日志),2>>发生错误后重定向。如rd D:\temp 2>>D:\err.txt,如果删除D:\temp失败,则输出错误信息到D:
\err.txt,注意,存放错误信息的文本路径最好写全。
::goto命令,是跳转命令,goto year_flag执行到goto处,无条件跳转到:year_flag处,如果不存在year_flag报错
::dir查看目录
::for /f %%a in ('dir /b /ad /s 目录\^|sort /r') do (),循环目录下所有文件夹及子目录
::for /d 遍历目录
::for命令(for in do),变量用%%a表示,/f表示,读取in()里面的内容,此处必须用单引号引起来。
::|管道符,将dir /b /ad /s 目录\^获取的内容赋值给sort /r倒序输出。
::具体dir和for命令,请查询帮助
::
::
@echo off
::核心思想:1.先删除空的文件夹。2.进入最小的年文件夹,再进入最小的月文件夹,最后删除最小的日文件夹
::声明,并设置年月日初值
set year=2016
set month=01
set day=01
set temp_file=D:\works\CTY\%date:~0,4%%date:~5,2%%date:~8,2%.txt
set base_path=D:\works\CTY\
cd /d %base_path%
echo %date% %time% >>%temp_file%
echo 遍历当前路径%cd%下所有的文件夹 >>%temp_file%
for /f %%a in ('dir /b /ad /s %base_path%\^|sort /r') do (
echo 文件夹%%a >>%temp_file%
rd "%%a" 2>>%temp_file%
)
echo 遍历结束,删除空文件夹>>%temp_file%
::年文件夹跳转
for /d %%s in (*) do (
if exist %%s (
echo 文件夹%%s存在 >>%temp_file%
set year=%%s
goto year_flag
) else (
echo %%s年文件夹不存在 >>%temp_file%
)
)
:year_flag
echo 参数year=%year% >>%temp_file%
cd %year% 2>>%temp_file%
echo 跳转后的路径%cd% >>%temp_file%
::月文件夹跳转
for /d %%s in (*) do (
if exist %%s (
echo 文件夹%%s存在 >>%temp_file%
set month=%%s
goto month_flag
) else (
echo %%s月文件夹不存在 >>%temp_file%
)
)
:month_flag
echo 参数month=%month% >>%temp_file%
cd %month% 2>>%temp_file%
echo 跳转后的路径%cd% >>%temp_file%
::日文件夹跳转
for /d %%s in (*) do (
if exist %%s (
echo 文件夹%%s存在 >>%temp_file%
set day=%%s
goto day_flag
) else (
echo %%s日文件夹不存在 >>%temp_file%
)
)
:day_flag
echo 参数day=%day% >>%temp_file%
echo 删除文件夹%cd%\%day% >>%temp_file%
rd /S /Q %cd%\%day% 2>>%temp_file%
echo 删除完毕!>>%temp_file%
::暂停pause
::删除命令rd /S /Q D:\works\CTY\2016\11\24
========================================
先附上java调用bat文件的方式。
public class Bat_Util {
/**
* 返回0成功,返回1bat文件执行失败,bat文件语法错误
*
* @param command
* -bat文件路径
* @return
*/
public static int excute_Bat(String bat_path) {
int i = 0;
String line = "";
try {
Process ps = Runtime.getRuntime().exec(bat_path); // 执行
InputStream out = ps.getInputStream();
BufferedReader br_out = new BufferedReader(new InputStreamReader(
out));
while ((line = br_out.readLine()) != null) { // 需要把流读取完,否则执行ps.exitValue();报错
// System.out.println(line1);
}
i = ps.exitValue(); // 获得执行返回值
} catch (IOException e) {
e.printStackTrace();
}
return i;
}
}