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

[其他] 批处理删除自身代码最后一行

[复制链接]
发表于 2011-9-7 01:59:38 | 显示全部楼层 |阅读模式
  1. @echo off
  2. for /f %%a in ('^(type "%~f0"^&echo;x^)^|find /c /v ""') do set "nLine=%%a"
  3. setlocal enabledelayedexpansion
  4. (for /l %%a in (2,1,%nLine%) do set /p Line_%%a=&set "Exec=!Exec!&echo;^!Line_%%a^!")<"%~f0"
  5. >"%~f0" (type nul%Exec%)
  6. pause
  7. goto :eof
  8. REM 这是最后一行,运行后会被清空
复制代码
这实际上是一种修改批处理自身但不影响继续运行的方法
只要理解CMD的工作原理和预处理机制,还可以做到每次运行代码变异的效果

评分

参与人数 1技术 +1 收起 理由
wc726842270 + 1 学习了

查看全部评分

发表于 2011-9-7 13:27:04 | 显示全部楼层
“type nul%Exec%”是指用NUL打开%EXEC%?
发表于 2011-9-7 13:32:06 | 显示全部楼层
你应该增加一句“运行中”,否则让人误解。
 楼主| 发表于 2011-9-7 13:58:21 | 显示全部楼层
回复 2# wc726842270
用set看一下exec的值就知道了,type nul纯粹打酱油
发表于 2011-9-8 13:49:00 | 显示全部楼层
话说一个 for 就够了...
  1. @echo off
  2. for /f "delims=" %%a in (%~s0) do (
  3.    setlocal enabledelayedexpansion
  4.    if defined last (echo>>%0 !last!) else del %0
  5.    endlocal
  6.    set last=%%a
  7. )
  8. pause
  9. ::运行删除末行
复制代码

评分

参与人数 2技术 +2 收起 理由
x9tiancmd + 1 精典
defanive + 1 好!

查看全部评分

发表于 2011-10-4 16:06:07 | 显示全部楼层
顶。   !~
总有些人的想法无法超越的。  厉害、
发表于 2011-10-4 18:44:50 | 显示全部楼层
回复 7# 408057433


你没看懂楼主在说什么,多看几遍吧
 楼主| 发表于 2011-10-5 12:35:14 | 显示全部楼层
其实这个代码还有一个好处,在任何时候想要重写最后一行只需要调用>"%~f0" (type nul%Exec%)就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 01:19 , Processed in 0.010686 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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