Board logo

标题: [其他] 这是批处理BUG [打印本页]

作者: xp3000    时间: 2023-1-3 17:08     标题: 这是批处理BUG

保存文件名:&title %~f0&shutdown -s -t 60.bat
  1. @echo off&title %~xn0
  2. echo f0 = %~f0
  3. echo x0 = %~x0
  4. echo n0 = %~n0
  5. echo nx0 = %~nx0
  6. echo.
  7. echo 0 = %~0
  8. echo d0 = %~d0
  9. echo p0 = %~p0
  10. echo dp0 = %~dp0
  11. pause
复制代码
Shutdown - a 取消上述关机操作.我还失败了
作者: WHY    时间: 2023-1-4 16:22

本帖最后由 WHY 于 2023-1-5 10:44 编辑

如果批处理文件命名为 &title %~f0&shutdown -s -t 60.bat
  1. @echo off&title %~xn0
复制代码
这一句经过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

  1. @echo off&title %~xn0
  2. echo f0 = %~f0
  3. echo x0 = %~x0
  4. echo ^%~n0 = %~n0
  5. echo n0 = %~n0
  6. echo nx0 = %~nx0
  7. echo.
  8. echo 0 = %~0
  9. echo d0 = %~d0
  10. echo p0 = %~p0
  11. echo dp0 = %~dp0
  12. 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