当前位置:文档之家› 替换运行中的文件(深入浅出)

替换运行中的文件(深入浅出)

替换运行中的文件(深入浅出)

文章作者:Dancefire at 263 dot net

这是今天瞎琢磨的一点收获。

一、引入

凡事总喜欢刨根问底,一直问自己为什么,问到实在没什么可问了为止,当然也有问到自己是在懒得再问了为止的时候。因为一个软件的自动更新老出问题,有时候出现无法自动更新,分析后发现原来是在替换正在运行的程序时出了问题。无知的我就开始对替换正在运行中的程序的方法进行分析。

虽大言不惭自称深入浅出,其实只不过对一个问题想深入进去,分析到自己因技术不佳无法继续分析的时候,浅浅的出来而已。但是仍旧希望这篇文章能够对和我一样思考这个问题的人有一点点帮助。

言归正传,首先从xfocus的bgate的文章《在Win2000/XP上安静地替换正在使用的系统文件》中获得启发。

他对替换正在使用的系统文件进行了研究,分析了微软的一个工具zap,这个工具可以替换系统文件。经过分析后,这个工具其实是先把正在使用的文件移动到一个临时目录中去,然后再把这个文件删除,但是标记为下次启动的时候删除。此时系统文件目录已经腾出了空间,这样再把新的文件移动过来就可以了。

实现部分代码示意如下:

if(szFileToDel[1] == ':'){

sprintf(cTempPathName, "%c:\\", szFileToDel[0]);

}

else{

GetModuleFileName(NULL, cFileName, 0x100);

sprintf(cTempPathName, "%c:\\", cFileName[0]);

}

if(GetTempFileName(cTempPathName, "_@", 0, cTempFileName) == 0)

return FALSE;

if(MoveFileEx(szFileToDel, cTempFileName, MOVEFILE_REPLACE_EXISTING) == 0)

return FALSE;

if(MoveFileEx(cTempFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT) == 0)

return FALSE;

if(MoveFileEx(szSrcFile, cTempPathName) == 0)

return FALSE;

其中

winbase.h:

#define MOVEFILE_REPLACE_EXISTING 0x00000001

#define MOVEFILE_COPY_ALLOWED0x00000002

#define MOVEFILE_DELAY_UNTIL_REBOOT0x00000004

#define MOVEFILE_WRITE_THROUGH0x00000008

二、MoveFileEx分析

为了了解MoveFileEx()到底是如何在下次重新启动的时候进行的文件移动操作的,我查阅了操作系统源代码。

1、MoveFileEx()实际上是调用的MoveFileWithProgressW(),只不过NULL了两个回调参数。

2、MoveFileWithProgressW()中针对dwFlag=MOVEFILE_DELAY_UNTIL_REBOOT的,调用了BasepMoveFileDelayed()函数

3、BasepMoveFileDelayed()是通过修改注册表的方法,让操作系统重新启动时进行文件操作的。

它修改的键值是

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenam eOperations 这是一个REG_MULTI_SZ的键值。

格式是:

szDstFile\0\0

szSrcFile\0szDstFile\0\0

szSrcFile\0!szDstFile\0\0

有些文章中所说的源文件和目标文件中间是换行,这并不是最合理的,虽然也可以,中间是Unicode的\0,也就是00 00 而且需要注意的是,如果指定了MOVEFILE_REPLACE_EXISTING属性的话,目标文件前会加注一个叹号。

这个键值我是在分析完源代码后,才发现原来MSDN中已经给出这个键值了。

后来我打开我的这个键值,发现里面有一堆,还没有来得及删除的文件,在等着我下一次重新启动的时候删除呢。

根据关于MOVEFILE_DELAY_UNTIL_REBOOT的解释,操作系统会在系统重新启动的时候,在Autochk检查完成后,并且在建立任何PageFile文件之前,立即进行指定的文件移动。而且要确保所要操作的文件能够被LocalSystem或者管理员组所操作。

我同时也注意到了另外一个我不熟悉的问题,就是为什么文件被移动了,但是应用程序还可以继续执行,而删除则不行。我没有细考虑这个问题,但是我感觉一定是有什么东西没有变化,比如某种链接。虽然位置变了,但是链接依旧能够跟踪到映像的位置,所以所有指向该链接的操作都是生效的。但是删除文件的时候,该链接就会被删除,从而会导致操作失败,为了避免这种失败,所以禁止删除正在被占用的文件。

