cmd命令行笔记

help

help 在 "C:\Windows\System32\help.exe"

C:\Users\fjcqy>help

有关某个命令的详细信息,请键入 HELP 命令名
ASSOC          显示或修改文件扩展名关联。
ATTRIB         显示或更改文件属性。
BREAK          设置或清除扩展式 CTRL+C 检查。
BCDEDIT        设置启动数据库中的属性以控制启动加载。
CACLS          显示或修改文件的访问控制列表(ACL)。
CALL           从另一个批处理程序调用这一个。
CD             显示当前目录的名称或将其更改。
CHCP           显示或设置活动代码页数。
CHDIR          显示当前目录的名称或将其更改。
CHKDSK         检查磁盘并显示状态报告。
CHKNTFS        显示或修改启动时间磁盘检查。
CLS            清除屏幕。
CMD            打开另一个 Windows 命令解释程序窗口。
COLOR          设置默认控制台前景和背景颜色。
COMP           比较两个或两套文件的内容。
COMPACT        显示或更改 NTFS 分区上文件的压缩。
CONVERT        将 FAT 卷转换成 NTFS。您不能转换
               当前驱动器。
COPY           将至少一个文件复制到另一个位置。
DATE           显示或设置日期。
DEL            删除至少一个文件。
DIR            显示一个目录中的文件和子目录。
DISKCOMP       比较两个软盘的内容。
DISKCOPY       将一个软盘的内容复制到另一个软盘。
DISKPART       显示或配置磁盘分区属性。
DOSKEY         编辑命令行、调用 Windows 命令并创建宏。
DRIVERQUERY    显示当前设备驱动程序状态和属性。
ECHO           显示消息,或将命令回显打开或关上。
ENDLOCAL       结束批文件中环境更改的本地化。
ERASE          删除一个或多个文件。
EXIT           退出 CMD.EXE 程序(命令解释程序)。
FC             比较两个文件或两个文件集并显示它们之间的不同。
FIND           在一个或多个文件中搜索一个文本字符串。
FINDSTR        在多个文件中搜索字符串。
FOR            为一套文件中的每个文件运行一个指定的命令。
FORMAT         格式化磁盘,以便跟 Windows 使用。
FSUTIL         显示或配置文件系统的属性。
FTYPE          显示或修改用在文件扩展名关联的文件类型。
GOTO           将 Windows 命令解释程序指向批处理程序
               中某个带标签的行。
GPRESULT       显示机器或用户的组策略信息。
GRAFTABL       启用 Windows 在图形模式显示扩展字符集。
HELP           提供 Windows 命令的帮助信息。
ICACLS         显示、修改、备份或还原文件和
 目录的 ACL。
IF             在批处理程序中执行有条件的处理过程。
LABEL          创建、更改或删除磁盘的卷标。
MD             创建一个目录。
MKDIR          创建一个目录。
MKLINK         创建符号链接和硬链接
MODE           配置系统设备。
MORE           逐屏显示输出。
MOVE           将一个或多个文件从一个目录移动到另一个目录。
OPENFILES      显示远程用户为了文件共享而打开的文件。
PATH           为可执行文件显示或设置搜索路径。
PAUSE          停止批处理文件的处理并显示信息。
POPD           还原由 PUSHD 保存的当前目录上一次的值。
PRINT          打印一个文本文件。
PROMPT         改变 Windows 命令提示。
PUSHD          保存当前目录,然后对其进行更改。
RD             删除目录。
RECOVER        从损坏的磁盘中恢复可读取的信息。
REM            记录批处理文件或 CONFIG.SYS 中的注释。
REN            重新命名文件。
RENAME         重新命名文件。
REPLACE        替换文件。
RMDIR          删除目录。
ROBOCOPY       复制文件和目录树的高级实用程序
SET            显示、设置或删除 Windows 环境变量。
SETLOCAL       开始用批文件改变环境的本地化。
SC             显示或配置服务(后台处理)。
SCHTASKS       安排命令和程序在一部计算机上按计划运行。
SHIFT          调整批处理文件中可替换参数的位置。
SHUTDOWN       让机器在本地或远程正确关闭。
SORT           将输入排序。
START          打开单独视窗运行指定程序或命令。
SUBST          将驱动器号与路径关联。
SYSTEMINFO     显示机器的具体的属性和配置。
TASKLIST       显示包括服务的所有当前运行的任务。
TASKKILL       终止正在运行的进程或应用程序。
TIME           显示或设置系统时间。
TITLE          设置 CMD.EXE 会话的窗口标题。
TREE           以图形显示启动器或路径的目录结构。
TYPE           显示文本文件的内容。
VER            显示 Windows 的版本。
VERIFY         告诉 Windows 验证文件是否正确写入磁盘。
VOL            显示磁盘卷标和序列号。
XCOPY          复制文件和目录树。
WMIC           在交互命令外壳里显示 WMI 信息。

