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

[系统相关] [以解决] 如何通过外部程序调用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自我调用提升权限来保证下面的时间同步代码能顺利执行?
1

评分人数

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

评分人数

    • _FPXI19: 虽然之前已解决,但是还是表示感谢。技术 + 1

TOP

回复 2# codegay


    现在的问题是没有管理员权限。

TOP

完全无法理解你们的思路,任务计划以管理员的身份执行即可。
用schtasks指定用户就可以。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

返回列表