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

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

  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

评分人数

第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

“type nul%Exec%”是指用NUL打开%EXEC%?
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

你应该增加一句“运行中”,否则让人误解。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 2# wc726842270
用set看一下exec的值就知道了,type nul纯粹打酱油
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

话说一个 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

评分人数

TOP

顶。   !~
总有些人的想法无法超越的。  厉害、
莫求昨天无悔,但愿今日无愧。

TOP

回复 7# 408057433


你没看懂楼主在说什么,多看几遍吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

其实这个代码还有一个好处,在任何时候想要重写最后一行只需要调用>"%~f0" (type nul%Exec%)就可以了
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

返回列表