有关工具的详细信息,请参阅联机帮助中的命令行参考。

set

显示、设置或删除 cmd.exe 环境变量。

SET [variable=[string]]

  variable  指定环境变量名。
  string    指定要指派给变量的一系列字符串。

要显示当前环境变量,键入不带参数的 SET。

如果命令扩展被启用,SET 会如下改变:

可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配
SET 命令已使用的名称的所有变量的值。例如:

    SET P

会显示所有以字母 P 打头的变量

如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL
设置成 1。

SET 命令不允许变量名含有等号。

在 SET 命令中添加了两个新命令行开关:

    SET /A expression
    SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

    ()                  - 分组
    ! ~ -               - 一元运算符
    * / %               - 算数运算符
    + -                 - 算数运算符
    << >>               - 逻辑移位
    &                   - 按位“与”
    ^                   - 按位“异”
    |                   - 按位“或”
    = *= /= %= += -=    - 赋值
      &= ^= |= <<= >>=
    ,                   - 表达式分隔符

如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用
引号扩起来。在表达式中的任何非数字字符串键作为环境变量
名称,这些环境变量名称的值已在使用前转换成数字。如果指定
了一个环境变量名称,但未在当前环境中定义,那么值将被定为
零。这使您可以使用环境变量值做计算而不用键入那些 % 符号
来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,
那么它显示该表达式的最后值。该分配的操作符在分配的操作符
左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制
有 0 前缀的,数字值为十进位数字。因此,0x12 与 18 和 022
相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,
因为 8 和 9 不是有效的八进制位数。(& )

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入
行之前,显示指定的 promptString。promptString 可以是空的。

环境变量替换已如下增强:

    %PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

也可以为扩展名指定子字符串。

    %PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏
移量 10)字符开始的五个字符。如果没有指定长度,则采用默认
值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,
使用的数字则是环境变量数值长度加上指定的偏移量或长度。

    %PATH:~-10%

会提取 PATH 变量的最后十个字符。

    %PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。

终于添加了延迟环境变量扩充的支持。该支持总是按默认值被
停用,但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。
请参阅 CMD /?

考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境
变量扩充是很有用的,而不是执行的时候。以下例子说明直接
变量扩充的问题:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "%VAR%" == "after" @echo If you see this, it worked
    )

不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中
的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个
复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和
"after",这两者永远不会相等。同样,以下这个例子也不会达到
预期效果:

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

原因是,它不会在目前的目录中建立一个文件列表,而只是将
LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在
FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量
是空的。因此,我们真正执行的 FOR 循环是:

    for %i in (*) do set LIST= %i

这个循环继续将 LIST 设成找到的最后一个文件。

延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行
时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面
例子写成以下所示,以达到预期效果:

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo If you see this, it worked
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

如果命令扩展被启用,有几个动态环境变量可以被扩展,但不会出现在 SET 显示的变
量列表中。每次变量数值被扩展时,这些变量数值都会被动态计算。如果用户用这些
名称中任何一个明确定义变量,那个定义会替代下面描述的动态定义:

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

%HIGHESTNUMANODENUMBER% - 扩展到此计算机上的最高 NUMA 节点号。

cmd

C:\Users\fjcqy>cmd /?

启动 Windows 命令解释器的一个新实例

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      执行字符串指定的命令然后终止
/K      执行字符串指定的命令但保留
/S      修改 /C 或 /K 之后的字符串处理(见下)
/Q      关闭回显
/D      禁止从注册表执行 AutoRun 命令(见下)
/A      使向管道或文件的内部命令输出成为 ANSI
/U      使向管道或文件的内部命令输出成为
        Unicode
/T:fg   设置前台/背景颜色(详细信息见 COLOR /?)
/E:ON   启用命令扩展(见下)
/E:OFF  禁用命令扩展(见下)
/F:ON   启用文件和目录名完成字符(见下)
/F:OFF  禁用文件和目录名完成字符(见下)
/V:ON   使用 ! 作为分隔符启用延迟的环境变量
        扩展。例如,/V:ON 会允许 !var! 在执行时
        扩展变量 var。var 语法会在输入时
        扩展变量,这与在一个 FOR
        循环内不同。
/V:OFF  禁用延迟的环境扩展。

注意,如果字符串加有引号,可以接受用命令分隔符 "&&"
分隔多个命令。另外,由于兼容性
原因,/X 与 /E:ON 相同,/Y 与 /E:OFF 相同,且 /R 与
/C 相同。任何其他开关都将被忽略。

