标题: [文件操作] [已解决]批处理怎样比较版本并重启进程? [打印本页]
作者: solan 时间: 2015-6-19 21:15 标题: [已解决]批处理怎样比较版本并重启进程?
我想让ugslmd.exe这个进程和现在的ugslmd.exe进行版本比较,如果现在的版本高,就结束进程lmgrdm.exe和lmgrd.exe(这两个结束,ugslmd.exe就会自动结束进程),并且要移除ugslmd.exe,删除"%AllUsersProfile%\nx_fle文件夹,再拷贝、再启动等等;如果现在的版本低就什么都不做。
我根据apang 提供的代码自己拼凑了如下代码(该批处理和NX 10.0文件夹在同一个目录里面):- @echo off
- wmic process where name="ugslmd.exe" get executablepath|find /i /v "exec">c:\1.txt
- setlocal enabledelayedexpansion
- set aa=ugslmd.exe
- set bb=
- for /f "delims=" %%i in (c:\1.txt) do (
- set str=%%i
- set "str=!str:%aa%=%bb%!"
- echo !str!|find "\">>c:\2.txt
- )
- for /f "delims=" %%j in (c:\2.txt) do set ph=%%j
- set sss=%ph%
- :intercept
- if "%sss:~-1%"==" " set "sss=%sss:~0,-1%"&goto intercept
- set "dstFile=%sss%ugslmd.exe"
- set "srcFile=%~dp0NX 10.0\UGSLicensing\nx_flex\ugslmd.exe"
- >$ echo fso = new ActiveXObject("Scripting.FileSystemObject")
- >>$ echo v1 = fso.GetFileVersion("%dstFile:\=/%")
- >>$ echo v1 = v1.replace(/\d+/g,function(s0){return s0-0+100000000})
- >>$ echo v2 = fso.GetFileVersion("%srcFile:\=/%")
- >>$ echo v2 = v2.replace(/\d+/g,function(s0){return s0-0+100000000})
- >>$ echo WScript.Echo(v1 + " " + v2)
- for /f "tokens=1,2" %%1 in ('cscript -nologo -e:jscript $') do (
- if "%%1" LSS "%%2"
- TASKKILL /F /IM lmgrdm.exe /T
- TASKKILL /F /IM lmgrd.exe /T
- move "%sss%ugslmd.exe" "%sss%ugslmd_bak.exe"
- rd /s /q "%AllUsersProfile%\nx_fle
- xcopy /s /e /q /r /y "%~dp0NX 10.0\UGSLicensing\nx_flex\*" "%AllUsersProfile%\nx_flex\"
- tasklist | find "lmgrdm.exe"
- if errorlevel 1 "%AllUsersProfile%\nx_flex\PLMstart.exe" ping 127.1 -n 5 >nul
- )
- del /f/q/a $
- del /f/q/a c:\1.txt
- del /f/q/a c:\2.txt
- endlocal
复制代码
结果,当"%%1" LSS "%%2"成立时,执行批处理后没什么反应,而且$和1.txtc、2.txt都没有删除,请哪位老师帮我看看,谢谢!
作者: solan 时间: 2015-6-20 08:26
看来大家今天都放假休息了
作者: solan 时间: 2015-6-20 16:57
老大在吗,能不能帮我修改一下代码,着急啊,等一天了
作者: solan 时间: 2015-6-21 07:45
自己再顶顶,顶出好心人
作者: solan 时间: 2015-6-22 07:22
再顶顶看,说句话也行啊,求求各位啦
作者: terse 时间: 2015-6-22 10:22
版本号怎样组合的 字母或者数字 发来参考一下
作者: terse 时间: 2015-6-23 00:32
本帖最后由 terse 于 2015-6-23 00:33 编辑
- @echo off
- for /f "skip=1 delims=" %%i in ('wmic process where name^="ugslmd.exe" get executablepath') do (
- for /f "tokens=*" %%i in ("%%i") do set "ph=%%~dpi"
- )
- if "%ph%" neq "" for /f "delims=" %%a in ('replace "ugslmd.exe" "%ph:~,-1%" /r /u') do (
- for %%i in (lmgrdm lmgrd) do taskkill /f /im %%i.exe 2>nul
- rd /s /q "%AllUsersProfile%\nx_fle"
- xcopy /s /e /q /r /y "%cd%\NX 10.0\UGSLicensing\nx_flex" "%AllUsersProfile%\nx_flex\"
- stsrt "" "%AllUsersProfile%\nx_flex\PLMstart.exe"
- )
-
- pause
复制代码
作者: solan 时间: 2015-6-23 07:48
文件属性 -> 详细信息 -> 文件版本
作者: solan 时间: 2015-6-23 07:57
本帖最后由 solan 于 2015-6-23 08:12 编辑
回复 7# terse
谢谢,终于有人来关心我了,非常感谢,不过你的代码不好使,没反应
注:那个stsrt写错了,可能你写快了吧
作者: solan 时间: 2015-6-23 08:05
pcl_test 老师,今在何处啊,你可要帮帮忙啊,麻烦您了,急啊
作者: solan 时间: 2015-6-23 09:40
本帖最后由 solan 于 2015-6-23 14:41 编辑
回复 7# terse
start "" "%AllUsersProfile%\nx_flex\PLMstart.exe" 你这样写好像也不行,没有前面的检查判断,如果重复启动PLMstart.exe的话,许可服务会冲突,软件没法用了
作者: terse 时间: 2015-6-23 10:34
回复 11# solan
你先试下能运行不 结果怎么样 或者有什么提示
作者: solan 时间: 2015-6-23 14:40
当ugslmd.exe在运行时,提示
请按任意键继续...
当ugslmd.exe没运行时,提示
No Instance Available
请按任意键继续...
作者: apang 时间: 2015-6-23 16:38
这样试试- @echo off
- set w=wmic process where "name='ugslmd.exe'" get executablepath
- for /f "tokens=*" %%a in ('%w% 2^>nul ^| find "\"') do set "ph=%%~dpa"
- if "%ph%" == "" echo,No Such Prosess&pause & exit/b
-
- set "dstFile=%ph%ugslmd.exe"
- set "srcFile=%~dp0NX 10.0\UGSLicensing\nx_flex\ugslmd.exe"
-
- >$ echo fso = new ActiveXObject("Scripting.FileSystemObject")
- >>$ echo v1 = fso.GetFileVersion("%dstFile:\=/%")
- >>$ echo v1 = v1.replace(/\d+/g,function(s0){return s0-0+100000000})
- >>$ echo v2 = fso.GetFileVersion("%srcFile:\=/%")
- >>$ echo v2 = v2.replace(/\d+/g,function(s0){return s0-0+100000000})
- >>$ echo WScript.Echo(v1 + " " + v2)
-
- for /f "tokens=1,2" %%1 in ('cscript -nologo -e:jscript $') do if "%%1" LSS "%%2" call :Next
- del $
- pause & exit/b
-
- :Next
- TASKKILL /F /IM lmgrdm.exe /T
- TASKKILL /F /IM lmgrd.exe /T
- move "%ph%ugslmd.exe" "%ph%ugslmd_bak.exe"
- rd /s /q "%AllUsersProfile%\nx_flex"
- xcopy /s /e /q /r /y "%~dp0NX 10.0\UGSLicensing\nx_flex\*" "%AllUsersProfile%\nx_flex\"
- tasklist | findstr /ib "lmgrdm.exe" || "%AllUsersProfile%\nx_flex\PLMstart.exe"
复制代码
作者: solan 时间: 2015-6-23 17:50
回复 14# apang
谢谢,谢谢!在win7_64上测试通过,我就要这个效果
作者: terse 时间: 2015-6-23 19:03
回复 13# solan
没提示 应该是当前目录的文件版本低于目标版本 代码不进行其他操作
如果当前目录的文件版本高于目标版本 才进行一系列操作
当然 我的代码没测试 也谢谢你的测试
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |