最新消息:

dos很强大(zz)

技术相关 admin 1678浏览

最近有一个小项目需要做一些在windows服务器上的调度工作,之前也一直困扰在这里,用php或者python也可以解决问题,但是需要在windows服务器再安装环境,想了想,还是希望用最简单的dos脚本来完成工作。

dos脚本,其实在windows2003中已经有了很多增强,除了原有习惯使用的dos命令之外,还可以使用 wsh(Windows Scripting Host)脚本混合使用。对一些简单的工作有很好的帮助。

下面把这个小项目用的几个好玩的命令给show一下。

1)forfiles forfiles以前没有用过,是可以遍历你指定的目录,按照你的要求,遍历指定的日期、文件大小等的条件,然后进行操作 相当与对files的for命令。到微软上看帮助。我用的是时间参数,删除掉30天之前的文件。FORFILES /D -30 /P d:datafile /M . /s /C “cmd /c del @path” d:datafile是我的工作目录,这个命令可以删除掉30天以前创建的文件,可惜有一个美中不足,就是不能删除目录,用forfiles如果不加参数是可以遍历出目录来的,但是加了参数,就无法遍历或者很麻烦了。然后forfiles之后。增加了一个遍历删除空目录的命令

FORFILES /D -30 /P d:datafile /M . /s /C “cmd /c del @path”

d:
cd
cd datafile

rem =====
for /f “delims=” %%i in (’dir /ad /b /s’) do call :rd_dir_empty “%%i”
goto :eof

rem ======= 删除空目录 =========
:rd_dir_empty
rd %1 2>nul||goto :eof
set dir_route=%1
for /f “delims=” %%i in (%dir_route%) do (
set dir_route=”%%~dpi”
for /f “delims=” %%j in (’dir /ad /b “%%~dpi”‘)do rd “%%~dpi%%j” 2>nul||goto :eof
)
:: 把路径最后的去掉,以便set route_deepest=”%%~dpi”能取到上一层路径
if “%dir_route:~-2,1%”==”” set dir_route=”%dir_route:~1,-2%”
if /i not “%cd%”==%dir_route% call :rd_dir_empty %dir_route%
goto :eof

将上述编写成一个批处理 del30.bat

因为datafile目录本身是提供iis服务的。这样删除可能删除不掉。就再编写一个批处理

rundel.bat

rem ==停止iis服务

net stop w3svc

rem ==调用del30.bat 然后返回到此处

call del30.bat

rem==启动iis

net start w3svc

然后再编写任务计划,这个没什么好说的了。每天在凌晨3点执行。

2)删除目录的命令rmdir, 在windows2003中取消了delete的删除目录功能,取代的是rmdir

rmdir 两个参数 /s 删除指定目录下所有的目录和文件

/q 静默模式。

3)管道符号敲回车,在命令中间,有一个第3方工具,这个工具,在运行结束之后,提示,按回车结束。如果不处理他,就会在批处理过程中卡住。-_-# 实验了一下,才发现原来在windows下,回车是CR 。。这个是在我最开始接触计算机的时候,教材上是这样写的。没有想到过了若干年后,才在实际的工作中应用到。真是。。。无语啊。

type CR|第3方工具.exe 参数[1] 参数[2]

type CR然后跟一个管道符,是表示将一个回车传递到第3方程序中去。这样在程序结束的时候,就会自动敲一个回车,来结束这个第3方工具。

转载请注明:Kermit的网站 » dos很强大(zz)