批处理(bat)命令学习的一些总结

2019-01-29 23:48:30王振洲

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运行的,所以会出错。

五、其他命令篇

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后缀名来执行。

相关文章 大家在看