[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

不错 随风的连接也不错

看着不错,就加分,别吝啬
但也别乱加,

感谢随风,我第一次注册时是08.2月份,转眼快一年了,随风的身影经常看见

很佩服你!

呵呵..不知道最近忙不?还好不?

TOP

原帖由 随风 于 2008-10-16 20:06 发表
当 批处理中有多处echo需要定向到文本中,可以使用这种方法,以使代码简化
如:、@echo off
echo abcd>>a.txt
echo 1234>>a.txt
echo ldjfafj>>a.txt
echo 9f7jfa8fd>>a.txt可以这样

@echo off
echo. 1>nul ...

复制 verybat的内容大家看下.哈
═╬╬═  ═╬╬═  ═╬╬═  ═╬╬═ ═╬╬═  ═╬╬═  ═╬╬═  ═╬╬═ ═╬╬═  ═╬╬═  ═╬╬═  

第一步:在运行“1>nul”之前,1的指向是默认值con,此时代号3~9的指向都是空(初始值),因此系统会把1的指向备份到3(因为3是第一个为空的代号),3就指向了con。就是说系统把1原来的指向复制给了3,目的是语句结束后能找回原来的指向,这就相当于备份。

第二步:现在3的指向是con。然而由于要运行“3>nul”,因此还要备份3的指向。此时4是空的,系统就把3的指向con复制给了4,即4现在指向con。就是说3以4为备份。

第三步:由于“3>nul”使得3指向了nul。

第四步:这行语句结束时,1要找回原来的指向,从以上叙述我们知道,3是1的备份,因此1要通过3来恢复“原来”的指向,但此时3的指向已经变为了nul,故1就指向nul。

第五步:而3要恢复原来的指向就要找4,4指向con,故3恢复为con;4原始指向是空的,其备份在5中,故4的指向恢复到空。



    至此我们理顺一下,现在1指向nul,2指向默认值con,3指向con,4之后都是空指向。那么在运行后两句echo语句时由于1指向nul,即标准输出被重定向到空设备,故显示被屏蔽

═╬╬═  ═╬╬═  ═╬╬═  ═╬╬═ ═╬╬═  ═╬╬═  ═╬╬═  ═╬╬═ ═╬╬═  ═╬╬═  ═╬╬═  

[ 本帖最后由 lixiaodaoaaa 于 2008-10-17 03:00 编辑 ]

TOP

嘿嘿,做两个小试验
打开两个cmd窗口,第一个窗口中输入
echo a 1>nul 3>1.txt
第二个窗口输入
echo a 1>2.txt 3>nul
然后打开1.txt与2.txt看下输出有什么不同

1.txt不但输出了命令执行结果,还包括了cmd自身输出的提示行,并且句柄锁定到了当前的输出
2.txt只输出了命令的结果

我们可以把cmd窗口理解为一个句柄载体,上边有0-9个句柄,0,1,2做了相关定义3-9是空置
同时把cmd的标准输出称之为sout,命令的标准输出称为cout,cout在输出时sout被挂起,但于载体1之间的锁定属性还存在,并被cout继承,cout完成后sout被复位
再看看1>nul 3>nul  1>con 4>con,很明显,在我们自定义句柄转向时,载体会备份所操作的句柄以便复位,例如1>nul,这时载体将1备份至第一个空置句柄,通常是3,当这一行命令处理完成之后,载体打备份句柄3复位了1,而当复合型的转向操作出现时,这种备份还会向后继续,使如1>nul 3>nul,我们操作了1还有3,载体首先将1备分到3上,然后又将3备份到4上,但这第二次备份被更改了,他的设备指向不再是默认的con,而是自定义设备,所以我们需要1>con 4>con这样的方法来恢复,这时载体会认为1>con(其实1>任何设备都可以,例如1>nul)是一个转向操作,其实的确是一个转向操作,它会向后备份,这时3已经不再是一个空置句柄(后边说),所以它会直接备份到4上,而4>con被认为也是一个转向操作,这时载体将4备份到5,这个过程中,原来4的默认指向>nul被更改为>con,当这一行命令完成后,由5开始向前恢复,3,4,5逐一被释放,1恢复到默认状态
在微软的句柄人工转移说明中我们可以看到,自定义的句柄转向会复制其属性,在1>nul 3>1.txt这个例子中,句柄3本来被载体借用,复制了标准输出句柄1以及锁定属性,而当我们再自定义句柄3时只是更改了输出目标,而属性是继承自载体备份至1的锁定状态,这时载体又将句柄3备份至了句柄4,但目标设备已经变成了我们自定义的设备,这行命令完成后,这个被修改的备份向前恢复时,到句柄3会出错,因为句柄被自定义后正在使用,恢复被中止,1被挂起,所有输出根据自定义备份在3完成
2

评分人数

TOP

谢谢各位评分的朋友,这会我自已看了一遍,发现还有很多不足之处,更重要的是,这么杂乱的格式你们用心看完,很感谢

TOP

返回列表