如果指定了 /C 或 /K,则会将该开关之后的
命令行的剩余部分作为一个命令行处理,其中,会使用下列逻辑
处理引号(")字符:

    1.  如果符合下列所有条件,则会保留
        命令行上的引号字符:

        - 不带 /S 开关
        - 正好两个引号字符
        - 在两个引号字符之间无任何特殊字符,
          特殊字符指下列字符: &<>()@^|
        - 在两个引号字符之间至少有
          一个空格字符
        - 在两个引号字符之间的字符串是某个
          可执行文件的名称。

    2.  否则,老办法是看第一个字符
        是否是引号字符,如果是,则去掉首字符并
        删除命令行上最后一个引号,保留
        最后一个引号之后的所有文本。

如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找
以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或
两个都存在,这两个变量会先被执行。

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

命令扩展是按默认值启用的。您也可以使用 /E:OFF ,为某一
特定调用而停用扩展。您
可以在机器上和/或用户登录会话上
启用或停用 CMD.EXE 所有调用的扩展,这要通过设置使用
REGEDIT.EXE 的注册表中的一个或两个 REG_DWORD 值:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

到 0x1 或 0x0。用户特定设置
比机器设置有优先权。命令行
开关比注册表设置有优先权。

在批处理文件中,SETLOCAL ENABLEEXTENSIONS 或 DISABLEEXTENSIONS 参数
比 /E:ON 或 /E:OFF 开关有优先权。请参阅 SETLOCAL /? 获取详细信息。

命令扩展包括对下列命令所做的
更改和/或添加:

    DEL or ERASE
    COLOR
    CD or CHDIR
    MD or MKDIR
    PROMPT
    PUSHD
    POPD
    SET
    SETLOCAL
    ENDLOCAL
    IF
    FOR
    CALL
    SHIFT
    GOTO
    START (同时包括对外部命令调用所做的更改)
    ASSOC
    FTYPE

有关特定详细信息,请键入 commandname /? 查看。

延迟环境变量扩展不按默认值启用。您
可以用/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 /?
获取详细信息。

如果延迟环境变量扩展被启用,
惊叹号字符可在执行时间被用来
代替一个环境变量的数值。

您可以用 /F:ON 或 /F:OFF 开关为 CMD.EXE 的某个
调用而启用或禁用文件名完成。您可以在计算上和/或
用户登录会话上启用或禁用 CMD.EXE 所有调用的完成,
这可以通过使用 REGEDIT.EXE 设置注册表中的下列
 REG_DWORD 的全部或其中之一:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

        和/或

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

由一个控制字符的十六进制值作为一个特定参数(例如,0x4
是Ctrl-D,0x6 是 Ctrl-F)。用户特定设置优先于机器设置。
命令行开关优先于注册表设置。

如果完成是用 /F:ON 开关启用的,两个要使用的控制符是:
目录名完成用 Ctrl-D,文件名完成用 Ctrl-F。要停用
注册表中的某个字符,请用空格(0x20)的数值,因为此字符
不是控制字符。

如果键入两个控制字符中的一个,完成会被调用。完成功能将
路径字符串带到光标的左边,如果没有通配符,将通配符附加
到左边,并建立相符的路径列表。然后,显示第一个相符的路
径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,
重复按同一个控制字符会循环显示相符路径的列表。将 Shift
键跟控制字符同时按下,会倒着显示列表。如果对该行进行了
任何编辑,并再次按下控制字符,保存的相符路径的列表会被
丢弃,新的会被生成。如果在文件和目录名完成之间切换,会
发生同样现象。两个控制字符之间的唯一区别是文件完成字符
符合文件和目录名,而目录完成字符只符合目录名。如果文件
完成被用于内置式目录命令(CD、MD 或 RD),就会使用目录
完成。
用引号将相符路径括起来,完成代码可以正确处理含有空格
或其他特殊字符的文件名。同时,如果备份,然后从行内调用
文件完成,完成被调用时位于光标右方的文字会被调用。

需要引号的特殊字符是:
     <space>
     ()[]{}^=;!'+,`~(&()

start

C:\Users\fjcqy>start /?

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

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     在窗口标题栏中显示的标题。
    path        启动目录。
    B           启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。
                除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断
                该应用程序的方式。
    I           新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。
    MIN         以最小化方式启动窗口。
    MAX         以最大化方式启动窗口。
    SEPARATE    在单独的内存空间中启动 16 位 Windows 程序。
    SHARED      在共享内存空间中启动 16 位 Windows 程序。
    LOW         在 IDLE 优先级类中启动应用程序。
    NORMAL      在 NORMAL 优先级类中启动应用程序。
    HIGH        在 HIGH 优先级类中启动应用程序。
    REALTIME    在 REALTIME 优先级类中启动应用程序。
    ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。
    BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。
    NODE        将首选非一致性内存结构 (NUMA) 节点指定为十进制整数。
    AFFINITY    将处理器关联掩码指定为十六进制数字。进程被限制在这些
                处理器上运行。

                当 /AFFINITY 和 /NODE 结合时,会对关联掩码进行不同的解释。
                指定关联掩码,正如 NUMA 节点的处理器掩码正确移动到零位
                起始位置一样。进程被限制在指定关联掩码和 NUMA 节点之间的
                那些通用处理器上运行。如果没有通用处理器,则进程被限制在
                指定的 NUMA 节点上运行。
    WAIT        启动应用程序并等待它终止。
    command/program
                如果它是内部 cmd 命令或批文件,则该命令处理器是使用
                cmd.exe 的 /K 开关运行的。这表示运行该命令之后,该窗口
                将仍然存在。

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

    parameters  这些是传递给 command/program 的参数。

注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式创建进程。例如,
可以创建两个完全通过共享内存互相通信的进程以共享相同的首选 NUMA 节点,
从而最大限度地减少内存延迟。如有可能,它们即会分配来自相同 NUMA 节点的
内存,并且会在指定节点之外的处理器上自由运行。

    启动 /NODE 1 application1.exe
    启动 /NODE 1 application2.exe

这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器上运行。在以下
示例中, application1 在节点的两个低顺序处理器上运行,而 application2
在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑
处理器。请注意,节点号可更改为该计算机的任何有效节点号,而无需更改关联
掩码。

    启动 /NODE 1 /AFFINITY 0x3 application1.exe
    启动 /NODE 1 /AFFINITY 0xc application2.exe

如果命令扩展被启用,通过命令行或 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。

基础

字符串操作

字符串选取:
set str=12345 
set str=%str:~0,3% 
echo %str% 
结果123

字符串替换:
set str=12345 
set str=%str:234=000% 
echo %str% 
结果10005

获取返回值

1、重定向到文件
findstr .* 1.txt > result.txt

2、把findstr结果赋值给变量
for /f "delims=" %%1 in ('findstr .* 1.txt')do set a=%%1
echo %a%


%ERRORLEVEL%
if %errorlevel%==值 cmmand 句式时,它含义是:如果返回的错误码值等于值 的时候,将执行cmmand操作。
一般上一条命令的执行结果返回的值只有两个,"成功"用0 表示 "失败"用 1 表示

暂停

暂停5秒

1、
ping -n 5 127.0.0.1 > nul

2、
choice /T 5 /C ync /CS /D y /n > nul

3、
echo Wscript.Sleep Wscript.Arguments(0) * 1000 > sleep.vbs
sleep.vbs 5

4、新方法
timeout /t 3
timeout /t 3 /nobreak

判断路径是文件还是目录

@echo off

1、
dir /ad /b %1% > nul 2>&1
IF "%ERRORLEVEL%"=="0" echo %1 is a dir.
IF "%ERRORLEVEL%"=="1" echo %1 is a file.

2、
cd %1% > nul 2>&1
IF "%ERRORLEVEL%"=="0" echo %1 is a dir.
IF "%ERRORLEVEL%"=="1" echo %1 is a file.

pause

去除数值前面的0

前面带0的数值的运算,08、09会被当成8进制,
对于长度固定为4的数字串,可以把数字字符串通过加减运算来去掉不用的0:

set n=0020
set /a n=1%n%-10000

set n=0020
set m=0302
set /a n=1%n%-1%m%

字符串长度

重定向

句柄            句柄的数字代号            描述 
STDIN               0                      键盘输入 
STDOUT              1                      输出到命令提示符窗口 
STDERR              2                      错误输出到命令提示符窗口 
UNDEFINED           3-9                    句柄由应用程序单独定义,它们是各个工具特有的

重定向操作符          描述 
          >                将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。 
          <                从文件而不是从键盘或句柄读入命令输入。 
          >>               将命令输出添加到文件末尾而不删除文件中已有的信息。 
          >&               将一个句柄的输出写入到另一个句柄的输入中。 
          <&               从一个句柄读取输入并将其写入到另一个句柄输出中。
          |                从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。

> 和 >> 的区别在于:> 用于新建(覆盖)而>>用于追加


& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。
1>&2 意思是把标准输出重定向到标准错误.
2>&1 意思是把标准错误输出重定向到标准输出。
&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中

-------------------shell-----------------------
要想让标准错误输出和标准输入一样都被存入到文件中,那该怎么办呢?看下面这个例子:
$ find /home -name lost* > all_result 2>&1

为实现上述功能,还有一种简便的写法如下:
$ find /home -name lost* >& all_result
cmd下不能用

如果那些出错信息并不重要,下面这个命令可以让你避开众多无用出错信息的干扰:
$ find /home -name lost* 2> /dev/null
cmd下改成:dir /mm 2>nul
-----------------------------------------------

在控制台显示,同时重定向到文本:类似于shell中的tee命令:
dir > a.txt | type a.txt

以时间为密码

;bat中获取用户输入不回显
@echo off
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>in.com
set /p password=password:<nul
for /f "tokens=*" %%a in ('in.com') do (set password=%%a)
del in.com
cls
echo 你输入的密码是: %password%
pause>nul

获取系统日期时间,受系统时间格式的影响

语法:
%变量:~指定偏移量,指定截取字符长度%
日期 %date%  返回 系统日期 英文date
时间 %time%  返回 系统时间 英文time
%date:~0,4%     取年
%date:~5,2%     取月
%date:~8,2%     取日
%time:~0,2%     小时
%time:~3,2%     分钟
%time:~6,2%     秒
如:
rem   取系统日期及时间,同时将时间转换为8位(8:16:00-->08:16:00).
set   CurDate=%date:~0,10%
set   CurTime=%time%
set   hh=%CurTime:~0,2%
if   /i   %hh%   LSS   10   ( set   hh=0%CurTime:~1,1% )
set   mm=%CurTime:~3,2%
set   ss=%CurTime:~6,2%
set   CurDateTime=%CurDate%_%hh%:%mm%:%ss%

echo %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

参数

Windows下批处理文件(BAT)的参数之编辑符
可以在批处理文件内的任意地方使用批处理参数。

批处理参数扩展变量(%0 到 %9)。当在批处理文件中使用批处理参数时,%0 将由批处理文件名替换,而 %1 到 %9 将由在命令行键入的相应参数替换。

可以在批处理参数中使用编辑符。编辑符使用当前的驱动器和目录信息将批处理参数扩展为部分或完整的文件或目录名。要使用编辑符,请键入百分号 (%) 字符,后面是波形符号 (~) 字符,然后键入合适的编辑符(即 %~modifier)。



下表列出了可在扩展中使用的编辑符。

编辑符    说明
%~      %~1 扩展 %1 并删除任何引号 (")
%~f     %~f1 将 %1 扩展到完全合格的路径名,等价于 %~dpnx1
%~d     %~d1 将 %1 扩展到驱动器盘符
%~p     %~p1 将 %1 扩展到路径
%~n     %~n1 将 %1 扩展到文件名
%~x     %~x1 将 %1 扩展到文件扩展名
%~s     %~s1 扩展的路径仅包含短名称
%~a     %~a1 将 %1 扩展到文件属性
%~t     %~t1 将 %1 扩展到文件日期/时间
%~z     %~z1 将 %1 扩展到文件大小
%~$PATH:    %~$PATH:1 搜索 PATH 环境变量中列出的目录,并将 %1 扩展到第一个找到的目录的完全合格名称。如果没有定义环境变量名称,或没有找到文件,则此编辑符扩展成空字符串



下表列出了可用于获取复杂结果的编辑符和限定符的可能组合情况:

编辑符    说明
%~nx1    将 %1 扩展到文件名和扩展名
%~dp$PATH:1    在 PATH 环境变量列出的目录中搜索 %1,并扩展到第一个找到的目录的驱动器盘符和路径
%~dp0    将 %0 扩展到驱动器盘符+路径
%~dpn0    将%0扩展到驱动器盘符+路径+文件名
%~dpnx0    将 %0 扩展到驱动器盘符+路径+文件名+扩展名
%~ftza1    将 %1 扩展到类似 dir 的输出行

注意:在上面的例子中,可以使用其它批处理参数替换 %1 和 PATH。
%* 编辑符是唯一可代表在批处理文件中传递的所有参数的编辑符。不能将该编辑符与 %~ 编辑符组合使用。%~ 语法必须通过有效的参数值来终止。

不能以与使用环境变量相同的方式使用批处理参数。不能搜索或替换值,或检查子字符串。然而,可以将参数分配给环境变量,然后使用该环境变量。

系统变量大全

%ALLUSERSPROFILE% : 列出所有用户Profile文件位置。    %systemdrive%\ProgramData
%APPDATA% :   列出应用程序数据的默认存放位置。          %Userprofile%\AppData\Roaming
%CD% :   列出当前目录。
%CLIENTNAME% :   列出联接到终端服务会话时客户端的NETBIOS名。
%CMDCMDLINE% :   列出启动当前cmd.exe所使用的命令行。
%CMDEXTVERSION% :   命令出当前命令处理程序扩展版本号。
%CommonProgramFiles% :   列出了常用文件的文件夹路径。
%COMPUTERNAME% :   列出了计算机名。
%COMSPEC% :   列出了可执行命令外壳(命令处理程序)的路径。
%DATE% :   列出当前日期。
%ERRORLEVEL% :   列出了最近使用的命令的错误代码。
%HOMEDRIVE% :   列出与用户主目录所在的驱动器盘符。
%HOMEPATH% :   列出用户主目录的完整路径。
%HOMESHARE% :   列出用户共享主目录的网络路径。
%LOGONSEVER% :   列出有效的当前登录会话的域名控制器名。
%NUMBER_OF_PROCESSORS% :   列出了计算机安装的处理器数。
%OS% :   列出操作系统的名字。(Windows XP 和 Windows 2000 列为 Windows_NT.)
%Path% :   列出了可执行文件的搜索路径。
%PATHEXT% :   列出操作系统认为可被执行的文件扩展名。
%PROCESSOR_ARCHITECTURE% :   列出了处理器的芯片架构。
%PROCESSOR_IDENTFIER% :   列出了处理器的描述。
%PROCESSOR_LEVEL% :   列出了计算机的处理器的型号。
%PROCESSOR_REVISION% :   列出了处理器的修订号。
%ProgramFiles% :   列出了Program Files文件夹的路径。
%PROMPT% :   列出了当前命令解释器的命令提示设置。
%RANDOM% :   列出界于0 和 32767之间的随机十进制数。
%SESSIONNAME% :   列出连接到终端服务会话时的连接和会话名。
%SYSTEMDRIVE% :   列出了Windows启动目录所在驱动器。
%SYSTEMROOT% :   列出了Windows启动目录的位置。
%TEMP% and %TMP% :   列出了当前登录的用户可用应用程序的默认临时目录。
%TIME% :   列出当前时间。
%USERDOMAIN% :   列出了包含用户帐号的域的名字。
%USERNAME% :   列出当前登录的用户的名字。
%USERPROFILE% :   列出当前用户Profile文件位置。
%WINDIR% :   列出操作系统目录的位置。

变量 类型 描述
%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
%CD% 本地 返回当前目录字符串。
%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME%   系统 返回计算机的名称。
%COMSPEC%   系统 返回命令行解释器可执行程序的准确路径。
%DATE%   系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL%   系统 返回上一条命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE%   系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH%   系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE%   系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSERVER%   本地 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS%   系统 指定安装在计算机上的处理器的数目。
%OS%   系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE%   系统 返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL%   系统 返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION% 系统 返回处理器的版本号。
%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。
%SYSTEMROOT%   系统 返回 Windows server operating system 根目录的位置。
%TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% 本地 返回包含用户帐户的域的名称。
%USERNAME% 本地 返回当前登录的用户的名称。
%USERPROFILE% 本地 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。

%allusersprofile%--------------------所有用户的profile路径
%Userprofile%-----------------------当前用户的配置文件目录
%Appdata%--------------------------当前用户的应用程序路径
%commonprogramfiles%-------------应用程序公用的文件路径
%homedrive%------------------------当前用户的主盘
%Homepath%------------------------当前用户的主目录
%programfiles%----------------------应用程序的默认安装目录
%systemdrive%----------------------系统所在的盘符
%systemroot%-----------------------系统所在的目录
%windir%----------------------------同上,总是跟systemroot一样
%tmp%------------------------------当前用户的临时目录
%temp%-----------------------------同上临时目录

高级

查看某个端口号是否被占用

比如要查看Mysql的默认服务端口3306是否已被占用
命令:
netstat -ano|findstr "3306"
  ----如果没有返回任何结果,即证明此端口没有被占用。
  ----如果返回结果为:
TCP  0.0.0.0:8080 0.0.0.0:0 LISTENING 1640
说明8080端口已经被占用。 1640即占用8080此端口号的进程号。

查看进程号:tasklist

杀进程:taskkill /pid   程序的PID号码

添加用户与组的命令

1、创建账号:
net user username [password] /add

如:
net user xcwsjyapp /add

2、将用户添加到指定用户组中
net localgroup groupname username /add

如:
net localgroup Administrators xcwsjyapp /add

3、修改全名
wmic USERACCOUNT where name="xcwsjyapp" set FullName="xcwsjyapp"

cmd&start启动程序区别

命令、参数说明:
CMD /C      执行字符串指定的命令然后终止
CMD /K      执行字符串指定的命令但保留
start 启动一个单独的窗口运行指定的程序或命令。


cmd窗口或bat文件:
cmd /c start python3 main.py 0 test.txt test.cps
cmd /c python3 main.py 0 test.txt test.cps
start python3 main.py 0 test.txt test.cps
python3 main.py 0 test.txt test.cps

上述4种方式,在cmd窗口中直接执行,通过ProcessExplorer查看进程,发现:
第一种:python3 是独立进程,在新的窗口,关系:cmd + python3
第二种:python3 是 子 进程,在当前窗口,关系:cmd -> cmd -> python3
第三种:python3 是 子 进程,在新的窗口,关系:cmd -> python3
第四种:python3 是 子 进程,在当前窗口,关系:cmd -> python3

上述4种方式,在bat文件中执行,通过ProcessExplorer查看进程,发现:
第一种:python3 是独立进程,关系:python3
第二种:python3 是 子 进程,关系:cmd -> cmd -> python3
第三种:python3 是独立进程,关系:python3
第四种:python3 是 子 进程,关系:cmd -> python3

上述在cmd和bat中的区别:
第一、第三种,因为是独立进程,所以python3启动以后,cmd即退出,只剩python3
第二、第四种,因为是 子 进程,所以python3启动以后,cmd还运行,如果python3退出,cmd也一并退出。
第三种cmd和bat区别:bat中因为是新窗口运行python3,所以cmd退出了,所以bat是独立进程。


快捷方式:
%SystemRoot%\system32\cmd.exe /c start python3 main.py 0 test.txt test.cps
%SystemRoot%\system32\cmd.exe /c python3 main.py 0 test.txt test.cps

第一种:python3 是独立进程,关系:python3
第二种:python3 是 子 进程,关系:cmd -> python3

注:与前面四种方法对应的后两种无法运行。

注:本文上述所有方式,均会新启动一个conhost的子进程。

--------------------------------------

注:传递参数注意事项:

不带空格:
cmd /c D:\walterlv\frp\frpc.exe -c ./frpc.ini

带空格,:
在上面的例子中,我们的路径中不涉及到空格。我们知道,路径中有空格的话,在命令行中使用需要加上引号。但实际上如果你真的给路径加上了引号,会发现 cmd.exe 就开始不识别你的命令路径了。

这个时候,你需要在整个传给 cmd.exe 的命令外层再加一层引号:

cmd /c " "D:\walterlv folders\frp\frpc.exe" -c ./frpc.ini "
cmd /c " "D:\Program Files\SecureCRT\SecureCRT.exe" /L %2 /PASSWORD %4 %1 "

--------------------------------------

在bat中必须"\r\n" + "GBK"编码)(CRLF是Carriage-Return Line-Feed的缩写,意思是回车换行,就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。

start 带参数:
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /参数
start "" "D:\Program Files\SecureCRT\SecureCRT.exe" /L %2 /PASSWORD %4 %1

--------------------------------------

打开多个文件夹
start "" "C:\fjcqy\_工作中\演练环境"
start "" "C:\fjcqy\_工作中\迪卡侬decathlon"
start "" "C:\fjcqy\_工作中\MHD_酩悦轩尼诗"
start "" "C:\fjcqy\_工作中\定开"
start "" "C:\fjcqy\_计算机\Linux\Shell应用"

--------------------------------------

微信双开
start "" "C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"
start "" "C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

--------------------------------------

启动停止服务

最近心血来潮,不喜欢用图形界面来启动服务,喜欢用cmd方式来解决,网上找来一篇文章,自己的想法立即实现,网络真是好啊!!!

在cmd下可有两种方法打开,net和sc,net用于打开没有被禁用的服务,语法是:

net start 服务名

net stop 服务名

用sc可打开被禁用的服务,语法是:

sc config 服务名 start= demand    //手动

sc condig 服务名 start= auto      //自动

sc config 服务名 start= disabled //禁用

sc start 服务名

sc stop   服务名

注:1)服务名不一定是你在服务面板看到的那个名,例如,你要打开被禁用的telnet服务,sc config telnet start= auto,报错:[SC] OpenService FAILED 1060,因为telnet的服务名不是telnet而是tlntsvr, sc config tlntsvr start= auto     就OK了,在服务面板里查看telnet属性,从可执行文件的路径里可看到服务程序名,即命令中的服务名。   2)start=后面有空格,少了就有错

