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

[其他] 这是批处理BUG

[复制链接]
发表于 2023-1-3 17:08:09 | 显示全部楼层 |阅读模式
保存文件名:&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 取消上述关机操作.我还失败了
发表于 2023-1-4 16:22:03 | 显示全部楼层
本帖最后由 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"的变量用引号包裹
 楼主| 发表于 2023-1-4 19:11:20 | 显示全部楼层
  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主要是造成变量值不一样
发表于 2023-1-4 20:21:32 | 显示全部楼层
2楼的描述你可能还是没有理解。
万事皆有因,万事皆有解。
不要随随便便就下一个BUG的结论

评分

参与人数 1PB +2 收起 理由
Batcher + 2 赞同!

查看全部评分

 楼主| 发表于 2023-1-5 09:02:36 | 显示全部楼层
一直把%~f0当作批处理自身文件名在用,看来是不对的,
都是在文件名头部和中间加&和命令弄的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 06:38 , Processed in 0.020435 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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