标题: [原创] [分享]批处理学习笔记 [打印本页]
作者: CrLf 时间: 2011-3-30 12:52 标题: [分享]批处理学习笔记
这篇笔记是我对批处理学习的一些总结,能在系统帮助里找到的内容我就不写了,太偏门的也不写,只写些个人感觉很好用的技巧,大部分属于整理
有点长,为了避免以后更新时超过字数,决定分楼发帖,从2楼开始。
最后更新:2011/6/23
链接: https://pan.baidu.com/s/16l7nf7CRyKz6fThroWmvhg 提取码: 2tap
作者: CrLf 时间: 2011-3-30 12:53
本帖最后由 zm900612 于 2011-6-12 12:48 编辑
一、set 篇:
1、set(无开关)- set .=test
- set.
- ::若一个变量以:\.这三个与路径相关的符号开头,用set查看以该字符打头的变量时可以省去一个空格。
复制代码
- echo %tmp:*\=%
- ::显示tmp变量第一个\之后的部分,其余变量替换与变量偏移太简单不解释
复制代码
2、set /p 变量名=注释<设备名
当设备名为文件时,因为文件中换行符与回车符伴生,所以只取文件第一行作为var变量的内容,但是不超过1024字节;而当设备名为nul或者com3时,只显示不换行的注释,这种情况下可以省略变量名(如:set /p=Hello World<nul)。
3、set /a,最具技巧的命令之一- set /a n=1,m=2
- ::同时把不同数值分别赋予两个变量
复制代码
- set /a a=b=c=d=e=f=1
- ::用一条算式为多个变量同时赋值
复制代码
- set /a "1/n" 2>nul||echo 变量n非纯数字或为零
- ::利用分母不能为0的特征,用set判断一个变量是否为非零纯数字
复制代码
- set n=1
- set /a "n=!!123|!!234&!!0"
- ::位运算,!、^、|和&常用于布尔运算,而逻辑位移常用于二进制运算(>>还可判断数值是否为负,见下例)
复制代码
- set /a n=-100,"1/(-100>>31)"||echo 变量n为负数
- ::顺应cmd中的正负数存储特点,可以用逻辑位移实现判断正负数的“布尔运算”,可以衍生出繁多的算法,比如稍加改动就可以比较两数甚至多个数的大小
复制代码
- set /a n=~-100
- ::利用~将所有二进制的1、0逆转,负号在后或在前配合可以实现简单加1或减1,这个技巧主要用来减少括号的使用,因为~号与负号的优先级都是高于算数运算符的
复制代码
- set /a test=%test:~5,1%-0
- ::可以避免%test:~5,1%为空时出错的情况
复制代码
- set /a 十进制=0x十六进制,十进制=0八进制
- ::快速将十六进制与八进制数转为十进制,可惜没有二进制...
复制代码
- :loop
- set /a n+=1001
- echo %n:~-3%
- goto loop
- ::这比常规的补位方法更优越
复制代码
- for %%a in (test 123 ABC test @#$ 123) do set /a ".%%a+=1"
- set .|findstr /v /e "=1"
- ::经典的获取字符串的重复次数的方案
复制代码
作者: CrLf 时间: 2011-3-30 12:53
本帖最后由 zm900612 于 2011-6-24 16:08 编辑
二、for 篇:
这是批处理中最强的内部命令,没有之一!
1、for(无开关)- for %%a in (c:\*.*) do echo %%a
- ::显示C盘根目录下所有非隐藏、非系统属性文件
复制代码
- for %%a in (.\..) do echo %%~nxa
- ::显示上一级目录的文件夹名
复制代码
- set str=123,234,345
- set str=%str:,=\%
- for %%a in (%str%\..) do echo %%~nxa
- ::用前一个技巧,巧取倒数第二段字符串,与for /f "delims=\"相映成趣
复制代码
- for %%a in (*.txt) do (
- for /f "useback delims=" %%b in ("%%a") do (
- set str=%%b
- for %%c in ("!str:分隔符=" "!") do (
- for /f "tokens=1*" %%d in (%%c) do echo %%~d
- )
- )
- )
- ::不带参数的for与for /f配合,威力极大,仅举此一例
复制代码
- for %%a in (123) do for %%a in (234) do for %%a in (345) do echo %%a
- ::其实如果只读取最后一层for的参数,即使多层for嵌套也可以使用同样的参数,比如%%a
复制代码
- for %%z in (!tmp!) do echo !%%z!
- ::目前已知的摆脱call实现多层变量嵌套的最好方法,不少人用
复制代码
2、for /l- for /l %%a in () do echo
- ::无限循环,步数为0也是一样的效果,但是没这个简洁
复制代码
- for /l %%a in (-4 1) do echo %%a
- ::for /l中的三项参数从左至右的三位分别是初始值、步数、终止点,当用户给定的数量不足时,将按从右至左的顺序把不足的一项赋为0
复制代码
3、for /d /r- for /r /d %%a in (*) do echo %%a
- ::可以遍历所有子文件夹,之所以可以联用r开关和d开关是因为它们的参数有交集,l开关和f开关就不行了。
复制代码
4、for /f
for /f本身的技巧并不是特别多,它的优势是能够将其他命令的输出作为输入来分析,所以for /f可以说是当之无愧的内部命令之王- for /f "tokens=* delims=0123" %%a in ("0000123456") do echo %%a
- ::去除前缀的n个字符
复制代码
- for /f "skip=99" %%a in (1.txt) do echo 1.txt至少100行
- ::以前看到某版主写的,印象颇深。
复制代码
- for /l %%a in (1 1 10) do (
- for /f "tokens=1,2* delims=\" %%a in ("!tmp!") do (
- for %%c in (%%a %%b) do echo %%c
- set tmp=%%c
- )
- )
- ::将tokens的取值范围无限拓展
复制代码
- set tmp=123=234=345=456
- for /l %%a in (1 1 40) do (
- for /f "tokens=1,2* delims==" %%a in ("!tmp!") do (
- set str=!str!,%%a,%%b
- set tmp=%%c
- )
- )
- echo %str:~1%
- ::有时候set变量替换是无法替换一些特殊字符的,此时可以用for /f处理
复制代码
- set test=d:\test\
- for %%a in (test.*) do (
- if "%%~za" neq "%%~z$test:a" replace /p /u "%%a" "%%~dp$test:a"
- )
- ::判断当前目录下以test为名的文件是否在d:\test\文件夹下存在同名文件,如果存在且大小不同、修改日期更早,则替换之,否则不做处理。for帮助信息中的“%%~dp$path:a”参数似乎没见人用过,虽然它的适用范围很狭隘,但是特定的情况下不妨一试。
复制代码
- setlocal enabledelayedexpansion
- set t=tmp
- set @=t
- for /f %%a in ('echo !%@%!') do echo !%%a!
- ::另一种三层嵌套方法,其实不实用。
复制代码
作者: CrLf 时间: 2011-3-30 12:53
本帖最后由 zm900612 于 2011-6-24 16:09 编辑
三、findstr 篇
我最钟爱的命令,可惜外部命令的启动速度太慢,所以实际运用时较少露面。- findstr /s /m .* *.*
- ::其实findstr也是一个dir,虽然比dir慢些,却多了查找文件内容的功能
复制代码
- findstr /n .* 1.txt|findstr "^5000:"
- ::非常实用的取指定行的方法,配合正则可以取指定范围之内的行
复制代码
- set /p n=请输入数字或大小写字母
- (echo !n!)|findstr /i "[0-9a-Z]"&&echo 输入有误!
- ::这个够实用吧?不解释
复制代码
- dir|findstr ['-Z]
- ::利用findstr和if命令中字符的实际大小顺序实现查找含有宽字符的行
复制代码
- findstr /x ".........." 1.txt
- ::查找1.txt中10字节的行
复制代码
- (type 1.txt&echo;)|findstr /o .*|more +1
- ::加上for,很容易获取1.txt每行的字节数
复制代码
- findstr>1.txt /m /p .* *.*
- dir /b /a-d|findstr>2.txt /v /i /m /g:1.txt
- ::获取含有不可打印字符的文件名,关键是findstr取集
复制代码
- findstr "^Rar!" /g:1.txt
- ::此处1.txt是上个技巧的1.txt,内容是所有含不可打印字符的文件列表,此技巧可搜索rar文件,虽然简单,但是至今也未出错过。
复制代码
- more>tmp +2 1.txt
- findstr>前两行.txt /x /v /g:1.txt 2.txt
- ::有时候可用此办法获取前几行,当然,绝大部分情况下没有for /f合适,而且存在特殊字符bug[/code[code]]@echo off
- findstr /n .* 1.txt>tmp1
- find /n /v "" 2.txt|more>tmp2 +2
- for /f "tokens=2*delims=]:" %%a in ('fc /n /lb10000 tmp1 tmp2^|sort') do (
- echo;%%b
- )
- del tmp?
- pause
- ::qzwqzw首创用fc /n同时输出双文本的思路,但是存在排序有可能被打乱的缺陷,所以加了个find弥补一下
复制代码
作者: CrLf 时间: 2011-3-30 12:54
本帖最后由 zm900612 于 2011-6-24 16:10 编辑
四、start、call、cmd 篇
之所以放在一起,是因为这三个命令的功能有所交集
1、start- @echo off
- %1 cd.>tmp
- set /p=%1<nul
- %1 start /b "" %0 :(五秒后退出) tm
- if not "%1"=="" goto %1
- set /p n=输入任意字符
- if defined n (
- del tmp
- echo 您输入的是%n%,五秒后退出。
- ) else echo 输入为空!五秒后退出。
- :(五秒后退出)
- ping /n 5 localhost>nul
- if exist %2p exit
- pause::妙用start /b让set /p实现choice的延时功能,不知道哪位前辈首创的,再次赞一个。此处%1、%2的技巧仅作点缀,我只是觉得这样“搭积木”很好玩才强加上去的
复制代码
2、call- set a=b
- set b=c
- call echo %%%a%%%
- ::不使用变量延迟仍然可以借助call实现变量的延迟读取与嵌套,但是效率上有缺陷
复制代码
3、cmd- set a=b
- set b=c
- cmd /c echo %%%a%%%
- ::这证明call一个命令时的效果近似于cmd /c,二者的区别体现在"for"和"if"这两个命令不能用call运行,因为for和if其实可能只是关键字,而非真实存在的命令
复制代码
- set a=b
- set b=c
- cmd /v:on /c echo !%a%!
- ::不需要setlocal,照样可以使用变量延迟
复制代码
- %1 %0 :: echo;成功调用自身
- %2
- ::个人很常用,这里用%1和%2的技巧为我所偏爱,那个::可以视情况换为rem。虽然此处并未出现cmd命令,但其实运行自身时执行的就是cmd /c %0。
复制代码
- @echo off
- %1 cmd /v:on /c %0 ::
- set n=123
- echo !n!
- pause
- ::综合前两个技巧实现不使用setlocal,开启变量延迟
复制代码
- @echo off
- set str=test测试1234
- setlocal enabledelayedexpansion
- for /f "delims=:; " %%a in ('((cmd /u /c echo !str!^)^&echo^;^;^)^|findstr /o ^;') do set /a n=%%a-5
- for /f "delims=:" %%a in ('((echo !str!^)^&echo^;^;^)^|findstr /o ^;') do set /a d=n-%%a+3
- set /a m=n/2,s=m-d
- echo 共!m!个字符,!d!个单字节字符、!s!个双字节字符
- pause
- ::三步判断单字符、双字符个数的另类办法。优势在于支持对超长字符串进行计算(此时用常规算法步骤多且难通用),缺点在于效率低。
复制代码
- ren 1.exe 1.bat
- echo 请双击1.bat
- ::为什么这样也可以运行呢?因为exe的打开方式是"%1" %*,bat是cmd /c "%1" %*,所以把exe当做bat运行时,相当于cmd /c 1.exe...不过这只适合双击打开,在cmd内部调用此文件的时候是当成真正的bat运行的,所以会出错。
复制代码
作者: CrLf 时间: 2011-3-30 12:55
本帖最后由 zm900612 于 2011-6-24 16:11 编辑
五、其他命令 篇
1、xcopy比copy强大得多,最大的遗憾在于它是外部命令- xcopy /a 源文件夹 目标文件夹
- ::xcopy用在筛选上也很实用
复制代码
- xcopy /l /y /n %cd% ..
- ::巧取当前目录下文件的短名,并不会真的复制
复制代码
- xcopy /d:1-31-2011 /l "%cd%" tmp\
- ::获取修改日期在2011年1月31日以后的文件清单
复制代码
- xcopy /t *.txt C:\test\
- ::复制含有txt文件的目录结构到C:\test
复制代码
- @echo 1.txt>list
- xcopy /exclude:list ?.txt test\
- ::复制所有以单个字符为名的文件到test文件夹
复制代码
- xcopy /s *.txt ..\txt\
- ::复制所有以txt为名的子文件到上一级目录中的txt文件夹
复制代码
- for /f "delims=" %%a in ('dir /s /b /ad^|sort -r') do rd "%%a" 2>nul
- ::删除空文件夹的经典思路,利用rd默认不删除非空文件夹的特性进序删除空文件夹
复制代码
- for /d %%a in (*) do (
- xcopy /q /h /r /s /k "%%a" "tmp\"
- rd /s /q "%%a"
- ren "tmp" "%%a"
- )
- ::删除空文件夹的另类方案
复制代码
2、相比于前面几个大佬级的命令,这些命令算是比较不起眼的了,所以归在一类- copy nul+Unicode.bat 解密.bat
- ::用Unicode文件头来进行编码混淆加密的bat,可以用这条命令解密
复制代码
- echo>tmp 12323412 2323242134122434 345
- more /t20 tmp>对齐.txt
- type 对齐.txt
- pause
- ::more命令的t开关也有大用途,潜规则不解释。
复制代码
- cmd /u /c echo 0123456789|more
- ::more命令会将cmd /u输出的nul字符转换为空格,从而实现逐字打印一行单字节字符。
复制代码
- @echo off&setlocal enabledelayedexpansion
- set n=32768
- (for %%a in (16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do sort /rec !n! %0&&set /a n-=%%a||set /a n+=%%a)>nul 2>nul
- echo 最长行有%n%个字符
- pause
- ::当最长的行字符数大于128时可能可以用这个来判断最长行的字符数(短于128时rec开关会失效,代码中那一大堆2的N次方就是凑字数的,实战中可以省掉一些),支持超长字符串,计算大文件时效率明显优于传统算法,新折半法来自plp626的转帖,sort的/rec开关比较鸡肋,想来想去也只想到这个用途,未见先例
复制代码
- ren 1.exe 1.bat
- echo 请双击1.bat
- ::为什么可以把exe改为bat后缀名运行呢?因为exe的打开方式是"%1" %*,bat是cmd /c "%1" %*,所以把exe当做bat运行时,相当于cmd /c 1.exe...不过这只适合双击打开,在cmd内部调用此文件的时候是当成真正的bat运行的,所以会出错。而且基于同样的原因,它还可以改成com或者cmd后缀名来执行。
复制代码
3、再介绍一些在cmd窗口中的技巧,当然它们仅仅是“欺骗”cmd窗口,一旦输出到文件就原形毕露:- @echo off
- echo 1
- echo 2
- echo 3
- echo [tab]退行了
- pause>nul
- ::这个太牛了,不知道哪位发现的
复制代码
- set "dq=[tab][tab][tab][tab][tab][tab][tab][tab][tab][tab] "
- (echo 2、计划生育的重要性%dq%啊
- echo 1、贯彻落实科学发展观%dq%哇)|sort
- ::借助tab键与退格符实现多行捆绑排序并错行显示,tab与退格之间的那个空格是关键,否则变为退行
复制代码
- set /p=同一行显示不同颜色:<nul
- set /p=<nul>红底蓝字
- echo <nul>黄底绿字
- findstr /a:41 .* 红底蓝字?
- findstr /a:62 .* 黄底绿字?
- del>nul 红底蓝字 黄底绿字
- pause
- ::经常见到的在同一行显示不同颜色的办法,不过很多人总是用 (四个退格四个空格),说明没理解退格键的意义[/code[code]]@prompt $_
- dir fuck.tmp
- pause
- ::利用这个prompt,打开回显后可以同时输出命令与命令结果,而不会有多余内容,适合制作bat运行日志
复制代码
- echo
- ::这个黑色的圆点在前面的介绍中作为配角出现过,是ansi码中的0x07,也等同于在cmd中输入的ctrl+G,它每次被显示在屏幕上时都会发出“滴”的一声,所以以后findstr *.*时一定要留神了(除非不得已,否则需要把结果显示到窗口时建议加上/p开关),万一不小心打印出几万个,你的电脑会像发电报一样响个不停,我中招N次了...
复制代码
作者: CrLf 时间: 2011-3-30 12:55
本帖最后由 zm900612 于 2011-6-23 22:31 编辑
六、cmd运行机制 篇
1、预处理机制:特殊字符优先级、语句和语块的划分- setlocal enabledelayedexpansion
- (set n=3
- set /a n=2,n=%n%+!n!+n)
- ::利用预处理机制,将一个变量解释为多个值
复制代码
- setlocal enabledelayedexpansion
- echo ^^!
- ::当语句中存在变量延迟符号时,将被预处理两次,这是一定要注意的
复制代码
- set str=.
- set "str name=str"
- for %%a in (%tmp%) do if defined %%a echo %%a 存在变量str
- ::利用for的参数变量在if参数划分之后才被解释的特点,弥补if defined对于空格变量名的兼容性缺陷,本质原因是for和if都是特殊的函数,他们的参数设置在语块的预处理中就已经被cmd“记住”了,之后无法对其进行改变。
复制代码
- (del %0
- echo 能找到我,就给你发糖
- pause>nul)
- ::括号里的内容被理解成一个语块,运行其中的命令时不需从文件读取,所以就算删除自身仍可运行。
复制代码
- echo "test&pause|sort
- ::当一行命令中存在奇数个双引号时,将会转义其后所有本行字符
复制代码
- for /f tokens^=2delims^=^" %%a in ("123"test"456") do echo %%a
- ::通过对特殊字符的转义,在for中用双引号当分隔符
复制代码
- for /f tokens^=2delims^=^" %%a in (^"123"456") do echo %%a
- set /p=^"""<nul
- ::当一组字符串中含有奇数个双引号时经常会出错,解决方法是转义其中的一个,保持有效的双引号成对,可是引号对之内无法用转义符对其转义,所以转义符要放在引号对之外使用
复制代码
- set /a "1/(%random%%%2)"&&set com=||set com=/f "tokens=2"
- for %com% %%a in ("123 234 345") do echo %%a
- ::假如随机值为偶数,则显示指定字符串第二段,否则显示整段。这里用变量来定制命令,会比常规办法(一条if和一条命令对应)更灵活和省事,但是要注意的是,变量延迟是在解释语块之后进行,所以这里的%com%不能使用变量延迟。
复制代码
- set /a \test1=123,test2=234
- (@echo off
- for /f "tokens=1* delims==" %%a in ('set\') do echo %%b
- )|sort
- ::sort对for命令的输出进行排序,那个@echo off并非多余,因为通道之前的若是语块(for、if或者被成对括号包起来的语句),该语块中的内容将会以cmd /c的形式运行,此时的回显是打开的,而变量延迟则是默认关闭的。
复制代码
- dir /ad 123\&&md234||rd 345&tree /f|more
- ::当存在123文件夹时,创建234文件夹,否则删除345文件夹,无论结果如何,接下来都会逐屏显示当前目录树。重点是管道命令、逻辑连接符的灵活运用
复制代码
2、句柄的妙用- @echo off 2>nul 3>nul
- 这个命令不存在...
- echo 错误回显呢?
- pause
- ::句柄备份,可用于屏蔽所有正确或错误回显
复制代码
- 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
- ::用一个命令创建9个文件,效率自然提高了
复制代码
- @echo off
- (for /r %%a in (*.*) do del /f /s "%%~nxa" 3>>"%%a") 2>nul 4>>%0
- pause
- ::利用写入句柄会占用文件的特性实现高效删除重复文件
复制代码
作者: CrLf 时间: 2011-3-30 12:56
本帖最后由 zm900612 于 2011-6-12 13:17 编辑
待续,留一层空楼备用...
作者: hbwazxf 时间: 2011-3-30 13:22
很全面,下载看看。
作者: Hello123World 时间: 2011-3-30 16:44
下载来看看,先支持一下,辛苦了
作者: weichenxiehou 时间: 2011-3-30 20:40
忍不住赞一个!确实很牛!
作者: terse 时间: 2011-3-30 23:26
很好 赞一个
作者: city_85 时间: 2011-3-31 14:37
他就像阿凡达那么牛!!!
作者: acaigg 时间: 2011-3-31 16:33
有奉献精神!感谢楼主。
作者: friday011 时间: 2011-3-31 17:05
楼主辛苦了,好东西
作者: jinzeyu 时间: 2011-3-31 19:59
比阿凡达还牛!!!顶一下,支持
作者: liaobin 时间: 2011-3-31 23:09
新手来学了,谢谢了
作者: cjiabing 时间: 2011-6-23 20:29
本帖最后由 cjiabing 于 2011-6-23 21:23 编辑
- @echo off
- ::零字节
- cd.>1.txt
- cd.>2.txt
- cd.>3.txt
- pause
- ::使用一个cd命令创建多个文件,命令格式:cd,n>Name1.txt,n-1>Name2.txt,n-2>Name3.txt,n-3……
- ::注意:cd后面以及各个文件名之间跟的是点号“,”,重定向符“>”前跟的是数字,这个数字第一个是要创建的文件总数,依次递减,直至1。
- cd,4>111.txt,3>222.txt,2>333.txt,1>444.txt
- cd,3>121.txt,2>122.txt,1>123.txt
- pause
- ::显然不是零字节,并且,似乎与句柄那类东西有关,速度受到一定程度的影响,而且成功率有可能无法保证,比如下例:
- cd,5>4321.txt,4>4321.txt,3>4322.txt,2>4323.txt,1>4324.txt>nul 2>nul
- cd,6>a.txt,5>b.txt,4>c.txt,3>d.txt,2>e.txt,1>f.txt
- ::不能重复利用,无法覆盖原来的数据。
- pause
- 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、速度慢,出错。
我研究了一下,提出以下方案,大家看看怎么样!~
作者: CrLf 时间: 2011-6-23 22:30
18# cjiabing
成功率不高的情况是这样吗?:
-
- cd.>1.txt 3>2.txt
- cd.>2.txt
复制代码
那是因为句柄会占用文件,解决方法是避开句柄备份(比如只用句柄 1、2、5、7、9 或者 1、4、6、8),或者将指向文件的句柄关闭,更好的办法是先“打预防针”,见下面三例:
-
- cd.>1.txt 2>2.txt 5>3.txt 7>4.txt 9>5.txt
- cd.>1.txt 2>2.txt 5>3.txt 7>4.txt 9>5.txt
- ::避开句柄备份避免出错
复制代码
-
- 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
- cd.>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
- 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
- ::将指向文件的句柄关闭
复制代码
我认为最好的解决办法应该是:
-
- cd.>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
- cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt
- 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的特殊性,日后生成文件时只能用1~8,不宜用句柄9,否则仍然存在发生句柄备份的可能
复制代码
作者: cjiabing 时间: 2011-6-23 23:18
19# zm900612
不懂得能否重复利用,我那个放到一个循环里,结果它就不起作用了,搞得我都没信心了。
作者: ab362425 时间: 2011-6-24 13:47
楼主辛苦了,顶.
作者: CrLf 时间: 2011-6-24 14:05
20# cjiabing
可以的:- @echo off>nul 2>nul 3>nul 4>nul 5>nul 6>nul 7>nul 8>nul 9>nul
- ::先使句柄不为“真空”,也就避免了后面发生句柄备份的可能,不过除非特殊情况,不建议把句柄1、2也用上
- for /l %%a in (1 1 8) do (
- for /l %%b in (1 1 8) do echo>%%b.txt %%a%%b
- rem 生成8个txt文本,接下来用句柄清空
- pause
- cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt
- rem 因为此时句柄1~8已经不为空,所以均可重复用,唯独句柄9最好别用
- )
- pause
复制代码
作者: jodyzyx 时间: 2011-7-19 15:20
很好 对于我这个新手来说是个很好的东西 感谢楼主的笔记
作者: mstsc 时间: 2011-7-19 22:31
楼主的笔记对我这个新手很有用 先收藏 在学到那里的时候 慢慢研究
作者: brqtpt007 时间: 2011-8-12 15:10
忍不住要赞一个
作者: 唯尘 时间: 2024-10-21 12:56
感谢楼主,点赞~
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |