找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 3725|回复: 6

[其他] 求助批处理%1( )和:&exit的作用

[复制链接]
发表于 2025-8-3 17:47:43 | 显示全部楼层 |阅读模式
  1. @%1(C:\Windows\path\MinSudo.exe --NoLogo --TrustedInstaller cmd.exe /c %0 :&exit)

  2. for %%i in (
  3. UsoSvc
  4. wuauserv
  5. wisvc
  6. DusmSvc
  7. PcaSvc
  8. hidserv
  9. ) do (
  10. REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\%%i" >nul 2>nul
  11. if %ERRORLEVEL% EQU 0 reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\%%i" /v "Start" /t REG_DWORD /d 4 /f
  12. sc stop %%i & sc config %%i start= DISABLED
  13. )
复制代码
第一行代码不明白,尤其是%1( )和:&exit的作用,在批处理教程中从未看到过这样的代码,请懂的大神讲解一下,不甚感谢!!
还有
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\%%i" /v "Start" /t REG_DWORD /d 4 /f
sc stop %%i & sc config %%i start= DISABLED
这两行的代码作用是一样的,都写出来是有什么特殊作用吗?
发表于 2025-8-3 22:35:41 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-3 22:41 编辑

回复 1# ycfnxwl

   一楼代码第一行中的 (...) 作用是用 MinSudo.exe 启运 cmd.exe /c %0 : 之后自动退出,其中 %0 是当前批处脚本路径, 是脚本的命令行参数 %1,其结果就是重复运行当前批处脚本,因有命令行参数 : 故脚本首行会变为注释行被略过而直接运行第3行...
   第12行的作用是要检测 %errorlevel% 为零时才(有条件)运行 reg add ...,而第13行 sc stop ... 则是被无条件运行。
   顺便加一句》在 for ... 循环体内引用 %errorlevel% 会被 '预处理' 设为进入循环体之前的 %errorleve% 值,故并不能真实反映循环体内 reg query ... 的实时结果。
发表于 2025-8-4 00:45:41 | 显示全部楼层
是冒号(和&exit ,冒号(:)是第一行后面自己调用自己时的参数(即%1)
一开始运行时没有参数%1 ,第一行代码能够运行 ,运行过程中批处理自己运行了自己 ,运行自己时带上了参数冒号参数%1 ,因为有了这个冒号参数%1 ,自己运行自己时这个第一行被略过了 ,只执行第一行之后的 ,执行完后会回到之前自己运行自己那个地方 ,继续执行剩下的&exit ,执行完后就退出了
上面这个过程简单来讲就是获取权限后重新运行(自己)
至于
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\%%i" /v "Start" /t REG_DWORD /d 4 /f
sc stop %%i & sc config %%i start= DISABLED
这两行 ,大概是命令修改的注册表位置不一样吧??? 比如ControlSet001和ControlSet002
发表于 2025-8-4 08:10:01 | 显示全部楼层
回复 3# Five66


修改注册表,系统重启后生效;
sc设置服务,马上生效。
 楼主| 发表于 2025-8-4 16:15:09 | 显示全部楼层
本帖最后由 ycfnxwl 于 2025-8-4 16:16 编辑

回复 3# Five66

测试了一下不加&exit的情况
%1(cmd.exe /c %0 : )
.......
下面的代码会被执行两次,就是说执行完代码返回到冒号这边时若没有exit命令,还会继续执行一次下面的代码;
若不加 cmd.exe /c
%1( %0 : )
......
下面的代码只执行一次,返回到冒号这边时不管有没有exit命令都会退出,不会再执行下面的代码,这是为什么呢?
发表于 2025-8-4 18:38:36 | 显示全部楼层
回复 4# Batcher


    啊 ,的确如此
发表于 2025-8-4 18:45:36 | 显示全部楼层
回复 5# ycfnxwl


    cmd.exe /c会新开一个进程 ,新进程执行结束后返回旧进程继续运行
没有cmd.exe /c 运行bat文件时不会新开一个进程 ,执行完%1( %0 : )这行后就随着其间执行完%0后的退出而一起退出了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:11 , Processed in 0.018917 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表