window bat 批处理实例小结

::知识点小结
::两个冒号::表示注释
::学会使用帮助,任何命令 加 /?,列出帮助信息
::@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;
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值