批处理学习其他命令篇

五、其他命令篇  
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次了... 

你可能感兴趣的:(批处理学习其他命令篇)