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

[原创] [分享]批处理学习笔记

[复制链接]
发表于 2011-3-31 19:59:06 | 显示全部楼层
比阿凡达还牛!!!顶一下,支持
发表于 2011-3-31 23:09:59 | 显示全部楼层
新手来学了,谢谢了
发表于 2011-6-23 20:29:33 | 显示全部楼层
本帖最后由 cjiabing 于 2011-6-23 21:23 编辑
  1. @echo off
  2. ::零字节
  3. cd.>1.txt
  4. cd.>2.txt
  5. cd.>3.txt
  6. pause
  7. ::使用一个cd命令创建多个文件,命令格式:cd,n>Name1.txt,n-1>Name2.txt,n-2>Name3.txt,n-3……
  8. ::注意:cd后面以及各个文件名之间跟的是点号“,”,重定向符“>”前跟的是数字,这个数字第一个是要创建的文件总数,依次递减,直至1。
  9. cd,4>111.txt,3>222.txt,2>333.txt,1>444.txt
  10. cd,3>121.txt,2>122.txt,1>123.txt
  11. pause
  12. ::显然不是零字节,并且,似乎与句柄那类东西有关,速度受到一定程度的影响,而且成功率有可能无法保证,比如下例:
  13. cd,5>4321.txt,4>4321.txt,3>4322.txt,2>4323.txt,1>4324.txt>nul 2>nul
  14. cd,6>a.txt,5>b.txt,4>c.txt,3>d.txt,2>e.txt,1>f.txt
  15. ::不能重复利用,无法覆盖原来的数据。
  16. pause
  17. del 4321.txt,4321.txt,4322.txt,4323.txt,4324.txt,121.txt,122.txt,123.txt,111.txt,222.txt,333.txt,444.txt,3.txt,2.txt,1.txt,e.txt,a.txt,b.txt,c.txt,d.txt,f.txt
复制代码
楼主的绝招真多啊!~学学点。不过那个同时创建多个文件的似乎无效:
1、只创建得一两个,2、速度慢,出错。
我研究了一下,提出以下方案,大家看看怎么样!~
 楼主| 发表于 2011-6-23 22:30:05 | 显示全部楼层
18# cjiabing

成功率不高的情况是这样吗?:

  1. cd.>1.txt 3>2.txt
  2. cd.>2.txt
复制代码
那是因为句柄会占用文件,解决方法是避开句柄备份(比如只用句柄 1、2、5、7、9 或者 1、4、6、8),或者将指向文件的句柄关闭,更好的办法是先“打预防针”,见下面三例:

  1. cd.>1.txt 2>2.txt 5>3.txt 7>4.txt 9>5.txt
  2. cd.>1.txt 2>2.txt 5>3.txt 7>4.txt 9>5.txt
  3. ::避开句柄备份避免出错

复制代码

  1. cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt
  2. cd.>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
  3. cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt
  4. ::将指向文件的句柄关闭
复制代码


我认为最好的解决办法应该是:

  1. cd.>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
  2. cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt
  3. cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt
  4. ::通过句柄备份,使除9以外所有句柄均不为空,也就无法再进行可操作的句柄备份了,不过因为句柄9的特殊性,日后生成文件时只能用1~8,不宜用句柄9,否则仍然存在发生句柄备份的可能
复制代码
发表于 2011-6-23 23:18:18 | 显示全部楼层
19# zm900612
不懂得能否重复利用,我那个放到一个循环里,结果它就不起作用了,搞得我都没信心了。
发表于 2011-6-24 13:47:39 | 显示全部楼层
楼主辛苦了,顶.
 楼主| 发表于 2011-6-24 14:05:51 | 显示全部楼层
20# cjiabing
可以的:
  1. @echo off>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
  2. ::先使句柄不为“真空”,也就避免了后面发生句柄备份的可能,不过除非特殊情况,不建议把句柄1、2也用上
  3. for /l %%a in (1 1 8) do (
  4.    for /l %%b in (1 1 8) do echo>%%b.txt %%a%%b
  5.    rem 生成8个txt文本,接下来用句柄清空
  6.    pause
  7.    cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt
  8.    rem 因为此时句柄1~8已经不为空,所以均可重复用,唯独句柄9最好别用
  9. )
  10. pause
复制代码
发表于 2011-7-19 15:20:39 | 显示全部楼层
很好  对于我这个新手来说是个很好的东西 感谢楼主的笔记
发表于 2011-7-19 22:31:05 | 显示全部楼层
楼主的笔记对我这个新手很有用  先收藏   在学到那里的时候   慢慢研究
发表于 2011-8-12 15:10:40 | 显示全部楼层
忍不住要赞一个
发表于 2024-10-21 12:56:49 | 显示全部楼层
感谢楼主,点赞~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:31 , Processed in 0.012050 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表