标题: [文件操作] 麻烦帮忙简化BAT代码:确定当前服务器是否在线以及是否空闲 [打印本页]
作者: chouxia 时间: 2015-10-3 14:28 标题: 麻烦帮忙简化BAT代码:确定当前服务器是否在线以及是否空闲
需求:
任务分配的主机有bat会给指定的文件夹写入一些txt文件。
现在需要将这些txt分配到15台服务器上。
为了快速确定当前服务器是否在线以及是否空闲,给共享目录下%computername%子目录写一个空白txt文件。名称为nook.txt
每个服务器的bat首先判断这个nook.txt是否存在,服务器故障不删除,有负载不删除,bat运行不正常不删除。如果服务器空闲,删除这个文件。
任务分配的主机判断这个文件是否存在,存在就跳过这个目录,不存在分配一个txt文件进去,直至任务文件夹内没有文件为止。
我自己的代码如下:- :fenpei
- w:
- echo 1 >%wdisk%\slave\win101\nook.txt
- echo 1 >%wdisk%\slave\win102\nook.txt
- echo 1 >%wdisk%\slave\win103\nook.txt
- echo 1 >%wdisk%\slave\win104\nook.txt
- echo 1 >%wdisk%\slave\win105\nook.txt
- echo 1 >%wdisk%\slave\win106\nook.txt
- echo 1 >%wdisk%\slave\win107\nook.txt
- echo 1 >%wdisk%\slave\win108\nook.txt
- echo 1 >%wdisk%\slave\win109\nook.txt
- echo 1 >%wdisk%\slave\win110\nook.txt
- echo 1 >%wdisk%\slave\win111\nook.txt
- echo 1 >%wdisk%\slave\win112\nook.txt
- echo 1 >%wdisk%\slave\win113\nook.txt
- echo 1 >%wdisk%\slave\win114\nook.txt
- echo 1 >%wdisk%\slave\win115\nook.txt
- timeout -t 1 >nul
- for %%a in (%wdisk%\slave\ready\*.txt) do (
- if not exist %wdisk%\slave\win101\nook.txt (echo 1 >%wdisk%\slave\win101\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win102\nook.txt (echo 1 >%wdisk%\slave\win102\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win103\nook.txt (echo 1 >%wdisk%\slave\win103\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win104\nook.txt (echo 1 >%wdisk%\slave\win104\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win105\nook.txt (echo 1 >%wdisk%\slave\win105\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win106\nook.txt (echo 1 >%wdisk%\slave\win106\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win107\nook.txt (echo 1 >%wdisk%\slave\win107\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win108\nook.txt (echo 1 >%wdisk%\slave\win108\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win109\nook.txt (echo 1 >%wdisk%\slave\win109\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win110\nook.txt (echo 1 >%wdisk%\slave\win110\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win111\nook.txt (echo 1 >%wdisk%\slave\win111\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win112\nook.txt (echo 1 >%wdisk%\slave\win112\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win113\nook.txt (echo 1 >%wdisk%\slave\win113\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win114\nook.txt (echo 1 >%wdisk%\slave\win114\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- if not exist %wdisk%\slave\win115\nook.txt (echo 1 >%wdisk%\slave\win115\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
- goto :eof
- )
复制代码
我觉得这个代码不太靠谱。
哪位能帮我处理下?
作者: 157055829 时间: 2015-10-3 19:27
应该可以用循环简化 ,不过我不会
作者: /zhqsystem/zhq 时间: 2015-10-3 23:22
1-18行简化- @echo off
- for /l %%n in (101,1,115) do (
- echo %%n >"%wdisk%\slave\win%%n\nook.txt"
- )
- timeout/t 1 >nul
- pause
复制代码
19-结尾完全不知道要表达什么,%wdisk%是什么变量,只能暂时这么写了
如果看得懂可以依照这个序列来进行判断
作者: 路过 时间: 2015-10-3 23:25
19-36行简化- for %%a in (%wdisk%\slave\ready\*.txt) do (
- for /l %%b in (101,1,115) do (
- if not exist %wdisk%\slave\win%%b\nook.txt (echo 1 >%wdisk%\slave\win%%b\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
-
- )
- )
复制代码
35行的goto :eof可以删去
作者: chouxia 时间: 2015-10-4 08:44
怪我没说明白,我的想法是在一个循环中分发所以的文件。而不是代码上的优化,是流程优化。
结尾跟那么多的goto :eof我怕有
****** B A T C H R E C U R S I O N exceeds STACK limits ******
Recursion Count=368, Stack Usage=90 percent
****** B A T C H PROCESSING IS A B O R T E D ******
这样的错误
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |