Board logo

标题: [其他] 批处理删除自身代码最后一行 [打印本页]

作者: defanive    时间: 2011-9-7 01:59     标题: 批处理删除自身代码最后一行

  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的工作原理和预处理机制,还可以做到每次运行代码变异的效果
作者: 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 就够了...
  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. ::运行删除末行
复制代码

作者: 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