标题: [其他] 批处理删除自身代码最后一行 [打印本页]
作者: defanive 时间: 2011-9-7 01:59 标题: 批处理删除自身代码最后一行
- @echo off
- for /f %%a in ('^(type "%~f0"^&echo;x^)^|find /c /v ""') do set "nLine=%%a"
- setlocal enabledelayedexpansion
- (for /l %%a in (2,1,%nLine%) do set /p Line_%%a=&set "Exec=!Exec!&echo;^!Line_%%a^!")<"%~f0"
- >"%~f0" (type nul%Exec%)
- pause
- goto :eof
- REM 这是最后一行,运行后会被清空
复制代码
这实际上是一种修改批处理自身但不影响继续运行的方法
只要理解CMD的工作原理和预处理机制,还可以做到每次运行代码变异的效果
作者: wc726842270 时间: 2011-9-7 13:27
“type nul%Exec%”是指用NUL打开%EXEC%?
作者: cjiabing 时间: 2011-9-7 13:32
你应该增加一句“运行中”,否则让人误解。
作者: defanive 时间: 2011-9-7 13:58
回复 2# wc726842270
用set看一下exec的值就知道了,type nul纯粹打酱油
作者: CrLf 时间: 2011-9-8 13:49
话说一个 for 就够了...- @echo off
- for /f "delims=" %%a in (%~s0) do (
- setlocal enabledelayedexpansion
- if defined last (echo>>%0 !last!) else del %0
- endlocal
- set last=%%a
- )
- pause
- ::运行删除末行
复制代码
作者: guaiwu 时间: 2011-10-4 16:06
顶。 !~
总有些人的想法无法超越的。 厉害、
作者: Batcher 时间: 2011-10-4 18:44
回复 7# 408057433
你没看懂楼主在说什么,多看几遍吧
作者: defanive 时间: 2011-10-5 12:35
其实这个代码还有一个好处,在任何时候想要重写最后一行只需要调用>"%~f0" (type nul%Exec%)就可以了
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |