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

[系统相关] 【已解决】收集远程服务器信息的bat思路或者技术性的问题

最近在大家的帮助下写了一个bat脚本、用于收集远程服务器上的一些系统和服务方面的信息、
脚本运行后会生成一个存放信息的文件、然后上传至ftp,本地在用ftp下载查看(整个过程10秒左右)、脚本是循环的问题是、
脚本在服务器上运行的时候可能会因为网络的问题、脚本上传ftp的时候偶尔会卡2,3分钟左右、导致信息文件没有即时更新
本地下载的文件也不是即时的、所以我想在服务器上写一个脚本、用于监视信息文件内部的时间、以秒为单位。
如果文件内部的时间和服务器系统时间误差超过15秒就杀死正在运行的收集信息的脚本、
问题来了、、、
领导说服务器上同时不止一个bat脚本在运行、这就导致在杀进程的时候会有多个"cmd.exe"、为难了。。。
后来向进程名字一样、那PID是唯一的、可是怎么知道正在运行的脚本PID是多少呢、

比如脚本A ,A在运行的时候有没有办法知道自身的PID是多少呢、如果知道就好办了、导出到指定文件、然后监控脚本读取、
时间误差大的话、针对PID杀脚本进程、

可能是思路、更多的是技术问题把、、、求大神帮忙。。。
听说这么世界很美好、好多人都会帮我。。。

脚本中,加title,筛选title即可

TOP

TOP

回复 2# pcl_test


    加上去之后只能说明、dos窗口标志是唯一的、但脚本好像判断不出来吧、如果人工可以看出来
比如   title 服务器
那脚本怎么筛选“服务器”的这个窗口的呢、又是怎么杀死这个窗口的呢?
听说这么世界很美好、好多人都会帮我。。。

TOP

回复 3# CrLf


    都是好东西啊、有时间学习下、
可惜领导不让我用在服务器上用第三方的软件
还是谢谢哈
听说这么世界很美好、好多人都会帮我。。。

TOP

回复 4# Linux9253

taskkill /f /fi "windowtitle eq 窗口标题"

TOP

获取当前进程 pid 的技巧,输出到文本:
  1. @wmic process where name="wmic.exe" get ParentProcessId /value>PID.txt
复制代码
不能放在 for /f 中运行,因为这样取到的父进程 PID 不是当前进程

如果有文件夹洁癖,不想使用临时文件的话,可以玩个结构:
  1. %1 @wmic process where name="wmic.exe" get ParentProcessId /value | %0 : & exit /b
  2. ::通过管道交给自身处理,被调用时此句被屏蔽
  3. @echo off
  4. for /f "delims=" %%a in ('more') do set /a "%%a" 2>nul
  5. ::取得管道输入,用 set /a 简单过滤输出中的回车符,并赋值
  6. echo %parentprocessid%
  7. ::parentprocessid 即使最初的 cmd.exe 的 pid
  8. pause<con
  9. ::因为在管道中,输入句柄得重定向到 stdin
  10. if 时间==[时间] taskkill /t /f /pid %parentprocessid%
  11. ::若条件符合,则结束指定 pid 及其所有子进程,包括 cmd.exe 和 ftp.exe
复制代码
不过个人建议还是用临时文件比较方便易读

TOP

本帖最后由 Linux9253 于 2015-7-7 16:50 编辑
获取当前进程 pid 的技巧,输出到文本:不能放在 for /f 中运行,因为这样取到的父进程 PID 不是当前进程
...
CrLf 发表于 2015-7-7 16:33



    都是大牛啊、非常感谢、我在向好像没有什么可以难道你们的。。。谢谢哈
你们都是在那里学习的、真是可爱的一群人、论坛里热心的人还真不少

你刚才提醒了我、好像不用结束脚本、只需要结束ftp进程就行了、因为卡死的不是脚本、而是ftp上传的时候。。。。
听说这么世界很美好、好多人都会帮我。。。

TOP

wmic 需要一定权限,title 的办法比较简单易行,可与 wmic 互补
  1. set title=%random%
  2. title %title%
复制代码
然后 taskkill /f /fi "windowtitle eq %title%" 就行了,但有个问题,在有管理员权限的 cmd 中(比如关闭 UAC 的情况下),title 前面还有前缀,自己用是没什么问题,如果给别人用就得考虑这个差异

瘟七以上还可以考虑 powershell
  1. powershell -command kill (Get-WmiObject win32_process -Filter "ProcessId=$pid").ParentProcessId
复制代码

TOP

回复 9# CrLf


    这么多的解决办法、看来我真是井底之蛙啊、不过你们的代码我好像没有格式见过
听说这么世界很美好、好多人都会帮我。。。

TOP

回复 3# CrLf


    大神,我又来打扰你了,有时间的话帮我看看我另外一个贴子的问题呗,比较难/只能找你了
http://www.bathome.net/thread-36516-1-1.html
听说这么世界很美好、好多人都会帮我。。。

TOP

回复 6# pcl_test


        大神,我又来打扰你了,有时间的话帮我看看我另外一个贴子的问题呗,比较难/只能找你了
http://www.bathome.net/thread-36516-1-1.html
听说这么世界很美好、好多人都会帮我。。。

TOP

返回列表