三、操作系统启动过程中相关操作

关注了一下NT的启动过程,想了解系统在启动的时候是如何执行上面提到的移动或者删除行为的。

在初始化内核阶段,ntoskrnl.exe从NTLDR手中接管了控制权,在最后一步,Session Manager启动了Windows XP的高级子系统以及服务,Session Manager启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕。

Session Manager实际上就是smss.exe,我们经常可以在内存进程中看到他的身影。反汇编的时候,在sub_48584D01中看到XP有考虑识别的CPU有:

0 x86

1 MIPS

2 ALPHA

3 PPC

4 IA64

5 ALPHA64

other UNKNOWN

我在smss.exe里面找到了PendingFileRenameOperations,可见应该是此文件负责了在引导的时候执行其中的文件移动操作。只可惜,我没有找到何处调用了PendingFileRenameOperations,反汇编功底不佳啊。

从https://www.doczj.com/doc/5a19109449.html,中看到一段关于Session Manager调用PendingFileRenameOperations的话

[https://www.doczj.com/doc/5a19109449.html,/ntw2k/info/regboot.shtml]

After you pass the point in the log where boot and system driver initialization is complete you'll begin to see records created by the smss.exe process, which is called the Session Manager. Session Manager is the first user-mode process launched during a boot. You'll see it immediately check to see if there are any rename operations it should perform before the system is up and running by looking at the value HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations. Next you'll see it determine what DOS device mappings it should create (e.g. COM1, LPT1), what environment variables are defined, what DLL's it "knows about" (standard DLLs in the system32 directory), and which protected subsystems it should start (e.g. OS/2, POSIX).

Session Manager typically launches Chkdsk (autocheck.exe), which is specified in the Session Manager's BootExecute value along with direction to run other boot-time native applications. After Autocheck finishes Session Manager starts Winlogon and the Win32 subsystem (CSRSS.EXE). Both of these generate interleaved Registry accesses as they start up concurrently. Winlogon can be seen querying the .Default key's display settings, including colors and mouse settings under HKU\.Default\Control Panel. The .Default key's contents are user preferences that are active when no one is logged in, and Winlogon uses them for the screen on which it displays the logon dialog box.

不过这个和微软所说的先Autochk,然后再PendingFileRenam eOperations,不同。

从另一份文档中(https://www.doczj.com/doc/5a19109449.html,/brittanyfoo/BootProcess.html),提到了初始化进程问题:

Smss 的主线程进行以下的初始化步骤:

1、创建LPC 端口对象( \SmApiPort )和两个等待客户请求的线程。客户请求包括装载一个新的子系统或者创建一个会话等。

2、为MS-DOS 设备名,如COM1 和LPT1 定义符号链接。

3、如果安装了终端服务(Terminal Services),在对象管理器的名字空间创建\Sessions 目录。

4、运行HKLM\SYSTEM\CurrentControlSet\ Control\Session Manager\BootExecute 定义的程序,典型的是运行Autochk (Chkdsk在引导其间的版本)。

5、按照HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 的指令,进行延迟文件改名操作。挂起文件删除在PendingFileRenameOperations2 。

6、打开已知的DLL 。

7、创建另外的分页文件。

8、初始化注册表。配置管理器刷新注册表,为HKLM\SAM, HKLM\SECURITY, 和HKLM\SOFTWARE 关键字装载注册文件。HKLM\SYSTEM\ CurrentControlSet\Control\hivelist 在硬盘上搜索注册表文件,配置管理器在\Winnt\System32\Config 寻找。

9、创建系统环境变量。

10、装载Win32子系统内核模式部分(Win32k.sys)。Smss 在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager 下寻找Win32k.sys 和其它要装载组件的路径,确定它们的位置。Win32k.sys 中的初始化代码使用视频驱动程序,屏幕的分辨率转换到缺省概貌文件定义的值。因此,屏幕从引导视频驱动程序使用的VGA模式转到系统选择的缺省的分辨率。

11、启动子系统进程,包括Csrss 。

12、启动登陆进程(Winlogon) 。

13、为调试事件信息创建LPC口(DbgSsApiPort 和DbgUiApiPort),并创建监听这些口的线程。

这个算是描述最清楚的了。

四、总结

至此,对替换正在使用中的文件有了初步的理解。

既MoveFileExW -> MoveFileWithProgressW -> BasepMoveFileDelayed

-> HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

然后,ntldr引导,ntoskrnl.exe结果引导权,启动smss.exe(Session Manager),在Autochk之后,检查PendingFileRenameOperations,然后执行其中的文件替换操作。最后sm ss启动Winlogon进程,允许用户登录。

因此此种方法可以替换几乎所有的系统文件,因为smss是系统的第一个UserMode的进程,此时被使用的文件极少,不可能有人在它之前占用文件。

如果是替换系统文件的话,比如smss.exe,就使用微软的办法,先把smss.exe移动到临时文件夹去,然后把新的smss.exe放到正确的目录中。把临时文件夹里的smss.exe移动到NULL,并且是MOVEFILE_DELAY_UNTIL_REBOOT。这样如果系统重新启动的话,自然使用的是新的smss.exe,然后它再把临时文件夹里的垃圾清除掉即可。其实此时不清除,等起来之后再清除也是可以的了,因为已经没有东西在占用那个临时文件夹里的垃圾了。

如果是替换普通应用程序的话,只需要重新启动应用程序即可,因为此时应用程序目录里的东西已经为新的文件了。重新启动只不过是为了删除那个临时文件夹里的垃圾而已。

实用批处理(bat)教程

目录 第一章批处理基础 第一节常用批处理内部命令简介 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd 13、CALL 14、shift 15、IF 16、setlocal 与变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION 启动或停用延缓环境变量扩展名。) 17、ATTRIB显示或更改文件属性 第二节常用特殊符号 1、@命令行回显屏蔽符 2、%批处理变量引导符 3、> 重定向符 4、>>重定向符 5、<、>、<& 重定向符 6、|命令管道符 7、^转义字符 8、组合命令 9、& 组合命令 10、||组合命令 11、\"\"字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 第二章FOR命令详解 一、基本格式 二、参数/d仅为目录 三、参数/R递归(文件名) 四、参数/L迭代数值范围 五、参数/F迭代及文件解析 第三章FOR命令中的变量

一、~I- 删除任何引号(\"),扩展%I 二、%~fI- 将%I 扩展到一个完全合格的路径名 三、%~dI- 仅将%I 扩展到一个驱动器号 四、%~pI- 仅将%I 扩展到一个路径 五、%~nI- 仅将%I 扩展到一个文件名 六、%~xI- 仅将%I 扩展到一个文件扩展名 七、%~sI- 扩展的路径只含有短名 八、%~aI- 将%I 扩展到文件的文件属性 九、%~tI- 将%I 扩展到文件的日期/时间 十、%~zI- 将%I 扩展到文件的大小 十一、%~$PATH:I 第四章批处理中的变量 一、系统变量 二、自定义变量 第五章set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取 第六章if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF增强的用法 第七章DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 1、利用ping命令延时 2、利用for命令延时 3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内 4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内 十、模拟进度条 十一、特殊字符的输入及应用 十二、随机数(%random%)的应用技巧 十三、变量嵌套与命令嵌套 1、更正了所有的错别字,适当排版,增加条理性。

非常经典BAT知识教程

手把手教你写批处理(willsort题注版) Climbing兄可谓用心良苦,受其感昭,略紧微薄之力;原文内容一字未易,仅于每段之下另加题注,其文大多非为纠错,多是年来体会,或偶得,或渐悟,未免偏颇;又加近来俗事渐多,闲情愈少,心浮气燥,一蹴而就。义理悖逆,敬请斧正;措辞不当,尚请莫怪。 另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大;与其修正国内只言片语,不如翻译国外优秀著述。 -------------------------------------------------------- 标题:手把手教你写批处理-批处理的介绍 作者:佚名 编者:Climbing 出处:中国DOS联盟之联合DOS论坛 题注:willsort 日期:2004-09-21 -------------------------------------------------------- 批处理的介绍 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ====willsort编注===================================================== .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch,unix shell,awk, basic,perl等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。====================================================================== == 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 ====willsort题注==================================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越“边缘化”。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ====================================================================== ==

bat批处理文件

批处理文件bat 语法备忘 需要用到的脚本语言还真是多,从系统管理、数据管理、程序开发。脚本语言的影子真是无处不在,孱弱的windows上的可怜的bat也是不得不时常备忘得东东。现在渐渐习惯了把一些零碎的需要整理的文档放在writely上面,即方便自己移动处理文档,还可以跟他们协作或者讨论之用。而且能支持word文档的直接导入,之前用的时候稳定性不很理想,有发生过几次文件不能保存或者保存了无效的问题,发信给他们管理员,倒是很快得到了答复和解决。最近用的时候才发现出现了下列的文字。Writely is now part of Google! 看来有钱就是好啊,想买啥就买啥。估计用不了多久,google也会变成跟ms一样被骂得对象了。没办法,有钱的,横看竖看都是一副欠扁的样。好了,切入正题,把google借来的文章先放着自己备用!:) 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ==== 注======================================= .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 =================================== 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 ==== 注=================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注==================

bat基本应用

.bat文件的基本应用 bat是dos下的批处理文件。 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好像我们 在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具来创建和修改批处理文件。 ==== 注 =================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘 于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批 处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行 的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力 与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注 ================== 批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同, 就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译 连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程 序的可执行性,这些称谓的界限是比较模糊的。 =========================== 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或 者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。 ==== 注 ===== 纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),https://www.doczj.com/doc/5a19109449.html,中的内部命令(根据内存的环境随时进驻 内存),以com为扩展名的可执行程序(由https://www.doczj.com/doc/5a19109449.html, 直接载入内存),以exe位扩展名的 可执行程序(由https://www.doczj.com/doc/5a19109449.html, 重定位后载入内存),以bat位扩展名的批处理程序(由https://www.doczj.com/doc/5a19109449.html, 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) ============ 第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批 处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文

