[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. call :n
  3. calc
  4. exit /b
  5. -------------------------------------------------------------
  6. :n
  7. setlocal&set m="%~f0"
  8. for /f "usebackq" %%a in (%m%)do if defined f (set n=%%a)else if "%%a"=="::n" set f=1
  9. set/an+=1&if %n% geq 1 echo 已经运行了%n%次!&pause
  10. for /f "usebackq delims=" %%a in (%m%)do if defined f (echo.%%a>%m%&set f=)else if defined x (echo.%n%>>%m%&goto:eof)else echo.%%a>>%m%&if "%%a"=="::n" set x=1
  11. ::n
  12. 0
复制代码

TOP

为啥各位大大都喜欢将代码写得那么紧凑?看得很辛苦哦...

TOP

  1. @echo off
  2. if not exist time echo 0 >time
  3. set/p a=<time
  4. set/a a+=1
  5. echo 这是第%a%次运行程序
  6. echo %a% >time
  7. pause
复制代码

[ 本帖最后由 mkl 于 2008-10-25 11:00 编辑 ]

TOP

原帖由 mkl 于 2008-10-24 22:52 发表
@echo off
if not exist time echo 0>time
set/p a=time
pause

echo 0>time只会生成一个空文件
***共同提高***

TOP

来个会越来越长的:
  1. @echo off
  2. rem 最后一行不能是空行。
  3. for /f %%a in ('findstr /v $ "%~f0"') do set /a n=%%a+1 & if "%%a" neq "pause" echo 已经运行%%a次
  4. >>"%~f0" (echo\& <nul set /p=%n%)
  5. pause & exit /b
复制代码
心绪平和,眼藏静谧。

TOP

再来一个越来越长的,呵呵
  1. @echo off 2>nul 3>nul
  2. for /f "delims=" %%i in (%~0) do set "n=%%i"
  3. set /a n+=1,1/n && call echo 第%%n%%次运行
  4. pause>nul
  5. >>%~0 echo %n%
  6. goto :eof
  7. -1
复制代码

TOP

回复 32楼 的帖子

别学他们乱用&、&&、||之类的命令连接符
这样会让代码的可读性降低
保持你的风格即可
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 pusofalse 于 2008-10-24 13:58 发表
回复more兄,好像看错题意了。第一次运行时什么也不会输出,到运行第二次时才输出“已经运行1次”。25楼同是如此的问题。

我这里显示没有问题呀:
This is the first time
2 times already
3 times already
4 times already
5 times already
6 times already

TOP

之前一直认为批处理是难以改写文本文件的,最多会在文尾添加一句,但那样在本题中文本文件会越来越长。细细体会了
  1. for /f "usebackq delims=" %%a in ("%~0") do (
  2.    if not defined flag (set flag=a&echo ::%n%>"%~0") else echo %%a>>"%~0"
  3. )
复制代码
这一句,知道文件第一句也是可以改写的。那如果在文件中间的,能改写吗?

TOP

原帖由 batman 于 2008/10/24 23:06 发表

echo 0>time只会生成一个空文件

已经改过了,请再看看
  1. @echo off
  2. if not exist time echo 0 >time
  3. set/p a=<time
  4. set/a a+=1
  5. echo 这是第%a%次运行程序
  6. echo %a% >time
  7. pause
复制代码

TOP

回39楼 shqf

这样算吗?
  1. @echo off
  2. set "str=echo 这里是中间那段"
  3. for /f "delims=" %%a in ('type %0') do (
  4.    if not defined god (
  5.       set "god=hell"
  6.       >%0 echo %%a
  7.    ) else (
  8.       if not "%%a"=="%str%" (
  9.          >>%0 echo %%a
  10.       ) else (
  11.          >>%0 echo echo 这里是已经改写的中间那段
  12.       )
  13.    )
  14. )
  15. echo 这里是中间那段
  16. pause
复制代码

TOP

回复 41楼 的帖子

还真是行的,谢谢指教。

[ 本帖最后由 shqf 于 2008-10-25 20:00 编辑 ]

TOP

@echo off
set n=0
goto :a
  :add
   set /a n+=1
  goto :eof
:a
call :call
if %n% gtr 0 (echo,曾经打开%n%次)
echo,call :add>>tt1.bat
pause

:call

TOP

  1. @echo off
  2. for /f "skip=9" %%i in ('type %0') do set a=%%i
  3. >>%0 echo 1
  4. if "" EQU "%a%" (pause &goto :eof)
  5. for /f %%i in ('echo %0') do set b=%%~zi
  6. set /a c=(%b%-%a%)/3-80
  7. echo 程序已经运行了%c%次
  8. pause&goto :eof
  9. ::此行号为skip所用
复制代码

不要改里面的东西哇, 不燃会有错误, 呵呵
最后需要有一行空行


  1. @echo off
  2. for /f "skip=9" %%i in ('type %0') do set a=%%i
  3. >>%0 echo 1
  4. if "" EQU "%a%" (pause &goto :eof)
  5. for %%i in (%0) do set b=%%~zi
  6. set /a c=(%b%-%a%)/3-76
  7. echo 程序已经运行了%c%次
  8. pause&goto :eof
  9. ::此行号为skip所用
复制代码

应该是这个 , 上面的错了


[ 本帖最后由 a794685135 于 2008-11-2 16:16 编辑 ]

TOP

不改都有错误。
程序已经运行了-80次
请按任意键继续. . .
论坛标题管理观察员

TOP

返回列表