[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 麻烦帮忙简化BAT代码:确定当前服务器是否在线以及是否空闲

需求:
任务分配的主机有bat会给指定的文件夹写入一些txt文件。
现在需要将这些txt分配到15台服务器上。
为了快速确定当前服务器是否在线以及是否空闲,给共享目录下%computername%子目录写一个空白txt文件。名称为nook.txt
每个服务器的bat首先判断这个nook.txt是否存在,服务器故障不删除,有负载不删除,bat运行不正常不删除。如果服务器空闲,删除这个文件。
任务分配的主机判断这个文件是否存在,存在就跳过这个目录,不存在分配一个txt文件进去,直至任务文件夹内没有文件为止。
我自己的代码如下:
  1. :fenpei
  2. w:
  3. echo 1 >%wdisk%\slave\win101\nook.txt
  4. echo 1 >%wdisk%\slave\win102\nook.txt
  5. echo 1 >%wdisk%\slave\win103\nook.txt
  6. echo 1 >%wdisk%\slave\win104\nook.txt
  7. echo 1 >%wdisk%\slave\win105\nook.txt
  8. echo 1 >%wdisk%\slave\win106\nook.txt
  9. echo 1 >%wdisk%\slave\win107\nook.txt
  10. echo 1 >%wdisk%\slave\win108\nook.txt
  11. echo 1 >%wdisk%\slave\win109\nook.txt
  12. echo 1 >%wdisk%\slave\win110\nook.txt
  13. echo 1 >%wdisk%\slave\win111\nook.txt
  14. echo 1 >%wdisk%\slave\win112\nook.txt
  15. echo 1 >%wdisk%\slave\win113\nook.txt
  16. echo 1 >%wdisk%\slave\win114\nook.txt
  17. echo 1 >%wdisk%\slave\win115\nook.txt
  18. timeout -t 1 >nul
  19. for %%a in (%wdisk%\slave\ready\*.txt) do (
  20. if not exist %wdisk%\slave\win101\nook.txt (echo 1 >%wdisk%\slave\win101\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  21. if not exist %wdisk%\slave\win102\nook.txt (echo 1 >%wdisk%\slave\win102\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  22. if not exist %wdisk%\slave\win103\nook.txt (echo 1 >%wdisk%\slave\win103\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  23. if not exist %wdisk%\slave\win104\nook.txt (echo 1 >%wdisk%\slave\win104\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  24. if not exist %wdisk%\slave\win105\nook.txt (echo 1 >%wdisk%\slave\win105\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  25. if not exist %wdisk%\slave\win106\nook.txt (echo 1 >%wdisk%\slave\win106\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  26. if not exist %wdisk%\slave\win107\nook.txt (echo 1 >%wdisk%\slave\win107\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  27. if not exist %wdisk%\slave\win108\nook.txt (echo 1 >%wdisk%\slave\win108\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  28. if not exist %wdisk%\slave\win109\nook.txt (echo 1 >%wdisk%\slave\win109\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  29. if not exist %wdisk%\slave\win110\nook.txt (echo 1 >%wdisk%\slave\win110\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  30. if not exist %wdisk%\slave\win111\nook.txt (echo 1 >%wdisk%\slave\win111\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  31. if not exist %wdisk%\slave\win112\nook.txt (echo 1 >%wdisk%\slave\win112\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  32. if not exist %wdisk%\slave\win113\nook.txt (echo 1 >%wdisk%\slave\win113\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  33. if not exist %wdisk%\slave\win114\nook.txt (echo 1 >%wdisk%\slave\win114\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  34. if not exist %wdisk%\slave\win115\nook.txt (echo 1 >%wdisk%\slave\win115\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  35. goto :eof
  36. )
复制代码
我觉得这个代码不太靠谱。
哪位能帮我处理下?

怪我没说明白,我的想法是在一个循环中分发所以的文件。而不是代码上的优化,是流程优化。
结尾跟那么多的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      ******
这样的错误

TOP

19-36行简化
  1. for %%a in (%wdisk%\slave\ready\*.txt) do (
  2. for /l %%b in (101,1,115) do (
  3. if not exist %wdisk%\slave\win%%b\nook.txt (echo 1 >%wdisk%\slave\win%%b\%%a && del %wdisk%\slave\ready\%%a && goto :fenpei)
  4. )
  5. )
复制代码
35行的goto :eof可以删去

TOP

1-18行简化
  1. @echo off
  2. for /l %%n in (101,1,115) do (
  3. echo %%n >"%wdisk%\slave\win%%n\nook.txt"
  4. )
  5. timeout/t 1 >nul
  6. pause
复制代码
19-结尾完全不知道要表达什么,%wdisk%是什么变量,只能暂时这么写了
如果看得懂可以依照这个序列来进行判断

TOP

应该可以用循环简化 ,不过我不会  

TOP

返回列表