批处理常用命令及用法大全

批处理常用命令及用法大全 说明:本文来自网络,由youxi01整理,由liqiochi修改完善。 阅读本文需要一定的dos基础概念,象:盘符、文件、目录(文件夹)、子目录、根目录、当前目录每个命令的完整说明请加/? 参数参考微软的帮助文档可以看到,在/? 帮助里,"命令扩展名"一词会经常出现"命令扩展名"是指相对于win98的dos版本而言,每个命令新增的功能 命令测试环境win2000proSP4win98的命令功能太少,就不作研究了 注:如果对某一命令还不是很熟悉,可以在命令行窗口下输入:命令名/?的方式来获得帮助。 例如:对dir命令的应用不熟悉,可以在命令行窗口下输入:dir /? 参数只列举常用参数。 注:errorlevel,msd,undelete在win7下不存在。 目录 1.echo 和@回显控制命令 (3) 2.shutdown 关机 (3) 3.dir显示目录中的文件和子目录列表 (4) 4.cd更改当前目录 (4) 5.md创建目录 (5) 6.rd删除目录 (5) 7.del删除文件 (5) 8.ren文件和文件夹重命名 (6) 9.cls清屏 (6) 10.type显示文件内容 (6) 11.copy拷贝文件(只能复制文件) (6) 12.title设置cmd窗口的标题 (7) 13.ver显示系统版本 (7) https://www.doczj.com/doc/5a19109449.html,bel 和vol设置卷标 (7) 15.pause暂停命令 (7) 16.rem 和::注释命令 (7) 17.date 和time日期和时间 (8) 18.goto 和:跳转命令 (8) 19.find (外部命令)查找命令 (8) 20.more (外部命令)逐屏显示 (9) 21.tree显示目录结构 (9) 22.&顺序执行多条命令,而不管命令是否执行成功 (9) 23.&&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令 . 9 24.||顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令 (9) 25.|管道命令,前一个命令的执行结果输出到后一个命令 (10)

