标题: [其他] 这是批处理BUG [打印本页]
作者: xp3000 时间: 2023-1-3 17:08 标题: 这是批处理BUG
保存文件名:&title %~f0&shutdown -s -t 60.bat- @echo off&title %~xn0
-
- echo f0 = %~f0
-
- echo x0 = %~x0
-
- echo n0 = %~n0
-
- echo nx0 = %~nx0
-
- echo.
-
- echo 0 = %~0
-
- echo d0 = %~d0
-
- echo p0 = %~p0
-
- echo dp0 = %~dp0
-
- pause
复制代码
Shutdown - a 取消上述关机操作.我还失败了
作者: WHY 时间: 2023-1-4 16:22
本帖最后由 WHY 于 2023-1-5 10:44 编辑
如果批处理文件命名为 &title %~f0&shutdown -s -t 60.bat复制代码
这一句经过CMD预处理(变量展开)后:
@echo off&title &title %~f0&shutdown -s -t 60.bat
红色部分是 %~xn0 扩展后的值。
然后CMD会进行词法、语法解析,最后面的.bat语法有错(60.bat不是有效数字),但CMD会忽略这个错误。
它会依次执行:
@echo off
title
title %~f0
shutdown -s -t 60
最终,ShutDown命令以60秒倒计时执行。
养成一个好习惯,不要使用CMD内部或外部命令作为批处理文件名,脚本里面类似"%~f0"的变量用引号包裹
作者: xp3000 时间: 2023-1-4 19:11
- @echo off&title %~xn0
- echo f0 = %~f0
- echo x0 = %~x0
- echo ^%~n0 = %~n0
- echo n0 = %~n0
- echo nx0 = %~nx0
- echo.
- echo 0 = %~0
- echo d0 = %~d0
- echo p0 = %~p0
- echo dp0 = %~dp0
- pause
复制代码
重命名下面文件名:
&title %~f0&echo..bat
&title %~f0&cmd.bat
&echo..bat
echo..bat
这个BUG主要是造成变量值不一样
作者: WHY 时间: 2023-1-4 20:21
2楼的描述你可能还是没有理解。
万事皆有因,万事皆有解。
不要随随便便就下一个BUG的结论
作者: xp3000 时间: 2023-1-5 09:02
一直把%~f0当作批处理自身文件名在用,看来是不对的,
都是在文件名头部和中间加&和命令弄的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |