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

[文本处理] 批处理怎样定时写入一行到第一行并删除最后一行?

A。TXT    B。TXT  2个文本
A内容是:
<a href="/xuexi.html">xuexi</a>&nbsp;
<a href="/xx.html">xx</a>&nbsp;


B内容是:
<a href="/1.html">1</a>&nbsp;
<a href="/2.html">2</a>&nbsp;
<a href="/3.html">3</a>&nbsp;
<a href="/4.html">4</a>&nbsp;

每隔N 秒  从B文件内    随机拿一条数据    放到 A文件的第一行  并删除A的最后一行
如取的是第3行 就得到A:
<a href="/3.html">3</a>&nbsp;
<a href="/xuexi.html">xuexi</a>&nbsp;

望知道的朋友帮忙 谢谢

楼主没有说明以下情况:文本的编码类型,文本内容中的敏感字符
所以以下代码按文本为ANSI编码处理,内容中不含敏感字符:
  1. @echo off&setlocal enableDelayedExpansion
  2. for /f "delims=" %%a in (B.txt) do set/a a+=1&set #!a!=%%a
  3. :A
  4. set c=&set/a b=%random%%%a+1
  5. (echo;!#%b%!
  6. for /f "delims=" %%a in (A.txt) do (
  7. if defined c echo;!c!
  8. set "c=%%a"
  9. )
  10. )>$
  11. move $ A.txt
  12. >nul ping 127.1 -n 5
  13. goto:A
复制代码
>nul ping 127.1 -n 5用来设置延迟等待时间
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

2# hanyeguxing


很好的代码   谢谢   GBK正常   楼上的朋友考虑很周到
1.   不过,utf-8的代码 如何才能实现呢?

2.    如果在包括其他未知特殊符号的情况下呢?   GBK 和utf-8

希望能再帮我谢谢

TOP

utf-8简直是个魔咒...

TOP

3# w1983912


VBS版文件编码识别、转换工具(GB2312、UTF-8、Unicode、BIG5)
http://bbs.bathome.net/thread-3900-1-1.html

VBS版无BOM的UTF-8转ANSI
http://bbs.bathome.net/viewthread.php?tid=8299#pid54514
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

batcher真敬业啊,整天都在论坛,不歇息的

TOP

能解释一下二楼代码中删除A文件最后一行的处理机制吗?谢谢!

TOP

没有删除,经常用“move 临时文件 目标文件”来达到“del 目标文件&ren 临时文件 目标文件”的效果,省时省力效果好。

TOP

没有删除,经常用“move 临时文件 目标文件”来达到“del 目标文件&ren 临时文件 目标文件”的效果,省时省力效果好。
zm900612 发表于 2011-3-31 15:35

回楼上的:
但是它在写入$这个文件时就己经是少了一行了,这是如何做到的?(我测试时有打开$这个文件看过)

TOP

哦,我会错意了...
他是先输出变量c,把整行内容都设为变量c,这样变量c始终是上一行的内容:
        if defined c echo;!c!
        set "c=%%a"

TOP

哦,谢谢zm900612的耐心解答,但我貌似还不大明手白。
还有小声说一句,能不能换个头像?呵呵......

TOP

其实那段代码有bug,没考虑空行...不过可以给c变量的内容加个前缀,再用变量偏移简单解决
这头像真的那么恶心吗...好吧,那我换个吧

TOP

哦,了解。空行和特殊字符都可以处理吗?如果zm900612兄方便又有空的话,能否就修改一下,重新搞个代码?谢谢!

TOP

本帖最后由 zm900612 于 2011-3-31 17:17 编辑

其实不需要伤筋动骨,只是一个忽略A.txt空行的小bug,修正一下就好:
  1. @echo off&setlocal enableDelayedExpansion
  2. for /f "delims=" %%a in (B.txt) do set/a a+=1&set #!a!=@%%a
  3. :A
  4. set c=&set/a b=%random%%%a+1
  5. (echo;!#%b%:~1!
  6. for /f "delims=" %%a in (A.txt) do (
  7.         if defined c echo;!c:~1!
  8.         set "c=@%%a"
  9. )
  10. )>$
  11. move $ A.txt
  12. >nul ping 127.1 -n 5
  13. goto:A
复制代码
特殊字符的问题没什么好办法,因为%%a的预处理是在变量延迟之前的,所以如果%%a的值中含!会出错,要避免这个bug需要以严重降低效率为代价,所以将就吧。

TOP

非常感谢!......

TOP

返回列表