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