Board logo

标题: [系统相关] [以解决] 如何通过外部程序调用BAT自身执行? [打印本页]

作者: _FPXI19    时间: 2016-4-13 14:12     标题: [以解决] 如何通过外部程序调用BAT自身执行?

本帖最后由 _FPXI19 于 2016-4-15 00:03 编辑

我想往系统里写入一个时间同步的任务,但是用户权限不够,只能调用第三方程序来提升权限
  1. xxx.exe "需要执行的代码"
复制代码
但是因为写入任务的过程代码我写的有点复杂导致没有办法可以简洁的把代码加入第三方程序的调用中
  1. 1. ::获取时间变量
  2. 2. set /a H=%time:~0,2%
  3. 3. set /a M=%time:~3,2%
  4. 4. set /a S=%time:~6,2%
  5. 5.
  6. 6. ::计算延迟时间
  7. 7. if not %M% GEQ 53 (set /a M=M+7) else (set /a H=H+1&set /a M=%M%+7-60)
  8. 8.
  9. 9. ::修正延迟后的时间数值
  10. 10. if %H% LSS 10 (set H=0%H%)
  11. 11. if %M% LSS 10 (set M=0%M%)
  12. 12. if %H% EQU 24 (set H=00)
  13. 13.
  14. 14. ::获取当前任务ID号
  15. 15. at %H%:%M% "Ver"&for /f "skip=2" %%i in ('at') do (set /a ID=%%i+1&at %%i /delete)
  16. 16.
  17. 17. ::写入同步任务并自我删除
  18. 18. at %H%:%M% "net time /set /yes&at %ID% /delete"
  19. 1. ::获取当前任务ID号并比较大小
  20. 2. set /a ID=0
  21. 3. setlocal enabledelayedexpansion
  22. 4. at %H%:%M% "Ver"&for /f "skip=2" %%i in ('at') do (
  23. 5.   if %%i GTR !ID! (set /a ID=%%i)
  24. 6.   )
  25. 7. echo %ID%
  26. 8. pause
复制代码
剩下的思路就是把代码写入一个新的bat,然后用提升程序xxx.exe "xx.bat"来执行,但是这样就违反了简洁的初衷,我在论坛找了相关资料,看见可以通过自我调用来让自我最小化执行
  1. %1(start /min cmd.exe /c %0 :&exit)
复制代码
找了挺久还是暂时理解不了%1和%0的意思,我的问题是有没有通过上面类似的原理从bat执行的一开始就通过xxx.exe自我调用提升权限来保证下面的时间同步代码能顺利执行?
作者: codegay    时间: 2016-4-13 14:16

完全无法理解你们的思路,任务计划以管理员的身份执行即可。
用schtasks指定用户就可以。
作者: _FPXI19    时间: 2016-4-14 12:45

回复 2# codegay


    现在的问题是没有管理员权限。
作者: CrLf    时间: 2016-4-15 02:19

  1. %1 @xxx.exe cmd.exe /c "%~0" : & exit
  2. @echo off
  3. ::以下为你要执行的代码
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2