windows指令

  &        无条件执行&符号后面的命令;
  &&      当&&前面的命令成功执行时,执行&&后面的命令,否则不执行;
  ||        当||前面的命令失败时,执行||后面的命令,否则不执行。


%* 表示
%*是表示命令行传过来的参数,%1表示第一个参数,%2表示第二个参数,以此类推。
如执行C:/>hello.bat hello world, %1取出来就是hello %2取出来就是world
如一个bat文件中有 "C:\Users\spfeng\AppData\Roaming\AMD\installsuite\installsuite.exe" %* ;表示把所有bat上的参数都传给installsuite.exe
echo.     表示回车换行
echo.内容   表示吧内容全部输出后换行(如果内容开头有空格也会输出)
echo 内容   表示吧内容全部输出后换行(如果内容开头有空格也会输出。跟上面的不同是echo跟内容间的一个空格是不会输出的。)
 
md 用于创建目录(比mkdir牛)

  、如果文件夹名带空格,那么,md test abc 语句会在当前目录下创建test和abc这两个文件夹;利用这个特点,我们有时候可以收到化繁为简的奇效:如果要创建abc def xyz这三个文件夹,直接使用 md abc def xyz 就行了,而无需连写三条md语句。当然,md abc;def;xyz或者md abc,def,xyz 这样的写法也是可以的。
  、如果文件夹名中含有&,那么,md abc&xyz 会创建abc这个文件夹,并提示说:'xyz'不是内部或外部命令,也不是可运行的程序或批处理文件,这是因为,&是复合语句的连接符号,它把前后两部分视为两条子语句了。   忠告:如果文件夹名含有特殊符号,请不要忘记使用双引号! (如果要创建的文件夹带有空格或&,需要用引号把文件夹名括起来。例如:md "test abc"、md "abc&xyz"。)   
md还有一个比较方便的功能:创建中级目录。也就是说,md a\b\c这样的命令,可以在当前目录下建立文件夹a,然后,在a下建立文件夹b,b之下再建立文件夹c,一气呵成,而无需先md a之后,再cd a,然后md b,再cd b,接着cd b,然后md c。

 

errorlevel与%errorlevel%的区别


参考来源1:“批处理之家”bbs.bathome.cn
errorlevel与%errorlevel%的区别
他们都是判断上个命令的返回值。
当使用if errorlevel 值 cmmand 句式时,它的含义是:如果返回的错误码值大于或等于值 的时候,将执行cmmand
操作;
当使用if %errorlevel%==值 cmmand 句式时,它含义是:如果返回的错误码值等于值 的时候,将执行cmmand操作。
一般上一条命令的执行结果返回的值只有两个,"成功"用0 表示 "失败"用 1 表示,实际上,errorlevel 返回值可
以在0~255 之间,
例如xcopy 默认的errorlevel 值就有5 个,分别表示5 种执行状态:
0复制文件成功
1 未找到复制文件
2 用户通过CTRL C 终止了xcopy操作
4 出现了初始化错误 
5 出现了磁盘写入错误
if %ERRORLEVEL%对数值的比较方法不仅仅限于等于,可以使用参数来控制。
比如:IF %ERRORLEVEL% LEQ 1 goto okay
全部的比较参数如下:

EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于


Findstr ?

使用常规表达式搜索文件中的文本模式。
http://blog.sina.com.cn/s/blog_51a4af870100d89f.html 杀进程及其启动的子进程

TASKKILL /F /IM WBOX.exe /T


.bat文件,右键以管理员运行(win10上不行,还是没有以管理员权限运行,需要单独右键cmd以管理员运行才行),出来的在cmd中的默认路径目录是cmd所在的目录(除非你改了路径变量)
.@echo off @表示不显示本行执行命令(但是还是执行的),echo off关系之后所有的执行命令提示,只显示执行命令的输出结果 注意:如果路径中包含空格,则应该将路径加文件名用双引号括起来。

示例1
@echo off
echo 当前盘符:%~d0
echo 当前盘符和路径(带路径符):%~dp0
echo 当前盘符和路径的短文件名格式(带路径符):%~sdp0
echo 当前批处理全路径:%~f0
echo 当前(CMD默认)目录(注意不是当前目录)(不带路径符):%cd% 我们在C:\Wind - 副本\Wind.NET.Client\WindNET\x64\regExcel.bat右键以管理员运行
执行结果
当前盘符:C:
当前盘符和路径:C:\Wind - 副本\Wind.NET.Client\WindNET\x64\
当前盘符和路径的短文件名格式:C:\WIND-~\WINDNE~.CLI\WindNET\x64\
当前批处理全路径:C:\Wind - 副本\Wind.NET.Client\WindNET\x64\regExcel.bat
当前CMD默认目录(注意不是当前目录):C:\Windows\system32 示例2:
@echo off
set startdir=%~dp0
set b=%cd% @将当前目录保存到参数b中。注意:等号前后不要有空格
C: @转到c盘根目录
cd program files @转到program files文件夹下
cd microsoft visual studio
cd common
cd msdev98
cd bin
msdev "%b%\test.dsp" /MAKE "test- Win32 Release" /REBUILD //(VC6.0)
devenv "%b%\Tool Utility\Tool Utility.sln" /REBUILD //(VS2010)
pause
"%~dp0regsvr32.exe" "%~dp0wdf.dll"
pause
exit 示例3:
if %cd%==%cd:~,% echo 当前目录已经是%cd:~,%盘的根目录&goto end
cd..
set "bd=%cd%"
cd..
set "bbd=%cd%"
if "%bbd%"=="%bd%" (echo 上一级目录是: %cd:~,%盘的根目录
) else call echo 上一级目录是: "%%bd:%bbd%\=%%" //这边的两个%表示转义位一个%
:end
pause 我们在C:\Wind - 副本\Wind.NET.Client\WindNET\x64\regExcel.bat右键以管理员运行
执行结果:(哪怕你把.bat文件放在C盘的根目录下,也是这个结果。如果想要结果不同,必须对CMD默认目录事先进行修改(怎么修改?))
C:\Windows\system32>if C:\Windows\system32 == C:\ echo 当前目录已经是C盘的根目录! & goto end
C:\Windows\system32>cd..
C:\Windows>set "bd=C:\Windows"
C:\Windows>cd..
C:\>set "bbd=C:\"
C:\>if "C:\" == "C:\Windows" (echo 上一级目录是: C盘的根目录! ) else call echo 上一级目录是: "%bd:C:\\=%" //??
上一级目录是: "C:\Windows"

