返回列表 发帖
@echo off
call :n
calc
exit /b
-------------------------------------------------------------
:n
setlocal&set m="%~f0"
for /f "usebackq" %%a in (%m%)do if defined f (set n=%%a)else if "%%a"=="::n" set f=1
set/an+=1&if %n% geq 1 echo 已经运行了%n%次!&pause
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
::n
0COPY

TOP

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

TOP

@echo off
if not exist time echo 0 >time
set/p a=<time
set/a a+=1
echo 这是第%a%次运行程序
echo %a% >time
pauseCOPY

[ 本帖最后由 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

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

TOP

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

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

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

TOP

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

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

已经改过了,请再看看
@echo off
if not exist time echo 0 >time
set/p a=<time
set/a a+=1
echo 这是第%a%次运行程序
echo %a% >time
pauseCOPY

TOP

回39楼 shqf

这样算吗?
@echo off
set "str=echo 这里是中间那段"
for /f "delims=" %%a in ('type %0') do (
   if not defined god (
      set "god=hell"
      >%0 echo %%a
   ) else (
      if not "%%a"=="%str%" (
         >>%0 echo %%a
      ) else (
         >>%0 echo echo 这里是已经改写的中间那段
      )
   )
)
echo 这里是中间那段
pauseCOPY

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
[url=][/url]

TOP

@echo off
for /f "skip=9" %%i in ('type %0') do set a=%%i
>>%0 echo 1
if "" EQU "%a%" (pause &goto :eof)
for /f %%i in ('echo %0') do set b=%%~zi
set /a c=(%b%-%a%)/3-80
echo 程序已经运行了%c%
pause&goto :eof
::此行号为skip所用
COPY

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


@echo off
for /f "skip=9" %%i in ('type %0') do set a=%%i
>>%0 echo 1
if "" EQU "%a%" (pause &goto :eof)
for %%i in (%0) do set b=%%~zi
set /a c=(%b%-%a%)/3-76
echo 程序已经运行了%c%
pause&goto :eof
::此行号为skip所用COPY

应该是这个 , 上面的错了


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

TOP

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

TOP

返回列表