sc.exe命令功能列表:  注:以下命令中。=号后面都有一个空格,=号前面没有空格!

  1.更改服务的启动状态(这是比较有用的一个功能)

  2.删除服务(除非对自己电脑的软、硬件所需的服务比较清楚,否则不建议删除任何系统服务,特别是基础服务)

  3.停止或启动服务(功能上类似于net stop/start,但速度更快且能停止的服务更多)

  具体的命令格式如下:

  修改服务启动类型的命令行格式为(特别注意start=后面有一个空格)

  sc config 服务名称 start= demand(设置服务为手动启动)

  sc config 服务名称 start= disabled(设置服务为禁用)

  停止/启动服务的命令行格式为

  sc stop/start 服务名称

  注意:平时常接触的都是服务的显示名称,而以上所指是服务名称,都可以在控制面板->管理工具->服务里面,双击对应的服务来查询。

  先举例说明一下具体的设置方法:

  如设置远程注册表服务为手动其格式为

  sc config RemoteRegistry start= demand

  设为禁用的格式为:

  sc config RemoteRegistry start= disabled

  停止服务则格式为:

  sc stop RemoteRegistry

  首先把自己所需设置的服务名称查到之后,按照上面的格式做成批处理文件,重装系统之后只要运行批处理文件即可。

  以下是我的设置,以XpSp2为蓝本,可比对所用的系统进行增删和修改。注:未加入XpSp2的自动更新、安全中心、防火墙。

  sc config Alerter start= demand

  sc config TrkWks start= demand

  sc config helpsvc start= demand

  sc config policyAgent start= demand

  sc config dmserver start= demand

  sc config WmdmpmSn start= demand

  sc config Spooler start= demand

  sc config RemoteRegistry start= demand

  sc config NtmsSvc start= demand

  sc config seclogon start= demand

  sc config Schedule start= demand

  sc config WebClient start= demand

  sc config W32Time start= demand

  sc config WZCSVC start= demand

  sc config ERSvc start= demand

  sc config Themes start= demand

  sc config FastUserSwitchingCompatibility start= disabled

  sc config Messenger start= disabled

  sc config protectedStorage start= disabled

  sc config SSDpSRV start= disabled

  sc config TermService start= disabled

  sc config ShellHWDetection start= disabled

  如果需要立即关闭服务也可把以下代码跟在上面的代码之后

  sc stop W32Time

  sc stop ShellHWDetection

  sc stop TrkWks

  sc stop helpsvc

  sc stop dmserver

  sc stop policyAgent

  sc stop Spooler

  sc stop RemoteRegistry

  sc stop seclogon

  sc stop Schedule

  sc stop WZCSVC

  sc stop ERSvc

  sc stop Themes

  sc stop FastUserSwitchingCompatibility

  sc stop protectedStorage

  sc stop SSDpSRV

  sc stop WebClient

  最后把修改好之后的代码存为services.cmd,在以后进行服务设置时,直接运行事先保存好的批处理文件就可以做到事半功倍了。

  看到这里,使用Win2000的朋友也不必失望,sc.exe这个命令行工具对Win2000同样适用,可从装有WinXp或者Win2003的机器里面拷贝sc.exe文件,与保存好的批处理文件放在一起,然后执行批处理文件即可。

  对注册表比较熟悉的朋友可能会想到用注册表来设置服务的启动类型,这也是一种可行的方法,本身却有着内在不足。原因是服务启动类型在注册表中对应的键值较长且分散,进行整理不方便直观且易错漏,所以这种方法比较适用于无人值守的安装时使用。