%~0 - 删除引号("),扩展 %0
%~f0 - 将 %0 扩展到一个完全合格的路径名
%~d0 - 仅将 %0 扩展到一个驱动器号
%~p0 - 仅将 %0 扩展到一个路径
%~n0 - 仅将 %0 扩展到一个文件名
%~x0 - 仅将 %0 扩展到一个文件扩展名
%~s0 - 扩展的路径只含有短名
%~a0 - 将 %0 扩展到文件属性
%~t0 - 将 %0 扩展到文件的日期/时间
%~z0 - 将 %0 扩展到文件的大小
%~$PATH:0 - 查找列在 PATH 环境变量的目录,并将 %0扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此修改符会扩展到空字符串

可以组合修改符来取得多重结果:

%~dp0 - 只将 %0 扩展到驱动器号和路径
%~nx0 - 只将 %0 扩展到文件名和扩展名
%~dp$PATH:0 - 在列在 PATH 环境变量中的目录里查找 %0,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza0 - 将 %0 扩展到类似 DIR 的输出行。

在下面的例子中,%0 和 PATH 可以被其他有效数值替换。%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*使用

(启动位置:C:\Wind - 副本\Wind.NET.Client\WindNET\bin\regexcel333.bat)

删除引号("),扩展0:C:
全路径:C:\Wind - 副本\Wind.NET.Client\WindNET\bin\regexcel333.bat
盘符:C:
路径:\Wind - 副本\Wind.NET.Client\WindNET\bin\
文件名:regexcel333
文件扩展名:.bat
扩展的路径只含有短名:C:\WIND-~\WINDNE~.CLI\WindNET\bin\REGEXC~.BAT
扩展到文件属性:--a------
扩展到文件的日期/时间:// :
扩展到文件的大小:
查找列在 PATH 环境变量的目录,并将0扩展到找到的第一个完全合格的名称:C:\Wind -
副本\Wind.NET.Client\WindNET\bin\regexcel333.bat
当前盘符和路径(带路径符):C:\Wind - 副本\Wind.NET.Client\WindNET\bin\
当前盘符和路径的短文件名格式(带路径符):C:\WIND-~\WINDNE~.CLI\WindNET\bin\
文件名和扩展名:regexcel333.bat
将0扩展到类似 DIR 的输出行:--a------ // : C:\Wind - 副本\Wind.N
ET.Client\WindNET\bin\regexcel333.bat
当前(CMD默认)目录(注意不是当前目录)(不带路径符):C:\Windows\system32
 start regsvr32 /s Wdf.dll // start开启一个新窗口运行,且不等结束就继续运行下一条指令。
start regsvr32 /s ..\system\msxml4.dll
cd ..\fonts
call InstallFonts.bat // call要不要,有啥不同?

start 启动一个单独的窗口运行指定的程序或命令。

path                启动目录。

I                      新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。

B             启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断该应用程序的方式。
WAIT           启动应用程序并等待它终止。

command/program      如果它是内部 cmd 命令或批文件,则该命令处理器是使用cmd.exe 的 /K 开关运行的。这表示运行该命令之后,该窗口将仍然存在。

             如果它不是内部 cmd 命令或批文件,则它就是一个程序,并将作为一个窗口化应用程序或控制台应用程序运行。

如果命令扩展被启用,通过命令行或 START 命令的外部命令调用会如下改变:

将文件名作为命令键入,非可执行文件可以通过文件关联调用。(例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和FTYPE 命令。

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示符。如果在命令脚本内执行,该新行为则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的字符串 "CMD","CMD" 会被 COMSPEC 变量的数值所替换。这防止从当前目录提取 CMD.EXE。

如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展名。PATHEXT 变量的默认值是:.COM;.EXE;.BAT;.CMD

  请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,START 会在那个路径上调用Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。

call 从批处理程序调用另一个批处理程序。

CALL [drive:][path]filename [batch-parameters]

batch-parameters 指定批处理程序所需的命令行信息。

===========
ctrl+c 终止当前正在执行的cmd执行
===========

regedit /s /c "multevent\uninstall.reg"
"multevent\drvr.exe" -u MultEvent
del "%SystemRoot%\System32\drivers\MultEventDriver.sys"

===========
参见:http://blog.sina.com.cn/s/blog_605f5b4f0100okdq.html
写程式一样,写bat批处理也一样,都要用到注释的功能,这是为了程式的可读性,当你写特别多的程式或批处理的时候,你就会感觉到了,写着写着,如果程式不注释,到后来再读回原来的时候,好了,自己读起来也不知什么意思了,超晕,所以注释还是一样要打的,批处理也一样哦,
那么批处理的注释是什么,是:
rem 行注释
对了,是这个了,在这个后面跟的就不会给批,使用方法:
rem 打开程式循环开始 
 
在批处理中,段注释有一种比较常用的方法:
     goto start
      = 可以是多行文本,可以是命令
      = 可以包含重定向符号和其他特殊字符
      = 只要不包含 :start 这一行,就都是注释
     :start 另外,还有其他各种注释形式,比如:
     1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
     、rem 注释内容(不能出现重定向符号和管道符号)
     3、echo 注释内容(不能出现重定向符号和管道符号)〉nul
     4、if not exist nul 注释内容(不能出现重定向符号和管道符号)
     5、:注释内容(注释文本不能与已有标签重名)不推荐
     6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)不推荐
     、goto 标签 注释内容(可以用作说明goto的条件和执行内容)
     、:标签 注释内容(可以用作标签下方段的执行内容)
================
set
用于设置一个变量:当变量需要数学运算时用set /a;set /p设置一个从外部读取的变量。
显示出所有的系统环境变量:仅仅输入set。


set /p username=请输入用户名
执行到这句时,会提示请输入用户名,并等待用户从键盘上输入字符
然后将用户输入的内容存在username变量中
追问
那为什么  请输入用户名  这个字符串 不用echo都可以回显到屏幕  呢?
回答
SET /P variable=[promptString]

这是命令的格式,=后面那个是提示字符串,这是个可选参数
若=后面填写了字符串,就会在运行时显示提示,不填写字符串就可以只等待用户输入而不显示提示
此句可以用两条语句替换
echo 请输入用户名
set /p username=



没有variable的,则表示借助set输出promptString


set /p=!str:~%%i,1!
取循环内更换过值的str的第i位起的1个字符给回显,并继续从空设备提取信息给回显(非文本输出的输出结尾会形成没有字符没有回车/换行的结尾,结果是输出信息但不换行),目的不是set,而是借助set输出一个字符.
SET /P =promptString《nul
注意跟echo不同,echo一定会换行;这边不会换行(《nul 主要用途作为代替人工回车确认输入)
==========================================
>是重定向符号(重定向你可以理解为 输入到 的意思)
nul是空设备的意思
把提示输入到空设备就不显示了
>nul 是屏蔽命令的输出内容
比如 pause >nul
1>nul 意思是不显示命令运行的正确提示
2>nul
也是屏蔽的作用,不过是屏蔽错误的内容(即不显示错误提示)
比如
del wind 2>nul
就算没有wind文件,也不会有提示
1>nul 2>nul 
一起用表示正确错误的都不显示

 
>表示是覆盖写入
>>表示添加写入,而不是覆盖写入
 
===============================
 
for命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用FOR命令时,指定变数请使用%%variable
FOR变数参照的替换已被增强。您现在可以使用下列选项语法:~I -删除任何引号("),扩充%I
注意这边是两个%
I作为变量名 如果代表:d:\etc\lang\iml_cache_config.xml
%%~fI -将%I扩充到一个完全合格的路径名
%%~dI -仅将%I扩充到一个驱动器号
%%~pI -仅将%I扩充到一个路径 如:\etc\lang
%%~nI -仅将%I扩充到一个文件名
%%~xI -仅将%I扩充到一个文件延伸名
%%~sI -扩充的路径只含有短名
%%~aI -将%I扩充到文件的文件内容
%%~tI -将%I扩充到文件的日期/时间
%%~zI -将%I扩充到文件的大小
%%~$PATH:I -查找列在路径环境变数的目录,并将%I扩充
到找到的第一个完全合格的名称。如果环境变数
未被定义,或者没有找到文件,此组合键会扩充空字元串可以组合修饰符来得到多重结果:
%%~dpI -仅将%I扩充到一个驱动器号和路径
%%~nxI -仅将%I扩充到一个文件名和延伸名 如:iml_cache_config.xml
%%~fsI -仅将%I扩充到一个带有短名的完整路径名
%%~dp$PATH:i -查找列在路径环境变数的目录,并将%I扩充
到找到的第一个驱动器号和路径。
%%~ftzaI -将%I扩充到类似输出线路的DIR
在以上例子中,%I和PATH可用其他有效数值代替。 %~语法
用一个有效的FOR变数名停止。选取类似%I的大写变数名
比较易读,而且避免与不分大小写的组合键混淆。
===============================
 
@echo off
rem 设置输出日志文件  // 这个是注释
set LogFile="d:\SvnInfo.log"
rem 设置搜索的SVN工作目录
set SearchDir="D:\etc\lang"
@echo.>%LogFile%  // 单个>表示覆盖输入。这边是覆盖输入一个空行并回车换行
for /f "delims=" %%i in ('dir %SearchDir% /a-d /b /s') do ( // /a-d /b /s 表示非目录的所有文件全路径(包括子目录下的)  "delims="表示使用默认分隔符集(空格和跳格键)
for /f %%j in ('"echo %%i | find /i /c "svn""') do (// /i /c "svn" 表示忽略大小写(/i),统计出现svn的行数(/c)
if %%j == 0 ( // 表示没有找到特征
set /p=%%~nxi《nul>>%LogFile% // 表示借用set指令,输出变量i的%%~nx,并不进行换行(《nul)
set /p=";"《nul>>%LogFile%
set /p=%%~pi《nul>>%LogFile% // 表示借用set指令,输出变量i的%%~p,并不进行换行(《nul)
set /p=";"《nul>>%LogFile%
svn info --xml %%i | find /i "《url>" >>%LogFile%)))// 在%%i文件产生的svn xml信息中(有本地工作目录,svn目录,版本号(commit中更准一点)),截取有《url>的那一行,并进行换行。注意一定要实现安装svn命令行方式(在TortoiseSVN的安装中有,如果已经装了,则修复一下就可以了),且在D:\etc\lang目录已经svn管理了。
 
输出结果如:
iml_cache_config.xml;\etc\lang\;《url>http://techsrv.wind.com.cn:8080/svn/Src/lang/1.1/config/iml_cache_config.xml《/url>
MultiLangManagerConfig.xml;\etc\lang\;《url>http://techsrv.wind.com.cn:8080/svn/Src/lang/1.1/config/MultiLangManagerConfig.xml《/url>
 
。。。
 
注意这边是一个%
%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录
cd是转到这个目录,不过我觉得cd /d %~dp0 还好些

选项语法:

    ~0         - 删除任何引号("),扩充 %0
%~f0 - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 - 仅将 %0 扩充到一个驱动器号
%~p0 - 仅将 %0 扩充到一个路径
%~n0 - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0 - 仅将 %0 扩充到一个文件扩展名
%~s0 - 扩充的路径只含有短名(“s”为Short,短的)
%~a0 - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0 - 将 %0 扩充到文件的大小(Size 大小)
%~$PATH:0 - 查找列在路径环境变量的目录,并将 %0 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串 可以组合修饰符来得到多重结果: %~dp0 - 仅将 %0 扩充到一个驱动器号和路径 (获得当前批处理文件的全目录路径)
%~nx0 - 仅将 %0 扩充到一个文件名和扩展名
%~fs0 - 仅将 %0 扩充到一个带有短名的完整路径名
%~dp$PATH:0 - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftza0 - 将 %0 扩充到类似输出线路的 DIR %0为当前批处理文件
如果0换成1为第一个文件,2为第2个
================================================
 

@echo off

if exist %~dp0protocolgen.lock goto WaitLock // %~dp0表示当前目录,带路径符
 
rem generate lock file // 这个是注释
(echo hi)> %~dp0protocolgen.lock
 
rem perform protocol generation
for /f %%i in ('dir %~dp0*proto*.xml /b') do (  // /b则只显示文件和文件夹名称,没其它信息
echo checking %%i   // %%i(在文本中2个%%,直接在cmd中,就一个%)表示当前循环对应的东西。
start /wait /D%~dp0 %~dp0coderex.exe %%i %~dp0
if errorlevel 1 (
echo error: %%i
goto Failed
)
)
 
del %~dp0protocolgen.lock
goto End
 
:WaitLock
rem wait 1 second
ping localhost -n 2 > nul // 如果没用-n 2(发2次,用一秒样子),则表示默认发4次
 
if exist %~dp0protocolgen.lock goto WaitLock
goto End
 
:Failed
del %protocolgen.lock
pause
 
:End 
=====================================================
@echo off&setlocal enabledelayedexpansion // & 分割指令。 setlocal enabledelayedexpansion参见延迟环境变量扩展
@tokens=1-2表示获取第一个第二个符号给%%a和%%b  
@delims==表示使用=代替默认分隔符集(空格和跳格键)
@in指令产生SystemType=x64-based PC (如果是win7 64位)
@for只循环一次
for /f "tokens=1-2 delims==" %%a in ('wmic computersystem get systemtype /value') do (
set ver=%%b
if /i "!ver:~,3!"=="x86" goto 32CPU // /i表示不区分大小写。"!ver:~,3!"表示取ver的前3个字符??
if /i "!ver:~,3!"=="x64" goto 64CPU
rem 可以在这边加pause 查看具体这个for怎么执行的。很有必要加一下看看
)
 
:32CPU
"%systemRoot%\system32\regsvr32.exe" /s "%~dp0wdf.dll" // 获得当前批处理文件的全目录路径+wdf.dll 这边regsvr32.exe在32位系统上是32位的
goto :eof
 
:64CPU
"%systemRoot%\system32\regsvr32.exe" /s "%~dp0wdf.dll"// 这边regsvr32.exe在64位系统上是64位的
"%systemRoot%\system32\regsvr32.exe" /s "%~dp0..\x64\wdf.dll"
 
exit
 
执行结果:
命令行上先解释一下for的脚本,然后再解释一下这次(第一次)循环,并执行这次循环。
C:\Windows\system32>for /F "tokens=1-2 delims==" %a in ('wmic computersystem get
 systemtype /value') do (
set ver=%b
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
 
C:\Windows\system32>(
set ver=
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
请按任意键继续. . .
 
 
按任意键。继续解释一下这次循环,并执行这次循环。
C:\Windows\system32>(
set ver=
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
请按任意键继续. . .
 
按任意键。继续解释一下这次循环,并执行这次循环。
C:\Windows\system32>(
  t ver=x64-based PC
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
请按任意键继续. . .
注意:set没显示全,只显示t
 
注意:有setlocal enabledelayedexpansion,则跳出循环,因为认识延迟环境变量扩展符号!。具体原因:参见下面的绿色部分。
注意:没有setlocal enabledelayedexpansion,则不跳出循环,继续循环,因为不认识延迟环境变量扩展符号!。
C:\Windows\system32>(
set ver=
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
请按任意键继续. . .
 
C:\Windows\system32>(
set ver=
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
请按任意键继续. . .
 
C:\Windows\system32>(
set ver=
 if /I "!ver:~,3!" == "x86" goto 32CPU
 if /I "!ver:~,3!" == "x64" goto 64CPU
 pause
)
请按任意键继续. . .
 
延迟环境变量扩展不按默认值启用。您可以用/V:ON 或 /V:OFF 开关,为 CMD.EXE 的某个调用而
启用或停用延迟环境变量扩展。您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有
调用的延迟扩展,这要通过设置使用 REGEDIT.EXE 的注册表中的一个或两个 REG_DWORD 值:
 
    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
 
        和/或
 
    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
 
到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行开关比注册表设置有优先权。
 
在批处理文件中,SETLOCAL ENABLEDELAYEDEXPANSION 或 DISABLEDELAYEDEXPANSION
参数比 /V:ON 或 /V:OFF 开关有优先权。请参阅 SETLOCAL /?
获取详细信息。
 
如果延迟环境变量扩展被启用,惊叹号字符可在执行时间被用来代替一个环境变量的数值。
/V:ON   使用 ! 作为分隔符启用延迟的环境变量扩展。
        例如,/V:ON 会允许 !var! 在执行时扩展变量 var。var 语法会在输入时
        扩展变量,这与在一个 FOR 循环内不同。
/V:OFF  禁用延迟的环境扩展。
 
 
regsvr32.exe有32位版本和64位版本。对于不同的dll版本,请使用对应的版本的regsvr32.exe。
64位版本的regsvr32.exe不能注册32位版本的dll。
如果64位系统上强制使用32位的regsvr32.exe,请到"%systemRoot%\syswow64\regsvr32.exe"这个路径
 
c:\windows\system32\regsvr32.exe管64bit dll和ocx注册
c:\windows\syswow64\regsvr32.exe管32bit dll和ocx注册
 

接获报案,在Windows 2008注册OCX失败。开启cmd.exe执行regsvr32 boo.ocx时传回错误讯息:

The module "c:\windows\system32\boo.ocx” failed to load. Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. The specified module could not be found.
无法加载模块 c:\windows\system32\boo.ocx"。 请确定二进制文件储存于指定的路径,或进行侦测以检查二进制文件或相依 .DLL 档是否发生问题。找不到指定的模块。

虽然讯息指出问题出在找不到档案,但确定OCX档案是存在的,联想到问题可能出在Windows平台为x64,但OCX是用32位开发的关系。爬文后确认此点,在x64平台注册32位组件(OCX, DLL)应使用c:\windows\sysWOW64\regsvr32.exe,而非c:\windows\system32\regsvr32.exe! (发现有趣的事: system"32"下的regsvr32.exe是64位版,sysWOW"64"下的regsvr32.exe才是32位版。XD)

将boo.ocx复制到c:\windows\sysWOW64,并使用同目录下的regsvr32.exe执行注册。以为就此打完收工,但又接到第二则错误讯息: www.it165.net

"boo.ocx" was loaded but the call to DllRegisterServer failed with error code 0x80040200
模块boo.ocx已加载, 但是呼叫 DllRegisterServer 失败, 错误码为 0x80040200

原因: 同事因不熟悉UAC的眉角,在启动cmd.exe时未Run As Administrator提升为管理者权限,导致0x80040200权限不足错误(印象中,权限不足代码多为0x80004005,本例不然)。重新升为管理者权限执行cmd.exe,注册成功!

 
regsvr32.exe注册一个动态库,成功后点击确定,但regsvr32.exe进程没有退出。
很多时候因为权限不够造成的!
 
=====================================================
 
===初始化部分===
cls 清屏
@ECHO OFF 
SET NGINX_PATH=D:
SET NGINX_DIR=D:\nginx-1.3.6\
color 0a 着色
TITLE Nginx 管理程序 Power By ChenJianxiang 加标题
GOTO MENU 跳转到标签
:MENU 标签
===提示部分===
CLS
ECHO.
ECHO. * * * * Nginx 管理程序 Power By ChenJianxiang * * *
ECHO. * *
ECHO. * 1 启动Nginx *
ECHO. * *
ECHO. * 2 关闭Nginx *
ECHO. * *
ECHO. * 3 重启Nginx *
ECHO. * *
ECHO. * 4 退 出 *
ECHO. * *
ECHO. * * * * * * * * * * * * * * * * * * * * * * * *
ECHO.
===提示输入部分===
       set /p ID= 获得输入变量
===判断输入部分===
IF "%id%"=="1" GOTO cmd1
IF "%id%"=="2" GOTO cmd2
IF "%id%"=="3" GOTO cmd3
IF "%id%"=="4" EXIT
PAUSE 暂停批处理程序,并显示以下消息:    请按任意键继续. . .(继续后续处理)
:cmd1
ECHO.
ECHO.启动Nginx......
IF NOT EXIST %NGINX_DIR%nginx.exe ECHO %NGINX_DIR%nginx.exe不存在
下面两行表示切换到d盘下那个目录中
%NGINX_PATH%
cd %NGINX_DIR%
IF EXIST %NGINX_DIR%nginx.exe start %NGINX_DIR%nginx.exe
ECHO.OK
PAUSE
GOTO MENU
:cmd2
ECHO.
ECHO.关闭Nginx......
taskkill /F /IM nginx.exe > nul
ECHO.OK
PAUSE
GOTO MENU
:cmd3
ECHO.
ECHO.关闭Nginx......
taskkill /F /IM nginx.exe > nul
ECHO.OK
GOTO cmd1
GOTO MENU
 
 
taskkill 杀本地货远程进程
/f  强制终止
/im 进程名称(image name),例如“explor.exe"
/pid 进程id 3352
如:taskkill /f /pid 3352
 
ipconfig /renew  用来检测 Windows IP Configuration。是需要连接DHCP server的。
( 更新(renew)租约,或是租用其它的 IP 地址 )
ipconfig /release 用来 释放(release)这个 IP 地址 
(解约)
 
net 网络相关
 

mstsc------远程桌面连接  
logoff---------注销命令
Nslookup-------IP地址侦测器 
netstat -an----(TC)命令检查接口
rononce -p ----15秒关机
chkdsk.exe-----Chkdsk磁盘检查

tsshutdn-------60秒倒计时关机命令
lusrmgr.msc----本机用户和组

winchat--------XP自带局域网聊天

win+R键打开运行命令行
sndrec32-------录音机
explorer-------打开资源管理器

services.msc---本地服务设置
oobe/msoobe /a----检查XP是否激活
notepad--------打开记事本

cleanmgr-------**整理
net start messenger----开始信使服务
compmgmt.msc---计算机管理
net stop messenger-----停止信使服务
conf-----------启动 netmeeting
dvdplay--------DVD播放器
charmap--------启动字符映射表
diskmgmt.msc---磁盘管理实用程序
calc-----------启动计算器
dfrg.msc-------磁盘碎片整理程序
devmgmt.msc--- 设备管理器
drwtsn32------ 系统医生
dxdiag---------检查DirectX信息
regedt32-------注册表编辑器
Msconfig.exe---系统配置实用程序
rsop.msc-------组策略结果集
mem.exe--------显示内存使用情况
regedit.exe----注册表
progman--------程序管理器
winmsd---------系统信息
perfmon.msc----计算机性能监测程序
winver---------检查Windows版本
sfc /scannow-----扫描错误并复原
taskmgr-----任务管理器(2000/xp/2003)
wmimgmt.msc----打开windows管理体系结构(WMI)
wupdmgr--------windows更新程序
w脚本--------windows脚本宿主设置
write----------写字板

winmsd---------系统信息
wiaacmgr-------扫描仪和照相机向导
mem.exe--------显示内存使用情况
Msconfig.exe---系统配置实用程序
mplayer2-------简易widnows media player
mspaint--------画图板 
mplayer2-------媒体播放机
magnify--------放大镜实用程序
mmc------------打开控制台
mobsync--------同步命令
dxdiag---------检查DirectX信息
drwtsn32------ 系统医生
devmgmt.msc--- 设备管理器
dfrg.msc-------磁盘碎片整理程序
diskmgmt.msc---磁盘管理实用程序
dcomcnfg-------打开系统组件服务
ddeshare-------打开DDE共享设置
dvdplay--------DVD播放器
net stop messenger-----停止信使服务
net start messenger----开始信使服务
notepad--------打开记事本
nslookup-------网络管理的工具向导
ntbackup-------系统备份和还原
narrator-------屏幕“讲述人”
ntmsmgr.msc----移动存储管理器
ntmsoprq.msc---移动存储管理员操作请求 
syncapp--------创建一个公文包
sysedit--------系统配置编辑器
sigverif-------文件签名验证程序
sndrec32-------录音机
shrpubw--------创建共享文件夹
secpol.msc-----本地安全策略
syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc---本地服务设置
Sndvol32-------音量控制程序
sfc.exe--------系统文件检查器
sfc /scannow---windows文件保护
tsshutdn-------60秒倒计时关机命令
tourstart------xp简介(安装完成后出现的漫游xp程序)
taskmgr--------任务管理器
eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打开资源管理器
packager-------对象包装程序
perfmon.msc----计算机性能监测程序
progman--------程序管理器
regedit.exe----注册表
rsop.msc-------组策略结果集
regedt32-------注册表编辑器
rononce -p ----15秒关机
regsvr32 /u *.dll----停止dll文件运行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁盘检查
certmgr.msc----证书管理实用程序
calc-----------启动计算器
charmap--------启动字符映射表
cliconfg-------SQL SERVER 客户端网络实用程序
Clipbrd--------剪贴板查看器
conf-----------启动netmeeting
compmgmt.msc---计算机管理
ciadv.msc------索引服务程序
osk------------打开屏幕键盘
odbcad32-------ODBC数据源管理器
oobe/msoobe /a----检查XP是否激活
lusrmgr.msc----本机用户和组
logoff---------注销命令
iexpress-------木马捆绑工具,系统自带
fsmgmt.msc-----共享文件夹管理器
utilman--------辅助工具管理器
gpedit.msc-----组策略
1.最基本,最常用的,测试物理网络的ping 192.168.0.8 -t ,参数-t是等待用户去中断测试
2.查看DNS、IP、Mac等
A.Win98:winipcfg
B.Win2000以上:Ipconfig/all
C.NSLOOKUP:如查看河北的DNS
C:\>nslookup
Default Server: ns.hesjptt.net.cn
Address: 202.99.160.68
>server 202.99.41.2 则将DNS改为了41.2
> pop.pcpop.com
Server: ns.hesjptt.net.cn
Address: 202.99.160.68
Non-authoritative answer:
Name: pop.pcpop.com
Address: 202.99.160.212
3.网络信使 (经常有人问的~)
Net send 计算机名/IP|* (广播) 传送内容,注意不能跨网段
net stop messenger 停止信使服务,也可以在面板-服务修改
net start messenger 开始信使服务
4.探测对方对方计算机名,所在的组、域及当前用户名(追捕的工作原理)
ping -a IP -t ,只显示NetBios名
nbtstat -a 192.168.10.146 比较全的
5.netstat -a 显示出你的计算机当前所开放的所有端口 netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等
6.探测arp绑定(动态和静态)列表,显示所有连接了我的计算机,显示对方IP和MAC地址
arp -a
7.在代理服务器端
捆绑IP和MAC地址,解决局域网内盗用IP!:
ARP -s 192.168.10.59 00 -50-ff-6c-08-75
解除网卡的IP与MAC地址的绑定:
arp -d 网卡IP
8.在网络邻居上隐藏你的计算机 (让人家看不见你!)
net config server /hidden:yes
net config server /hidden:no 则为开启
9.几个net命令
A.显示当前工作组服务器列表 net view,当不带选项使用本命令时,它就会显示当前域或网络上的计算机上的列表。
比如:查看这个IP上的共享资源,就可以
C:\>net view 192.168.10.8
在 192.168.10.8 的共享资源
资源共享名 类型 用途 注释
--------------------------------------
网站服务 Disk
命令成功完成。
B.查看计算机上的用户帐号列表 net user
C.查看网络链接 net use
例如:net use z: \\192.168.10.8\movie 将这个IP的movie共享目录映射为本地的Z盘
D.记录链接 net session
例如:
C:\>net session
计算机 用户名 客户类型 打开空闲时间
------------------------------------------------
\\192.168.10.110 ROME Windows 2000 2195 0 00:03:12
\\192.168.10.51 ROME Windows 2000 2195 0 00:00:39
命令成功完成。
10.路由跟踪命令
A.tracert pop.pcpop.com
B.pathping pop.pcpop.com 除了显示路由外,还提供325S的分析,计算丢失包的%
11.关于共享安全的几个命令
A.查看你机器的共享资源 net share
B.手工删除共享(可以编个bat文件,开机自运行,把共享都删了!)
net share c$ /d
net share d$ /d
net share ipc$ /d
net share admin$ /d
注意$后有空格。
C.增加一个共享:
c:\net share mymovie=e:\downloads\movie /users:1
mymovie 共享成功。
同时限制链接用户数为1人。
12.在DOS行下设置静态IP
A.设置静态IP
CMD
netsh
netsh>int
interface>ip
interface ip>set add "本地链接" static IP地址 mask gateway
B.查看IP设置
interface ip>show address
Arp
显示和修改“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则 arp 命令将显示帮助信息。
语法
arp [-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]] [-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]]
参数
-a [InetAddr] [-N IfaceAddr]
显示所有接口的当前 ARP 缓存表。要显示指定 IP 地址的 ARP 缓存项,请使用带有 InetAddr 参数的 arp -a,此处的 InetAddr 代表指定的 IP 地址。要显示指定接口的 ARP 缓存表,请使用 -N IfaceAddr 参数,此处的 IfaceAddr 代表分配给指定接口的 IP 地址。-N 参数区分大小写。
-g [InetAddr] [-N IfaceAddr]
与 -a 相同。
-d InetAddr [IfaceAddr]
删除指定的 IP 地址项,此处的 InetAddr 代表 IP 地址。对于指定的接口,要删除表中的某项,请使用 IfaceAddr参数,此处的 IfaceAddr 代表分配给该接口的 IP 地址。要删除所有项,请使用星号 (*) 通配符代替 InetAddr。
-s InetAddr EtherAddr [IfaceAddr]
向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表分配给该接口的 IP 地址。
/?
在命令提示符显示帮助。
注释
InetAddr 和 IfaceAddr 的 IP 地址用带圆点的十进制记数法表示。
物理地址 EtherAddr 由六个字节组成,这些字节用十六进制记数法表示并且用连字符隔开(比如,00-AA-00-4F-2A-9C)。
通过 -s 参数添加的项属于静态项,它们不会 ARP 缓存中超时。如果终止 TCP/IP 协议后再启动,这些项会被删除。要创建永久的静态 ARP 缓存项,请在批处理文件中使用适当的 arp 命令并通过“计划任务程序”在启动时运行该批处理文件。
只有当网际协议 (TCP/IP) 协议在网络连接中安装为网络适配器属性的组件时,该命令才可用。
范例
要显示所有接口的 ARP 缓存表,可键入:
arp -a
对于指派的 IP 地址为 10.0.0.99 的接口,要显示其 ARP 缓存表,可键入:
arp -a -N 10.0.0.99
要添加将 IP 地址 10.0.0.80 解析成物理地址 00-AA-00-4F-2A-9C 的静态 ARP 缓存项,可键入:
arp -s 10.0.0.80 00-AA-00-4F-2A-9C
At
计划在指定时间和日期在计算机上运行命令和程序。at 命令只能在“计划”服务运行时使用。如果在没有参数的情况下使用,则 at 列出已计划的命令。
语法
at [\\ComputerName] [{[ID] [/delete]|/delete [/yes]}]
at [[\\ComputerName] hours:minutes [/interactive] [{/every:date[,...]|/next:date[,...]}] command]
参数
\\computername
指定远程计算机。如果省略该参数,则 at 计划本地计算机上的命令和程序。
ID
指定指派给已计划命令的识别码。
/delete
取消已计划的命令。如果省略了 ID,则计算机中所有已计划的命令将被取消。
/yes
删除已计划的事件时,对来自系统的所有询问都回答“是”。
hours:minutes
指定命令运行的时间。该时间用 24 小时制(即从 00:00 [午夜] 到 23:59)的 小时: 分钟格式表示。
/interactive
对于在运行 command 时登录的用户,允许 command 与该用户的桌面进行交互。
/every:
在每个星期或月的指定日期(例如,每个星期四,或每月的第三天)运行 command 命令。
date
指定运行命令的日期。可以指定一周的某日或多日(即,键入 M、T、W、Th、F、S、Su)或一个月中的某日或多日(即,键入从 1 到31 之间的数字)。用逗号分隔多个日期项。如果省略了 date,则 at 使用该月的当前日。
/next:
在下一个指定日期(比如,下一个星期四)到来时运行 command。
command
指定要运行的 Windows 命令、程序(.exe 或 .com 文件)或批处理程序(.bat 或 .cmd 文件)。当命令需要路径作为参数时,请使用绝对路径,也就是从驱动器号开始的整个路径。如果命令在远程计算机上,请指定服务器和共享名的通用命名协定 (UNC) 符号,而不是远程驱动器号。
/?
在命令提示符显示帮助。
注释
Schtasks 是功能更为强大的超集命令行计划工具,它含有 at 命令行工具中的所有功能。对于所有的命令行计划任务,都可以使用 schtasks 来替代 at。有关 schtasks 的详细信息,请参阅“相关主题”。
使用 at
使用 at 命令时,要求您必须是本地 Administrators 组的成员。
加载 Cmd.exe
在运行命令之前,At 不会自动加载 Cmd.exe (命令解释器)。如果没有运行可执行文件 (.exe),则在命令开头必须使用如下所示的方法专门加载 Cmd.exe:
cmd /c dir > c:\test.out。
查看已计划的命令
当不带命令行选项使用 at 时,计划任务会出现在类似于以下格式的表中:
Status ID Day Time Command Line
OK 1 Each F 4:30 PM net send group leads status due
OK 2 Each M 12:00 AM chkstor > check.file
OK 3 Each F 11:59 PM backup2.bat
包含标识号 (ID)
当在命令提示下使用带有标识号 (ID) 的 at 命令时,单个任务项的信息会显示在类似于下面的格式中:
Task ID: 1
Status:OK
Schedule:Each F
Time of Day:4:30 PM
Command:net send group leads status due当计划带有 at 的命令(尤其是带有命令行选项的命令)后,要通过键入不带命令行选项的 at 来检查该命令语法是否输入正确。如果显示在“命令行”列中的信息不正确,请删除该命令,然后重新键入它。如果还不正确,则可以在重新键入该命令时让它少带 些命令行选项。
查看结果
使用 at 的已经计划的命令作为后台程序运行。运行结果不会显示在计算机上。要将输出重定向到文件,请使用重定向符号 (> )。如果将输出重定向到文件,则不论是在命令行还是在批处理文件中使用 at,都需要在重定向符号之前使用转义符 (^)。例如,要重定向输出到 Output.text 文件,则要键入:
at 14:45 c:\test.bat ^>c:\output.txt
执行命令的当前目录为 systemroot 文件夹。
更改系统时间
在使用 at 命*了要运行的命令之后,如果更改了计算机的系统时间,则通过键入不带命令行选项的 at 可使 at 计划程序与修改后的系统时间同步。
存储命令
已计划的命令存储在注册表中。这样,如果重新启动“计划”服务,则不会丢失计划任务。
连接到网络驱动器
对于需要访问网络的计划作业,请不要使用已重新定向的驱动器。“计划”服务可能无法访问这些重定向的驱动器,或者,在该计划任务运行时如果有其他用户登录,则这些重定向的驱动器可能不会出现。因此,对于计划作业,请使用 UNC 路径。例如:
at 1:00pm my_backup \\server\share
请不要使用下述语法(其中 x: ?表示由用户建立的连接):
at 1:00pm my_backup x:
如果计划了一个使用驱动器号的 at 命令来连接共享目录,则应包含一个 at 命令以使在完成该驱动器的使用时断开与驱动器的连接。如果不能断开与驱动器的连接,则在命令提示下,所指派的驱动器号将不可用。
范例
要显示 Marketing 服务器上已计划的命令列表,请键入:
at \\marketing
要了解服务器 Corp 上标识号为 3 的命令的详细信息,请键入:
at \\corp 3
要计划在上午 8:00 于 Corp 服务器上运行网络共享命令,并将该列表重定向到 Maintenance 服务器的 Corp.txt 文件(位于 Reports 共享目录下)中,请键入:
at \\corp 08:00 cmd /c "net share reports=d:\marketing\reports >> \\maintenance\reports\corp.txt"
为了在每五天后的午夜将 Marketing 服务器的硬盘驱动器备份到磁带驱动器,首先创建名为 Archive.cmd 的批处理程序(它含有备份命令),然后计划该批处理程序的运行,为此请键入:
at \\marketing 00:00 /every:5,10,15,20,25,30 archive
要取消当前服务器上已计划的所有命令,请按下述方法清除 at 计划信息:
at /delete
如果要运行的命令不是可执行 (.exe) 文件,请按如下所示的方法在该命令之前使用 cmd /c 来加载 Cmd.exe:
cmd /c dir > c:\test.out。
Rsh
在运行 RSH 服务的远程计算机上运行命令。Windows XP 和 Windows 2000 不提供 RSH 服务。Windows 2000 Server Resource Kit 提供名为 Rshsvc.exe 的 RSH 服务。使用不带参数的 rsh 显示帮助。
语法
rsh [Host] [-l UserName] [-n] [Command]
参数
Host
指定运行 command 的远程计算机。
-l UserName
指定远程计算机上使用的用户名。在省略情况下,使用当前登录用户的名称。
-n
将 rsh 的输入重定向到 NULL 设备。这防止本地计算机命令结果的显示。
Command
指定要运行的命令。
/?
在命令提示符显示帮助。

Nslookup-------IP地址侦测器
explorer-------打开资源管理器
logoff---------注销命令
tsshutdn-------60秒倒计时关机命令
lusrmgr.msc----本机用户和组
services.msc---本地服务设置
oobe/msoobe /a----检查XP是否激活
notepad--------打开记事本
cleanmgr-------**整理
net start messenger----开始信使服务
net stop messenger-----停止信使服务
conf-----------启动 netmeeting
dvdplay--------DVD播放器
charmap--------启动字符映射表
calc-----------启动计算器
dfrg.msc-------磁盘碎片整理程序
chkdsk.exe-----Chkdsk磁盘检查
devmgmt.msc--- 设备管理器
drwtsn32------ 系统医生
rononce -p ----15秒关机
rsop.msc-------组策略结果集
mem.exe--------显示内存使用情况
winmsd---------系统信息
winver---------检查Windows版本
sfc /scannow-----扫描错误并复原
wupdmgr--------windows更新程序
winmsd---------系统信息
winchat--------XP自带局域网聊天
mstsc----------远程桌面连接

Wscript.exe (若是在命令行下,则为 Cscript.exe) 用于执行.wsh,.vbs,.js等。是个脚本执行环境,而不是一个脚本解析引擎。

  会调用到VBScript 和 JScript 两种语言的解析引擎(是 Windows 系统中原有的),而其它脚本语言的解析引擎,如 PERL、TCL等,需要用户另行定义

 

上一篇:git&sourcetree安装及在IntelliIJ下拉取项目基础使用


下一篇:使用VisualSVN建立SVN Server