批处理文件BAT、CMD命令大全

批处理文件BAT命令大全 一.简单批处理内部命令简介 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 所无法识别的标号, 即在: 后紧跟一个非字母数字的一个特殊符号. goto 命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 4.Rem 命令 注释命令,起一个注释的作用,便于别人阅读和你自己日后修改。 Rem Message Sample:@Rem Here is the description.

实用的几个BAT命令

十分实用的BAT命令 个人整理的一些十分实用的BAT命令中,可以直接粘贴到文本文件中,在改名为*.BAT文件即可运行奇。“《”和“》”之间行的内容就是bat命令文件的内容,不含“《”和“》”。 ●定时关机命令:shutdown 定时关机命令.bat——7200就是两小时,可根据需要修改数字改变定时时间。 《 echo off echo DOS命令格式: echo shutdown /s /t ???(秒) echo shutdown /a 取消 echo 一小时(3600秒)后关机命令如下: shutdown /s /t 7200 》 ●修改IP地址命令:netsh interface ip 修改IP地址命令.bat——可根据需要增删语句 《 @echo off echo 正在设置,请稍后。。。。。 rem 修改IP地址命令*** rem固定IP netsh interface ip set address "本地连接" static 192.168.169.99 255.255.255.0 192.168.169.1 1 rem 上网自动获得IP netsh interface ip set address "本地连接" DHCP rem 修改DNS地址命令*** rem 3G上网主DNS---固定IP-电信 netsh interface ip set dns "本地连接" source=static addr=115.168.254.1 rem 3G上网辅DNS---固定IP netsh interface ip add dns "本地连接" addr=115.168.254.2 index=2 rem 宽带上网主DNS---固定IP-电信宽带 netsh interface ip set dns "本地连接" source=static addr=202.96.128.86 rem 宽带辅网主DNS---固定IP-电信宽带 netsh interface ip add dns "本地连接" addr=202.96.128.143 index=2 rem上网自动获得DNS IP netsh interface ip set dns "本地连接" DHCP :End

