解惑

解己之惑,解人之惑

标签:DOS

使用批处理删除一个月以前的文件

这个其实是上一篇文件备份的延续,既然备份了,备份越来越大当然不行,一般保留一个月的备份就足够了,DOS的功能也基本上能够满足这个要求,不废话,直接给脚本了:

rem Backup
y:
cd y:\01_projects\08_saas\TargetProcessDB
set dirname=%date:~10,4%-%date:~4,2%-%date:~7,2%
mkdir %dirname%
cd %dirname%
copy F:\DailyBackup\*.* .
cd ..

rem Remove backup  of one month ago based on dir name
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set monthprefix=%month:~0,1%
if %month%==01 goto _lastYear
if %monthprefix% EQU 0 goto _onebitmonth
goto _twobitsmonth

:_lastYear
set /a year=%year%-1
set deldate=%year%-12-%day%
goto _execute

:_onebitmonth
set /a oldmonth=%month:~1,1%-1
set deldate=%year%-0%oldmonth%-%day%
goto _execute

:_twobitsmonth
set /a oldmonth=%month%-1
if %oldmonth% EQU 9 (
set deldate=%year%-0%oldmonth%-%day%
)
else (
set deldate=%year%-%oldmonth%-%day%
)
goto _execute

:_execute
for /f %%d in (‘dir /b /d’) do if %%d LSS %deldate% rmdir /s /q %%d

应该看得懂吧。最后一行要留意下,定义变量的时候用了两个%号,这个是必须的。另外就是日期问题,不用关注闰年问题,因为是进行的字符串比较,日期(例如2010-02-29)即使不是合法日期也是没有关系的。另外就是日期的格式,因为是上一篇的延续,所以当然针对的是上一篇的日期格式了。

更新:

又搜索 了下,如果根据目录自己的创建时间来操作,有更简单的方法:

forfiles /p . /m * /d -30 /c “cmd /c rmdir /s /q @path”

如果是遍历所有的子目录删除文件,也很简单:

forfiles /p . /m *.* /d -30 /c “cmd /c del @path”

Windows下的文件定期备份

应该说这个是简单得不能再简单的事情了,但是在Windows下也不是很容易,主要是OS没有现成的工具,而自带的DOS命令又稍显弱了一点,稍微使用点技巧还是可以解决的。

既然是备份,当然备份到其它的物理机最好,所以第一步就是使用Windows的网络磁盘功能,把其它物理机的具有可写权限的目录映射到本地的磁盘,默认第一个应该是磁盘Z:

然后就是写一个批处理文件完成目录创建和文件拷贝,目录名是当前日期:

Z:
cd targetSubDir
set dirname=%date:~10,4%-%date:~4,2%-%date:~7,2%
mkdir %dirname%
cd %dirname%
copy originalDir\*.* .

简单的说一下,第二行就是进到子目录,如果你备份到本来就是映射盘的根目录,第二行就不用了。第三行是生成当前日期,%DATE%本来就是当前日期,但是格式里面包含空格和/,因此不是合法的目录名,我们把它转换为YYYY-MM-DD这样的合法目录名格式,需要说明的是,网上有文章说不同的OS的默认日期格式不一样,语言不同应该也不一样,我试的是2003Server版,英文。然后创建这个目录,进入这个目录,然后从本地的目录拷贝内容,如果需要备份的内容还包含目录结构,就把copy换成xcopy,originalDir就是本地的需要备份的内容的路径,最好是完整路径,例如c:\db。

第三步就是建一个Schedule Task,是每天跑还是每周或者每月就看自己的需求了,这个很简单,不多说。

资源管理器添加DOS快速通道

上班第一天,安装好的系统,需要配置开发环境,不可避免的要使用Ant,这就需要打开DOS窗口,进入工程的目录,很麻烦,原来的那个DOS快速通道的注册表没有带去,懒得带移动硬盘了,贴到这里明天拷贝下,也和大家共享下:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\DOS]
@="DOS快速通道(&Y)"

[HKEY_CLASSES_ROOT\Folder\shell\DOS\command]
@="cmd.exe /K CD %1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DOS]
@="DOS快速通道(&Y)"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DOS\command]
@="cmd.exe /K CD %1"

© 2024 解惑

本主题由Anders Noren提供向上 ↑