用sc.exe命令来管理Windows服务

来源:Web开发者 发布时间:2012-01-05 阅读次数:3568

  除了通过“控制面板”>“管理工具”>“服务”来查看服务之外,还有很多种其他的方式可以对Windows服务进行管理。在命令行方式下,你可以使用sc.exe(Service Control的缩写)来管理服务。

  我们可以用sc.exe命令来查询、启动、停止,甚至删除服务。

  点击开始>运行>输入"cmd"回车,然后在弹出的DOS窗口中输入sc回车就可以看到sc命令的使用帮助了。

  sc命令的语法格式:

  sc <server> [command] [service name] <option1> <option2>...

  sc命令使用例子:

  sc query
  查看所有服务的运行状态

  sc query 服务名
  查看某个服务的运行状态。

  sc qc 服务名
  查看某个服务的配置信息。

  sc start 服务名
  启动服务。例如启动apache2.2服务器,就写成 sc start apache2.2。

  sc stop 服务名
  停止服务。例如 sc stop apache2.2 。

  sc delete 服务名
  删除服务。例如 sc delete apache2.2 。

  sc config 服务名 start= auto|demand|disabled
  修改服务启动类型。start参数的值可以是demand(手动)、disabled(禁用),auto(自动)。
  例如 sc config apache2.2 start= demand,将apache设置为手动启动。
  特别注意:start=后面有一个空格

  使用提示
  1:如果服务名称中包含有空格,记得在服务名称上加引号。例如sc stop "my service"。
  2:“服务名称”和“服务显示名称”是不一样的。sc指令使用的是“服务名称”。
    我们通过控制面板=>“管理工具"=>打开"服务",我们看到服务的显示名称,双击打开某个服务可以看到真正的服务名字。
  3:sc start 和 sc stop 功能上类似于 net start 和 net stop,但速度更快且能停止的服务更多。
  4:sc delete 命令的实质都是删除HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Services下的ServiceName分支。所以你也可以用reg命令删除名为ServiceName的服务:
  reg delete HKLM\ SYSTEM\ CurrentControlSet\ Services\ ServiceName