bat常用命令及用法大全

批处理常用命令及用法大全 阅读本文需要一定的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文件其中 * 是通配符,代表所有的文件名,还一 个通配符 ? 代表一个

批处理bat实用实例

批处理文件是无格式的文本文件,它包含一条或多条命令。 它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。 使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。 下面就开始我们批处理学习之旅吧。 (本文因篇幅较长,所以分成两部份。前半部份讲命令,后半部分讲实例分析。) 一、简单批处理内部命令简介 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是一样的。)

bat教程

简明bat教程 简明bat教程 批处理命令如果运用得当,威力强大无人能敌!是不是想学习了呢,从今天我将把批处理的常用命令陆续的介绍给大家,如果大家有什么不懂的地方,可以写下评论: 批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名 为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。 一.简单批处理内部命令简介 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 命令时,将显示下面的消息:

bat批处理完整教程

第一章批处理基础 第一节常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BA T或者CMD。这些命令统称批处理命令。 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到非常BA T!" pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行, 他就会在屏幕上显示以下二行话: 欢迎来到非常BAT! 请按任意键继续. . . 这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令"echo" 和"pause" 还有一个特殊符号"@" 从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的! (以下内容来源网络,请各位仔细阅读,好进入下节的实例说明) ====================================================== 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd 13、CALL 14、shift 15、IF 16、setlocal 与变量延迟 17、A TTRIB 显示或更改文件属性 介绍命令 1、REM 和:: REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。 其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

BAT 批处理脚本 教程

BAT 批处理脚本教程 第一章批处理基础 第一节常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到非常BAT!" pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行, 他就会在屏幕上显示以下二行话: 欢迎来到非常BAT! 请按任意键继续. . . 这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令"echo" 和"pause" 还有一个特殊符号"@" 从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的! (以下内容来源网络,请各位仔细阅读,好进入下节的实例说明) ========================================== ============ 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd 13、CALL 14、shift

bat用法详解

网络收集:BAT批处理文件语法 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ==== 注 ======================================= .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 =================================== 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 ==== 注 =================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注 ================== 批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。 =========================== 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。 ==== 注 =====

bat批处理命令大全

从简单学起 echo、@、call、pause、rem 是批处理文件最常用的几个命令,我们就从他们开始学起。echo 表示显示此命令后的字符 echo off 表示在此语句后所有运行的命令都不显示命令行本身 @ 与echo off相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。 call 调用另一条批处理文件(如果直接调用别的批处理文件,执行完那条档后将无法执行当前档后续命令)pause 运行此句会暂停,显示Press any key to continue... 等待用户按任意键后继续 rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的 批处理命令大全(一)第一部分:批处理的专用命令 批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令。 1、REM REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。例: REM 你现在看到的就是注解,这一句将不会被执行。在以后的例子中解释的内容都REM 会放在REM后面。请大家注意。 2、ECHO ECHO 是一个回显命令主要参数有OFF和ON,一般用ECHO message来显示一个特定的消息。例:Echo off Rem 以上代表关闭回显即不显示所执行的命令 Echo 这个就是消息。 Rem 以上代表显示“这就是消息”这列字符 执行结果: C:\>ECHO.BAT 这个就是消息。 3、GOTO GOTO 即为跳转的意思。在批处理中允许以“:XXX”来构建一个标号然后用GOTO :标号直接来执行标号后的命令。例 :LABEL REM 上面就是名为LABEL的标号。 DIR C:\ DIR D:\ GOTO LABEL REM 以上程序跳转标号LABEL处继续执行。 4、CALL CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例: 批处理2.BAT内容如下:

