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

[文本处理] 批处理按段落输出

文/hi.baidu.com/523066680
看了一些批处理蠕虫的代码,那一长串的echo,  和>>  和偶尔出现的转义字符^  ……感到无奈
以下是一个简单例子(并不体现优势),可以不用多次echo   将读取文本段落的部分代码作为涵数调用。
指定段落的开头和结尾的标志对应生成的文件名,当重定向多个段落和文件时,就可以用for 结合call  更体现优势
也只有在文本内容很多时 或者 分多个段落时 才能体现代码的优
  1. echo off
  2. call :setup test.bat
  3. exit
  4. :setup
  5. set "act="
  6. for /f "tokens=* eol=" %%a in (%~nx0) do (
  7.   if "%%a"=="::%* end" (goto :eof)
  8.   if defined act echo,%%a>>"%*"
  9.   if "%%a"=="::%*" errcommand>"%*" 2>nul&set act=act
  10. )
  11. ::test.bat
  12. echo,%%!!
  13. pause
  14. ::test.bat end
复制代码


这个代码并不当做原创发表  我怕原创的东西不会得到普及。(说错了就请见谅)
而且应该很多人自己也做得出这个东西,我只是希望以后看到一些代码的时候 不会出现一长串的echo, >>
这样的体力活

也可以讨论讨论 这也许不是最好的方法 我只是开个头。

多段落分段重定向还有很多用途呢 比如说 可以把自己的作品全部放在一个批处理里面 就像打包一样。甚至可以设置由用户选择生成哪个批处理。

[ 本帖最后由 523066680 于 2008-11-22 16:16 编辑 ]

下面是我对自己其中两个作品的例子

@echo off
call :setup sqr1-99.bat
call :setup RandDot.bat
exit
:setup
set "act="
for /f "tokens=* eol=" %%a in (%~nx0) do (
  if "%%a"=="::%* end" (goto :eof)
  if defined act echo,%%a>>"%*"
  if "%%a"=="::%*" errcommand>"%*" 2>nul&set act=act
)
::RandDot.bat
@echo off
title made by hi.baidu.com/523066680
setlocal enabledelayedexpansion
mode con cols=60 lines=30
for /l %%a in (1,1,60) do (set space= !space!)
set /a line=14,col=29
:loop
set /a linenext=%random%%%30
set /a colnext=%random%%%60
for %%a in (line col) do (
   if !%%a! lss !%%anext! (set %%aadd=+) else (set %%aadd=-)
)
   :loop-1
    if %line% neq %linenext% (
        set /a line%lineadd%=1
    ) else (
        set /a col%coladd%=1
    )
    cls
    for /l %%a in (1,1,%line%) do echo,
    echo,!space:~0,%col%!*
    ping -n 1 127.1>nul
   if %col% neq %colnext% (goto :loop-1)
goto :loop
::RandDot.bat end
::\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
::sqr1-99.bat
@echo off
rem 思路来自数学必修5 逐位计算,这一版本made by hi.baidu.com/523066680
:action
set /p input="(1-99):"
if "%input%"=="" goto :action
set /a a=0,n=0
:a
set /a a+=1,a1=0
    :a1
     set /a a1+=1,test=(n*10+a1)*(n*10+a1)
     if %test% equ %input% (echo %a1% &goto :end)
    if %test% lss %input% (goto :a1)
set /a n=n*10+a1-1,input*=100
if %a% lss 4 goto :a
echo %n:~0,1%.%n:~1%
pause>nul
:end
echo,&set input=
goto :action
::sqr1-99.bat end

[ 本帖最后由 523066680 于 2008-11-16 09:18 编辑 ]
1

评分人数

TOP

小伙学理果真没错。加油!
心绪平和,眼藏静谧。

TOP

本版规则
1、求代码、寻求代码解释、探讨代码得失的帖子均可发在本版块,其余话题禁止在本版讨论;
2、求助时,务必在顶楼一次性把问题交代清楚;若文字难以表述,请配图说明,或是上传附件;但是,一切操作应从节约论坛资源的角度出发,能文字说明清楚的就无需再发图片,小图能说明问题的尽量不截全图,在不影响效果的前提下尽量压缩图片及附件;
3、所发代码若不止一行,请务必用code标记把代码部分首尾括起来,以便他人复制;
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4楼 的帖子

下次一定 因为在网巴发的太紧张了……so ……

TOP

返回列表