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

[其他] 这是批处理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-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"的变量用引号包裹

TOP

  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主要是造成变量值不一样

TOP

2楼的描述你可能还是没有理解。
万事皆有因,万事皆有解。
不要随随便便就下一个BUG的结论
1

评分人数

TOP

一直把%~f0当作批处理自身文件名在用,看来是不对的,
都是在文件名头部和中间加&和命令弄的

TOP

返回列表