bat脚本指令讲解

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

BAT(批处理)文件编写详细手册

BAT(批处理)文件编写详细手册 一、批处理文件简介 首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句 (for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的 DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch 目录(例如C:/BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:/batch,你就可以在任意位置运行所有你编写的批处理程序。 简单的说,批处理的作用就是自动的连续执行多条命令。 二、批处理中常用命令: 1.echo命令:表示显示此命令后的字符。字符不需要使用引号。其中,%和^两个字 符不能显示。 2.Echo off命令:表示在此语句后所有运行的命令都不显示命令行本身。即关闭echo 回显功能。可以使用echo on打开。 3.@命令:它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能 影响当前行)。 4.call命令:调用另一个批处理文件(如果不用call而直接调用别的批处理文件, 那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 5.pause命令:运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续。如果不想显示以上英文提示信息, 可以这样写:pause>null 6.rem命令:表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考 用的(相当于程序中的注释)。 7.::命令:与rem命令等效。 例1:用edit编辑a.bat文件,输入下列内容后存盘为c:/a.bat,执行该批处理 文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。 批处理文件的内容为: 命令注释: @echo off //不显示后续命令行及当前命令行

最全批处理.bat cmd 介绍及使用讲解(dos)

批处理(又称cmd.exe/.bat) 批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为bat。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。 DOS批处理释义 批处理是一种简化的脚本语言,也称作宏。它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND. COM或者CMD.EXE)解 批处理文件图标 释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展 批处理窗口 名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等中高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe运行该批处理程序。一般情况下,每条命令占据一行;当然也可以将多条命令用特定符号(如:&、&&、|、||等)分隔后写入同一行中;还有的情况就是像if、for等较高级的命令则要占据几行甚至几十几百行的空间。系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一

bat常用命令

BA T常用命令 1、@ 它的作用是隐藏它后面这一行的命令本身(只能影响当前行)。 2、echo 中文为“反馈”、“回显”的意思。它其实是一个开关命令,就是说它只有两种状态:打开和关闭。于是就有了echo on和echo off两个命令了。直接执行echo命令将显示当前echo命令状态(off或on)执行echo off 将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果。 echo. :输出空行,即相当于输入一个回车;值得注意的是命令行中的“.”要紧跟在ECHO后面中间不能有空格,否则“.”将被当作提示信息输出到屏幕。另外“.”可以用,:;”/[\]+等任一符号替代。 3、start 命令 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。 start /wait : start命令会启动软件的安装程序,而/wait命令会让系统在处理批处理文件中的下一条命令之前等待前一个软件安装完成。使用/wait命令是很重要的,只有这样才不会让批处理文件中的所有命令一下子全部执行起来,那样将会导致同一时间运行多个软件的安装程序。 如:几秒钟让你的内存耗尽(例一): @Echo off Start cmd:开启CMD程序) %0 4、pause 中文为“暂停”的意思。它的作用,是让当前程序进程暂停一下,并显示一行信息:请按任意键继续. . .。我们可以加>nul把这个信息隐藏。 5、:和goto 为什么要把这两个命令联合起来介绍?因为它们是分不开的,无论少了哪个或多了哪个都会出错。goto是个跳转命令,:是一个标签。当程序运行到goto时,将自动跳转到:定义的部分去执行了。如:为你的右键添加P处理(例二) @echo off echo 输入1 后按回车键, 添加右键P处理 echo 输入2 后按回车键, 退出 echo. set /p start=请选择(1、2) 后按回车键: if "%start%"=="1" goto 1 if "%start%"=="2" goto 2 :1 @echo off color 1a reg add HKCR\.bat\ShellNew /v nullfile /f >nul reg add HKCR\batfile /ve /d P处理/f >nul exit :2 Exit 6、% 这个百分号严格来说是算不上命令的,它只是批处理中的参数。 %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0有两个意义

相关主题
文本预览
相关文档 最新文档