[导入]Dos下的一些命令(转)
Code
关于MS-DOS下的批处理
Author : Jeff 2006-03-10
关键字: MS-DOS 批处理
环境:Window XP Professional + SP2[版本5.1.2600]
(当我刚开始接触计算机的时候,DOS时代就已经一去不复返。那个时代的辉煌,那个时代程序员的激情,我已无缘再见,但是可以想象得出来,而绝不是充斥着一种功利,一种浮躁。
DOS的辉煌虽已隐去,但是毕竟留下了光彩的足迹。)
现在虽然是视窗时代,DOS离我们已越来越远。但是人是有惰性的,当有大量的重复的工作需要你不停地操作鼠标、键盘,是不是觉得很烦,很无聊?为了使效率更高,很多时候也图个方便,很多软件都提供了命令行方式,方便批量处理。(就我所知,flashget以前的版本好像没有提供命令行方式,现在的新版本就提供了,只是功能不是很强)
下面介绍DOS批处理中的一些常用命令:
1. echo 命令
打开回显功能或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法 : echo [{on│off}] [message]
注意:
1.当使用 echo 时,要显示管道 (|) 或重定向字符(< 或 >),请在管线或重定向字符前面使用脱字符(例如,^>、^< 或 ^|)。如果需要使用脱字符 (^),请键入两个脱字符 (^^)。
2.要避免回显某行,请在批处理程序中的命令前面插入 at 符号 (@)。
3.要在屏幕上回显空白行,请键入: echo.
4.屏幕上回显的,都可以重定向输出到文件中。
2. goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
注意:
1.可以在label参数中使用空格,但不得使用其他分隔符(例如分号或等号)。goto 命令只使用标签的前八个字符。
2. 所指定的label 值必须与批处理程序中的标签匹配。批处理程序中的标签必须以冒号 (:) 开始。
3. rem 命令
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用。
语法:rem Message
注意:
1.在批处理文件注释中不能使用重定向字符“(”或“)”或管线 (|)。
2.与::效果相同,都可以注释文本。
4.pause 命令
暂停批处理程序的处理并显示消息,提示用户按任意键继续。
5.call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 call,它将不会在命令行起作用。
语法 :call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数 :[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
注意:不要在 call 命令中使用管道和重定向符号。
6. if 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
语法:if [not] errorlevel Number Command [else Expression]
if [not] String1==String2 Command [else Expression]
if [not] exist FileName Command [else Expression]
7.for 命令
对一组文件中的每个文件运行指定的命令。
语法:for {%Variable | %%Variable} in (Set) do Command [CommandLineOptions]
注意:
1.使用 %Variable 通过命令提示符执行 for 命令。使用 %%Variable 在批处理文件中执行 for 命令。
字符
语法
定义
& []
Command1 &Command2
用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。
&& []
Command1 &&Command2
只有在符号 && 前面的命令成功时,才运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。
|| []
Command1 || Command2
只有在符号 || 前面的命令失败时,才运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。
( ) []
(Command1 & Command2)
用来分组或嵌套多个命令。
; 或者 ,
Command1 Parameter1;Parameter2
用来分隔命令参数。
上面常用的批处理命令的信息记录得不全,想了解更多、更详细的,可以
1.对command命令行下,键入help,回车,将显示所有的DOS内部命令列表。可以再针对各个内部命令,带参数/?执行,将显示命令的语法和具体使用事项。如键入:dir /?。一般对于每个命令解释都比较详尽,再有疑问就上网查查。
几个包含重要信息的内部命令,建议仔细看看:
想查询批参数的语法,执行这几个命令:call /?
还有一些有用的信息,可以通过执行命令if /? cmd /? for /?来获得。
2.外部命令总汇列表:http://www.computerhope.com/jargon/e/extecomm.htm
内部命令总汇列表:http://www.computerhope.com/jargon/i/intecomm.htm
3.两个比较好的介绍DOS命令的网址:
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx
http://www.computerhope.com/msdos.htm
这个是为了满足某些特殊的需要,边学习批处理边完成的。实现的自动添加计划任务。
@rem ***************Append new job **********************
@rem * Author : Jeff (2005-12-23) *
@rem * Return Value: *
@rem * 0 ------ success *
@rem * 5 ------ param error *
@rem * 6 ------ choice 'N' *
@rem * 7 ------ "Task Scheduler" service forbidden *
@rem * 8 ------ Append job failure *
@rem *******************************************************
@cls
@if "%~3" == "" goto Usage
@set choice=
@net start | find /I "Task Scheduler" >nul
@if %errorlevel% == 0 goto Start
@echo ================ Note =================
@echo It will start service "Task Scheduler".
:Ask
@set /p choice=Are you sure to start(Y/N)?
@if "%choice%"=="" goto Ask
@set choice=%choice:~0,1%
@if /I "%choice%"=="N" goto Quit
@if /I not "%choice%"=="Y" goto Ask
@net start "Task Scheduler" 2>nul
@if not %errorlevel% == 0 goto Service
:Start
@at %2 /interactive /every:%1 %3
@if not %errorlevel% == 0 @exit /b 8
@exit /b 0
:Service
@echo ** Please start "Task Scheduler" first. Or set startup mode=auto/manual!
@exit /b 7
:Usage
@echo **** Usage: Scheduler [time] [date] [command].
@echo **** Need all parameters.
@exit /b 5
:Quit
@exit /b 6
@rem ************************ End ***********************
开头是对代码的一点说明,包括作者,日期,返回值及对应的意义。(建议:最好每个批处理文件都有返回值。如果别人或者自己调用,可以根据不同的返回值在调用端作不同的处理。个人之见)
清屏并判断传入的参数个数是否正确。(现在找不到好的办法获得传入的参数个数,只好判断所需参数的最后一个是否为空) %~3是删除引号("),扩充 %3。(第3个参数包含文件路径,可以是带引号的字符串,也可以是不带引号的,有时候都被弄得糊里糊涂,实在有点头疼。找不到好办法)。 如果参数不正确,跳转到:Uage,打印出使用方法,退出,返回值为5。
下面就是判断Task Scheduler是否打开,如果没有,询问是否打开。‘N’就退出,返回6。‘Y’就尝试打开Task Scheduler服务,如果打不开,提示手动启动服务,退出,返回值7。打开服务成功,就添加计划任务,添加失败,返回8;成功,返回0。
下面的是支持可中途终止的拷贝文件的批处理。中途终止,计量单位为整个文件,不是通俗意义上的“断点续传”。主要用于拷贝大量的文件,中途死机、掉电、断网,均可以从上次接着拷贝。
@rem *************** copy files(interrupt) **************
@rem * Author : Jeff (2005-12-26) *
@rem * Return Value: *
@rem * 0 ------ success *
@rem * 5 ------ param error *
@rem **************************************************
@echo off
if "%~2" == "" goto Usage
setlocal ENABLEEXTENSIONS
pushd %2
cls
set DistPath=%~2
if not "%DistPath:~-1%" == "\" set DistPath=%DistPath%\
set Disc=%DistPath%install.log
if not "%~3" == "" set Disc=%3
md %2 2>nul
echo ============ copy files at %date% %time% ============ >>%Disc%
echo ============= Start Copy File ====================
echo Please wait
xcopy %1 %2 /e /c /R /Y /EXCLUDE:%Disc% >>%Disc%
if %errorlevel% == 0 (
echo ============= Copy File Success! ==================
) else (
echo ============= Copy File Failure! ==================
)
dir %DistPath%*.* /S /B /A:-D > %DistPath%uninstall.log
popd
endlocal
@echo on
@exit /b 0
:Usage
echo **** Usage: CopyFile [source] [destination] [log file].
echo **** Need all parameters but for the last one.
@echo on
@exit /b 5
@rem ************************ End ***********************
在编写一些批处理文件时,总结了一些,也许日后用得着 :)
1. 不显示正常的输出:dir *.txt > nul 或者dir *.txt 1 > nul。
不显示错误提示:dir s.ss 2 > nul。
既不显示正常输出也不显示错误提示:(不知道 :) )
2. 在批处理文件中将带%的变量或者参数写入另一个bat文件:
如:@echo %%1 > {a}.bat {a}.bat文件内容为:%1
@echo if not 0 == %%errorlevel%% rd /S /Q %%2 >> {b}.bat
{b}.bat文件内容为:if not 0 == %errorlevel% rd /S /Q %2
3. “与”符号 (&)、管道(|) 以及括号 () 是特殊字符,将它们作为参数传递时,必须在其前面加上转义字符 (^) 或引号。例如:你希望通过批处理,生成一个bat文件,然后再调用它。这个bat文件就1条命令:@dir %1 > %2。写批处理命令时,应该写成:@echo @dir %%1 ^> %%2
4. 命令type con > x.txt ,将输入到屏幕的内容输出到文件x.txt中,颇似edit x.txt。
输入内容结束,按Ctrl + Z,回车,即可。
5.choice命令从某些系统中取消了,取而代之的是set /p。如:set /p v = (Y/N)?
使用时最好这样处理一下:@set v=%v:~0,1%
6.显示日期和时间:echo %date% %time%
7.net start XXX启动服务。SC注册服务,注销服务。
文章来源:http://ejimgao.blog.163.com/blog/static/4203001620078545915949
关于MS-DOS下的批处理
Author : Jeff 2006-03-10
关键字: MS-DOS 批处理
环境:Window XP Professional + SP2[版本5.1.2600]
(当我刚开始接触计算机的时候,DOS时代就已经一去不复返。那个时代的辉煌,那个时代程序员的激情,我已无缘再见,但是可以想象得出来,而绝不是充斥着一种功利,一种浮躁。
DOS的辉煌虽已隐去,但是毕竟留下了光彩的足迹。)
现在虽然是视窗时代,DOS离我们已越来越远。但是人是有惰性的,当有大量的重复的工作需要你不停地操作鼠标、键盘,是不是觉得很烦,很无聊?为了使效率更高,很多时候也图个方便,很多软件都提供了命令行方式,方便批量处理。(就我所知,flashget以前的版本好像没有提供命令行方式,现在的新版本就提供了,只是功能不是很强)
下面介绍DOS批处理中的一些常用命令:
1. echo 命令
打开回显功能或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法 : echo [{on│off}] [message]
注意:
1.当使用 echo 时,要显示管道 (|) 或重定向字符(< 或 >),请在管线或重定向字符前面使用脱字符(例如,^>、^< 或 ^|)。如果需要使用脱字符 (^),请键入两个脱字符 (^^)。
2.要避免回显某行,请在批处理程序中的命令前面插入 at 符号 (@)。
3.要在屏幕上回显空白行,请键入: echo.
4.屏幕上回显的,都可以重定向输出到文件中。
2. goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
注意:
1.可以在label参数中使用空格,但不得使用其他分隔符(例如分号或等号)。goto 命令只使用标签的前八个字符。
2. 所指定的label 值必须与批处理程序中的标签匹配。批处理程序中的标签必须以冒号 (:) 开始。
3. rem 命令
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用。
语法:rem Message
注意:
1.在批处理文件注释中不能使用重定向字符“(”或“)”或管线 (|)。
2.与::效果相同,都可以注释文本。
4.pause 命令
暂停批处理程序的处理并显示消息,提示用户按任意键继续。
5.call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 call,它将不会在命令行起作用。
语法 :call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数 :[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
注意:不要在 call 命令中使用管道和重定向符号。
6. if 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
语法:if [not] errorlevel Number Command [else Expression]
if [not] String1==String2 Command [else Expression]
if [not] exist FileName Command [else Expression]
7.for 命令
对一组文件中的每个文件运行指定的命令。
语法:for {%Variable | %%Variable} in (Set) do Command [CommandLineOptions]
注意:
1.使用 %Variable 通过命令提示符执行 for 命令。使用 %%Variable 在批处理文件中执行 for 命令。
字符
语法
定义
& []
Command1 &Command2
用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。
&& []
Command1 &&Command2
只有在符号 && 前面的命令成功时,才运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。
|| []
Command1 || Command2
只有在符号 || 前面的命令失败时,才运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。
( ) []
(Command1 & Command2)
用来分组或嵌套多个命令。
; 或者 ,
Command1 Parameter1;Parameter2
用来分隔命令参数。
上面常用的批处理命令的信息记录得不全,想了解更多、更详细的,可以
1.对command命令行下,键入help,回车,将显示所有的DOS内部命令列表。可以再针对各个内部命令,带参数/?执行,将显示命令的语法和具体使用事项。如键入:dir /?。一般对于每个命令解释都比较详尽,再有疑问就上网查查。
几个包含重要信息的内部命令,建议仔细看看:
想查询批参数的语法,执行这几个命令:call /?
还有一些有用的信息,可以通过执行命令if /? cmd /? for /?来获得。
2.外部命令总汇列表:http://www.computerhope.com/jargon/e/extecomm.htm
内部命令总汇列表:http://www.computerhope.com/jargon/i/intecomm.htm
3.两个比较好的介绍DOS命令的网址:
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx
http://www.computerhope.com/msdos.htm
这个是为了满足某些特殊的需要,边学习批处理边完成的。实现的自动添加计划任务。
@rem ***************Append new job **********************
@rem * Author : Jeff (2005-12-23) *
@rem * Return Value: *
@rem * 0 ------ success *
@rem * 5 ------ param error *
@rem * 6 ------ choice 'N' *
@rem * 7 ------ "Task Scheduler" service forbidden *
@rem * 8 ------ Append job failure *
@rem *******************************************************
@cls
@if "%~3" == "" goto Usage
@set choice=
@net start | find /I "Task Scheduler" >nul
@if %errorlevel% == 0 goto Start
@echo ================ Note =================
@echo It will start service "Task Scheduler".
:Ask
@set /p choice=Are you sure to start(Y/N)?
@if "%choice%"=="" goto Ask
@set choice=%choice:~0,1%
@if /I "%choice%"=="N" goto Quit
@if /I not "%choice%"=="Y" goto Ask
@net start "Task Scheduler" 2>nul
@if not %errorlevel% == 0 goto Service
:Start
@at %2 /interactive /every:%1 %3
@if not %errorlevel% == 0 @exit /b 8
@exit /b 0
:Service
@echo ** Please start "Task Scheduler" first. Or set startup mode=auto/manual!
@exit /b 7
:Usage
@echo **** Usage: Scheduler [time] [date] [command].
@echo **** Need all parameters.
@exit /b 5
:Quit
@exit /b 6
@rem ************************ End ***********************
开头是对代码的一点说明,包括作者,日期,返回值及对应的意义。(建议:最好每个批处理文件都有返回值。如果别人或者自己调用,可以根据不同的返回值在调用端作不同的处理。个人之见)
清屏并判断传入的参数个数是否正确。(现在找不到好的办法获得传入的参数个数,只好判断所需参数的最后一个是否为空) %~3是删除引号("),扩充 %3。(第3个参数包含文件路径,可以是带引号的字符串,也可以是不带引号的,有时候都被弄得糊里糊涂,实在有点头疼。找不到好办法)。 如果参数不正确,跳转到:Uage,打印出使用方法,退出,返回值为5。
下面就是判断Task Scheduler是否打开,如果没有,询问是否打开。‘N’就退出,返回6。‘Y’就尝试打开Task Scheduler服务,如果打不开,提示手动启动服务,退出,返回值7。打开服务成功,就添加计划任务,添加失败,返回8;成功,返回0。
下面的是支持可中途终止的拷贝文件的批处理。中途终止,计量单位为整个文件,不是通俗意义上的“断点续传”。主要用于拷贝大量的文件,中途死机、掉电、断网,均可以从上次接着拷贝。
@rem *************** copy files(interrupt) **************
@rem * Author : Jeff (2005-12-26) *
@rem * Return Value: *
@rem * 0 ------ success *
@rem * 5 ------ param error *
@rem **************************************************
@echo off
if "%~2" == "" goto Usage
setlocal ENABLEEXTENSIONS
pushd %2
cls
set DistPath=%~2
if not "%DistPath:~-1%" == "\" set DistPath=%DistPath%\
set Disc=%DistPath%install.log
if not "%~3" == "" set Disc=%3
md %2 2>nul
echo ============ copy files at %date% %time% ============ >>%Disc%
echo ============= Start Copy File ====================
echo Please wait
xcopy %1 %2 /e /c /R /Y /EXCLUDE:%Disc% >>%Disc%
if %errorlevel% == 0 (
echo ============= Copy File Success! ==================
) else (
echo ============= Copy File Failure! ==================
)
dir %DistPath%*.* /S /B /A:-D > %DistPath%uninstall.log
popd
endlocal
@echo on
@exit /b 0
:Usage
echo **** Usage: CopyFile [source] [destination] [log file].
echo **** Need all parameters but for the last one.
@echo on
@exit /b 5
@rem ************************ End ***********************
在编写一些批处理文件时,总结了一些,也许日后用得着 :)
1. 不显示正常的输出:dir *.txt > nul 或者dir *.txt 1 > nul。
不显示错误提示:dir s.ss 2 > nul。
既不显示正常输出也不显示错误提示:(不知道 :) )
2. 在批处理文件中将带%的变量或者参数写入另一个bat文件:
如:@echo %%1 > {a}.bat {a}.bat文件内容为:%1
@echo if not 0 == %%errorlevel%% rd /S /Q %%2 >> {b}.bat
{b}.bat文件内容为:if not 0 == %errorlevel% rd /S /Q %2
3. “与”符号 (&)、管道(|) 以及括号 () 是特殊字符,将它们作为参数传递时,必须在其前面加上转义字符 (^) 或引号。例如:你希望通过批处理,生成一个bat文件,然后再调用它。这个bat文件就1条命令:@dir %1 > %2。写批处理命令时,应该写成:@echo @dir %%1 ^> %%2
4. 命令type con > x.txt ,将输入到屏幕的内容输出到文件x.txt中,颇似edit x.txt。
输入内容结束,按Ctrl + Z,回车,即可。
5.choice命令从某些系统中取消了,取而代之的是set /p。如:set /p v = (Y/N)?
使用时最好这样处理一下:@set v=%v:~0,1%
6.显示日期和时间:echo %date% %time%
7.net start XXX启动服务。SC注册服务,注销服务。
文章来源:http://ejimgao.blog.163.com/blog/static/4203001620078545915949