window中常用的命令

  • 1 windows中常用的命令:
  • 2 批处理文件的@echo off 命令
  • 3 bat的变量与命令set的用法
  • 4 windows批处理语法

1 windows中常用的命令:

2 批处理文件的@echo off 命令

  1. echo命令介绍:
  • echo:echo只是一个显示命令,可以输出显示字符(echo在windows上和linux上的用法是一样的)
  • @echo off: 关闭回显 (所谓的回显就是换行显示符号>,以及前面的路径)
  • @echo on: 打开回显 (恢复换行显示符)

下面的一样图带你了解事实的真相:

  1. 至于为什么用这个命令呢,原因如下:

简解:就是可以让这个文件中的命令可以像linux中的脚本程序一样,顺序执行一个自己写好的一个window操作
详解:
@echo off并不是DOS程序中的,
而是DOS批处理中的。
当年的DOS,所有操作都用键盘命令来完成,
当你每次都要输入相同的命令时,
可以把这么多命令存为一个批处理,
从此以后,只要运行这个批处理,
就相当于打了几行、几十行命令。


DOS在运行批处理时,
会依次执行批处理中的每条命令,
并且会在显示器上显示,
如果你不想让它们显示,
可以加一个“echo off”


当然,“echo off”也是命令,
它本身也会显示,
如果连这条也不显示,
就在前面加个“@”。
pause
使显示器停下,并显示“请按任意键继续_ _ _”


例如:
@echo off
@echo hello
pause

显示如下图hello

3 bat的变量与命令set的用法

  • 简解:.bat文件是dos的批处理文件,里面写dos命令,相当于是linux中的脚本程序
    set:用来设置变量 (直接在cmd下输入set可以看到系统已经定义的变量)
    % variable_name%:两个%%中间是定义的变量名,可以实现对变量的引用

  • 详解.dat文件
    bat是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。直接右键-新建-文本(.txt文件) 右键重名名 改后缀为 .batbat直接点击运行,或者 在cmd下运行。

  • 详解set使用
    set 功能一览
    [设置变量]
    格式:set 变量名=变量值
    详细:被设定的变量以%变量名%引用
    [取消变量]
    格式:set 变量名=
    详细:取消后的变量若被引用%变量名%将为空
    [展示变量]
    格式:set 变量名
    详细:展示以变量名开头的所有变量的值
    [列出所有可用的变量]
    格式:set
    [计算器]
    格式:set /a 表达式
    示例:set /a 1+2*3 输出 7
    [设置变量为表达式计算后的值]
set a=1+2  # 变量和变量值,不做计算
echo %a% ==>输出1+2
set /a a=1+2   # 设置变量和变量值,并把变量的结果赋值给a  (前面的斜杠)
echo %a% ==>输出3
[设置变量为用户输入的值]
set /p a=输入一个值 \==>输出 输入一个值
echo %a% \==>显示用户输入的值
!注意!
set不能用在复合语句里面比如if 1==1 set a=2或者for %%i in (a) do set a=2

4 windows批处理语法

写批处理文件,除了了解基本语法外,你还需要熟悉常用的windows命令,那就先看看这篇文章:windows常用命令

重要说明:

文件及目录路径:要使用反斜杠’’,不要使用正斜杠’/’ 如:del d:\test2\file\my.txt
文件及目录路径:若存在空格,应使用双引号将路径引起来 如:del “d:\program files\file\my.txt”
文件及目录名中不能包含下列任何字符:\ / : * ? " < > |

  1. 参数

bat批处理文件理论上支持无限多个参数的传入,但最多支持9个参数的获取

例:make_release.bat 258 mslugx 3 4 5 6 7 8 9 10 11 12 13 14 15%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %* // 命令行传递给批处理文件的参数
%0 // 批处理文件名(非全路径)  make_release.bat
%1 // 第1个参数  258
%9 // 第9个参数  9
%* // 从第1个参数开始的所有参数 258 mslugx 3 4 5 6 7 8 9 10 11 12 13 14 15

为了获取更多的参数,可以使用shift命令达到目的

shift /3 // 去掉第3个参数
echo %1 %2 %3 %4 %5 %6 %7 %8 %9 // 输出:258 mslugx 4 5 6 7 8 9 10 11
shift /4 // 在上面剩余参数的基础上,再去掉第4个参数
echo %1 %2 %3 %4 %5 %6 %7 %8 %9 // 输出:258 mslugx 4 6 7 8 9 10 11 12
shift /5 // 在上面剩余参数的基础上,再去掉第5个参数
echo %1 %2 %3 %4 %5 %6 %7 %8 %9 // 输出:258 mslugx 4 6 8 9 10 11 12 13
shift // 在上面剩余参数的基础上,再去掉第1个参数;shift、shift /0和shift /1的作用一致
echo %1 %2 %3 %4 %5 %6 %7 %8 %9 // 输出:mslugx 4 6 8 9 10 11 12 13 14

参数扩展增强(以%1为例说明):【注:以下增强用法也适用于for变量】

%~1 - 删除引号" (1)若字符串首尾同时存在引号,则删除首尾的引号;(2)若字符串尾不存在引号,则删除字符串首的引号;(3)如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
%~f1 - 将文件名扩展到一个完全合格的路径名
%~d1 - 将文件名扩展到一个驱动器号
%~p1 - 将文件名扩展到一个路径
%~n1 - 将文件名扩展到一个文件名
%~x1 - 将文件名扩展到一个文件扩展名
%~s1 - 扩展的路径指含有短名
%~a1 - 将 %1 扩展到文件属性
%~t1 - 将 %1 扩展到文件的日期/时间
%~z1 - 将 %1 扩展到文件的大小
%~$PATH:1 - 查找列在 PATH 环境变量的目录,并将 %1扩展到找到的第一个完全合格的名称
如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

组合修定符:

%~dp1 - 将 %1 扩展到驱动器号和路径
%~nx1 - 将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径
%~ftza1 - 若 %1 为目录或文件,会转变成dir的输出行
:%~dp0 返回当前bat文件所在目录的全路径
:%~n0 返回当前bat文件名(不含扩展名)
:%~nx0 返回当前bat文件名(含扩展名)


使用for和goto打印各个参数

@echo off
call process.bat %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% "%random%"
pause

process.bat

复制代码
set "f=%*"
if not defined f (echo 没有参数! & goto :eof)
echo 过程名称:    %0
echo 完整参数:    %*
echo --------------------------------------
echo 用for循环:
set /a x=1
for %%i in (%*) do (call echo 第%%x%%个参数    %%~i & set /a x+=1)
echo --------------------------------------
echo 用goto循环:
set /a y=1
:loop
set "t=%~1"
if not defined t goto :eof
echo 第%y%个参数:    %~1
set /a y+=1
shift
goto loop

无限循环执行net user命令(按ctrl+c可以结束命令执行)

work.bat

@echo off
net user
%0
  1. 常用特殊符号

& 顺序执行多条命令,而不管命令是否执行成功
例:cd /d d:\src&work.exe /o c:\result.txt // 先将当前工作目录切换到d:\src下,然后执行work.exe /o c:\result.txt命令

&& 顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
例:find “ok” c:\test.txt && echo 成功 // 如果找到了"ok"字样,就显示"成功",找不到就不显示

|| 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
例:find “ok” c:\test.txt || echo 不成功 // 如果找不到"ok"字样,就显示"不成功",找到了就不显示

| 管道命令
例:dir . /s/a | find /c “.exe” // 先执行dir命令,然后对输出的结果执行find命令(输出当前文件夹及所有子文件夹里的.exe文件的个数)

> 将当前命令输出以覆盖的方式重定向
例:tasklist > p1.txt // 将tasklist的输出以覆盖的方式重定向到p1.txt文件中

>> 将当前命令输出以追加的方式重定向
例:tasklist >> p2.txt // 将tasklist的输出以追加的方式重定向到p2.txt文件中

< 从文件中获得输入信息,而不是从屏幕上,一般用于date time label等需要等待输入的命令
例:date <temp.txt // temp.txt中的内容为2005-05-01

@ 命令修饰符 在执行命令前,不打印出该命令的内容
例:@cd /d d:\me // 执行该命令时,不打印出命令的内容:cd /d d:/me

^ 转义字符及echo续行符号
(1) 用在特殊字符前面,用于取消该特殊字符的作用。支持的特殊字符有&、|、>、<、(、)、!、"等,不包括%
(2) echo输出时,可以将^后的下一行的字符串拼接在当前行后输出

$ 在prompt命令中,称为选项转义字符,可以将其后的字符转义为特定的作用效果。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 与>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中
% 非延迟环境变量引用符号
! 延迟环境变量引用符号
: 批处理标签引导符
nul 用于屏蔽命令的输出结果,常见用于pause > nul;有时我们输错命令,cmd上会提示:xx‘不是内部或外部命令…为了完全屏蔽掉这些,可以使用xx >nul 2>nul
* ? 文件通配符,*代表n个字符,?代表1个字符

  1. 变量

dos计算说明

(1)只能进行整数运算,精确到整数,不能进行浮点运算
(2)只能精确到32位,有效值范围是-2147483648至2147483647
(3)十六进制前缀为:0x 八进制前缀为:0

自定义变量

set var=你好
echo %var% // 输出:你好
set var // 查看所有以var开头变量的值
set var=//清空var变量,var变成not defined状态


set /p var=请输入变量的值: // 等待用户输入到var变量中


set /p= hello world! <nul // 输出hello world! 到屏幕上,字符串开头的空格将会被去除掉,结尾的空格会被保留

set /p .= hello world! <nul // 与上面命令含义一样,只是写法不同

<nul set /p= hello world! // 与上面命令含义一样,只是写法不同


set var=0812
set /a var=1%var%-10000 // var=812


set /a var=39 // 设置var为数值型变量,值为39
set /a var=39/10 // 支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
set /a var=var/10 // 用 /a 参数时,=后的变量可以不加%直接引用
set /a var=“1&0” // &运算要加引号 值为0
set /a var=1"&“1 // 或者单独将&运算加引号,值为1
set /a var=1”^“1 // 异运算,值为0
set /a var=26”%“3 // 取模运算,值为2
set /a var=1<<5 // 左移位运算(使用^转义字符修饰<,等价于1”<<“5),2的5次幂,结果32
set /a var=3”<<“2 // 左移位运算,3的二进制为11,左移2位为1100,结果为12
set /a var=4”>>"2 // 右移位运算,4的二进制为100,右移动2位为1,结果为1

符号的优先级如下:

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

字符串拼接

set var1=很好,
set var2=非常好!
set var3=%var1%%var2%
echo %var3% // 输出:很好,非常好!

字符串替换

%p:str1=str2%  // 将字符串变量%p%中的str1替换为str2set p=www. qq. com
set var=%p: =% // 去掉p中的空格并赋值给var,值为www.qq.com
echo %var:.=#% // 将var变量中.替换成#,输出www#qq#com
echo %var:*qq=a% // 第一个qq及其之前的所有字符被替换为a,输出a.com

字符串截取

%a:~[m[,n]]% // 符号~可以简单理解为“偏移”,m为偏移量(缺省为0),n为截取长度(缺省为全部)set p=www.qq.com
set var=%p:~5% // 从位置5(索引从0开始)开始截取后续字符串并赋值给var,值为qq.com
echo %p:~5,2% // 从位置5(索引从0开始)开始截取后续2个字符,输出qq
echo %p:~-3% // 从倒数第3的位置开始截取后续字符串,输出com
echo %p:~0,-4% // 从头开始截取后续字符串(最后4个字符不截取),输出www.qq

延迟变量 形如:!var!

当我们准备执行一条命令的时候,命令解释器会将变量的值先读取出来,然后再运行这条命令。
但有时候,变量的值在该条命令执行过程中被改变,如果不使用延迟变量就会使用的变量改变前的值,这就不是我们想要的结果了。set a=1
set /a a+=1 > nul & echo %a% // 输出1,不为2开启延迟变量的方法:(1)cmd下开启/关闭延迟环境变量:cmd /v:on //开启延迟环境变量cmd /v:off //关闭延迟环境变量(2)批处理bat文件中开启/关闭延迟环境变量setlocal EnableDelayedExpansion //开启延迟环境变量setlocal DisableDelayedExpansion //关闭延迟环境变量如上示例在bat文件中修改成如下,就可以输出2了setlocal EnableDelayedExpansion
set a=1
set /a a+=1 > nul & echo !a! // 输出2

系统变量

%random%:获取[0,32767]之间的随机整数
例:set /a n=%random% * 100 / 32768 + 1 // 获取[1,100]之间的随机整数
例:set /a n=%random% %%100 +1 // 获取[1,100]之间的随机整数%allusersprofile% // 返回“所有用户”配置文件的位置
%appdata% // 返回默认情况下应用程序存储数据的位置
%cd% // 返回当前目录字符串
%cmdcmdline% // 返回用来启动当前的 cmd.exe 的准确命令行
%cmdextversion% // 返回当前的“命令处理程序扩展”的版本号
%computername% // 返回计算机的名称
%comspec% // 返回命令行解释器可执行程序的准确路径
%date% // 返回当前日期。使用与 date /t 命令相同的格式
%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 生成
%systemdrive% // 返回包含系统根目录的驱动器
%systemroot% // 返回系统根目录的位置
%temp% %tmp% // 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 temp,而其他应用程序则需要 tmp
%time% // 返回当前时间。使用与 time /t 命令相同的格式
%userdomain% // 返回包含用户帐户的域的名称
%username% // 返回当前登录的用户的名称
%userprofile% // 返回当前用户的配置文件的位置
%windir% // 返回操作系统目录的位置

errorlevel说明

①设置errorlevel的方法

方法a:使用call命令

@echo off
echo exit /B ^2>%temp%\test.bat
call %temp%\test.bat
echo %errorlevel%//%errorlevel%=2

方法b:使用vbscript脚本

@echo off
echo WScript.Quit ^5>%temp%\test.vbs
cscript /nologo %temp%\test.vbs
echo %errorlevel%//%errorlevel%=5

方法c: 使用windows版的gawk工具

@echo off
gawk.exe "BEGIN{exit 12}"
echo %errorlevel%//%errorlevel%=12

②开启延迟变量时,建议使用!errorlevel!来引用变量(虽然在win7下%errorlevel%引用也没问题)

③echo、set命令不会设置errorlevel的值

④当前整个局部块中的errorlevel不变,为上个局部块最后一个命令的返回码(类似于:进程main函数的返回值)

⑤判断errorlevel最好是在全局域中(不要在if、for等语句块中)

@echo off
set var="ok"
echo exit /B ^2>%temp%\test.bat
call %temp%\test.bat
echo %errorlevel%//为2
if %var%=="ok" (echo exit /B ^3>%temp%\test2.batcall %temp%\test2.batecho %errorlevel%//为2
)for %%e in (0 1 2 3 4 5 6 7 8 9) do (echo exit /B ^%%e>%temp%\test3.batcall %temp%\test3.batecho %errorlevel%//始终为3if %%e EQU 9 (echo exit /B ^99>%temp%\test4.batcall %temp%\test3.batecho %errorlevel%//始终为3) else (echo exit /B ^100>%temp%\test5.batcall %temp%\test3.batecho %errorlevel%//始终为3)
)echo %errorlevel%//为99

setlocal/endlocal间的系统变量视为临时变量

@echo off
setlocal
path=d:\
echo 局部环境变量path值
echo %path%  // 输出:d:\
endlocal
echo 系统环境变量path的值
echo %path% // 输出系统环境变量%path%的值
  1. if命令

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command


net user
if %errorlevel%==0 echo net user 执行成功了!
------------------------------------xcopy from.txt to.txt
if errorlevel 0 echo 文件复制没有错误! // if errorlevel 0表示errorlevel>=0;因此当from.txt文件不存在时,errorlevel=4,仍然会打印:文件复制没有错误!
------------------------------------xcopy from.txt to.txt
if %errorlevel%==0 (echo 文件复制没有错误!) else echo 文件复制出错!
------------------------------------xcopy test.bat to.txt
if %errorlevel% == 0 (
echo 文件复制没有错误!
) else (
echo 文件复制出错!
)
------------------------------------set /p v1=请输入第一个比较字符:
set /p v2=请输入第二个比较字符:
if %v1% == %v2% (echo v1等于v2.) else echo v1不等于v2. // 会将v1与v2的前后空格去掉后,进行比较(大小写敏感)
------------------------------------set /p v1=请输入第一个比较字符:
set /p v2=请输入第二个比较字符:
if "%v1%" == "%v2%" (echo v1等于v2.) else echo v1不等于v2. // 不进行空格处理,直接对v1与v2进行比较(大小写敏感)
------------------------------------set /p v1=请输入第一个比较字符:
set /p v2=请输入第二个比较字符:
if /i "%v1%" == "%v2%" (echo v1等于v2.) else echo v1不等于v2. // 不进行空格处理,直接对v1与v2进行比较(大小写不敏感)
------------------------------------set /p var=请输入一个数字:
if %var% LEQ 5 (echo var小于等于5.) else echo var大于5.还有一些用来判断数字的符号:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
------------------------------------set var=
if not defined var (echo 变量var未定义.) else echo 变量var存在.------------------------------------set var=
if [%var%] == [] (echo 变量var为空.) else echo 变量var不为空.------------------------------------if not exist "c:\test" (
echo 不存在test文件夹!
md "c:\test"
) else (
echo 存在test文件夹!
rd "c:\test"
)
------------------------------------
  1. goto命令
@echo off
if "%1" == "" goto x86
if not "%2" == "" goto usageif /i %1 == x86 goto x86
if /i %1 == x64 goto x64goto usage:x86
if not exist "%~dp0bin\vcvars32.bat" goto missing
call "%~dp0bin\vcvars32.bat"
goto :eof:x64
if not exist "%~dp0bin\amd64\vcvarsamd64.bat" goto missing
call "%~dp0bin\amd64\vcvarsamd64.bat"
goto :eof:usage
echo Error in script usage. The correct usage is:
echo %0 [option]
echo where [option] is: x86 ^| x64
echo:
echo For example:
echo %0 x86
goto :eof:missing
echo The specified configuration type is missing. The tools for the
echo configuration might not be installed.
goto :eof
  1. 子程序调用
@echo off
call :fun return 你好  // 调用fun子程序,并传入2个参数
echo 子程序返回值:%return%  // return此时为一个变量,其值为:你好
pause
goto :eof:fun
echo ++%1++ ++%2%++   // 输出:++return++ ++你好++
set %1=%2
goto :eof
  1. for命令
for %%i in (c:\*) do echo %%i   // 打印出c盘根目录下的所有文件(不递归子目录)FOR /D %%variable IN (set) DO command [command-parameters]for /d %%i in (c:\*) do echo %%i  // 打印出c盘根目录下的所有文件夹(不递归子目录)FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]for /r "c:\" %%i in (*.exe) do echo %%i  // 将C盘根目录(递归子目录)下所有exe文件的路径都列出来------------------------------------
for /r %%i in (*.doc *.xls) do echo %%i   // 将当前目录(递归子目录)下所有doc文件和xls文件的路径都列出来------------------------------------
for /r "c:\" %%i in (notepad.exe) do if exist %%i echo %%i  // 将C盘根目录(递归子目录)下包含notepad.exe文件的路径都列出来FOR /L %%variable IN (start,step,end) DO command [command-parameters]for /l %%i in (1,2,5) do @echo %%i    // (1,2,5):(start,step,end);打印出:1 3 5------------------------------------for /l %%i in (1,1,5) do (
md Dir_%%i
echo 创建Dir_%%i...
)   // 在当前目录下,新建名为Dir_1、Dir_2、Dir_3、Dir_4、Dir_5五个新目录------------------------------------set s=AA BBB CCCC D
for %%a in (%s%) do echo %%a  // 遍历s字符串,共循环4次,打印出AA、BBB、CCCC、D------------------------------------FOR /F ["options"] %%variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %%variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %%variable IN ('command') DO command [command-parameters]echo 01段 02段 03段 04段 05段 06段 >"C:\Program Files\test.txt"
echo ;注释行,这是临时文件,仅仅用于测试 >>"C:\Program Files\test.txt"
echo ;kekec 20140901 >>"C:\Program Files\test.txt"
echo 11段 12段 13段 14段 15段 16段 >>"C:\Program Files\test.txt"
echo 21段,22段,23段,24段,25段,26段 >>"C:\Program Files\test.txt"
echo 31段-32段-33段-34段-35段-36段 >>"C:\Program Files\test.txt"
for /f "skip=1 eol=; tokens=1,3* delims=,-  usebackq" %%i in ("C:\Program Files\test.txt") do echo %%i %%j %%k输出结果:
11段 13段 14段 15段 16段
21段 23段 24段,25段,26段
31段 33段 34段-35段-36段
------------------------------------

skip:1 表示忽略开头的一行内容
eol指明;开头的为注释行,处理时会被忽略
tokens=1,3*表示%%i %%j %%k分别代表一行中的第1个字段、第3个字段及第3个字段后的所有内容(从%%i开始命名是因为%%i in (“C:\Program Files\test.txt”)),若有第4个字段第5个字段,则为%%l、%%m,以此类推!
delims指明逗号、减号、空格为分割符,默认是空格和tab为分割符
usebackq 使用后引号(键盘上数字1左面的那个键)。 未使用参数usebackq时:file-set表示文件,但不能含有空格;双引号表示字符串,即"string";单引号表示执行命令,即'command' 使用参数usebackq时:file-set和"file-set"都表示文件(当文件路径或名称中有空格时,就可以用双引号括起来);单引号表示字符串,即'string';后引号表示命令执行,即command`

for /f “tokens=1,2*” %%i in (‘reg query “HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders” /v “Personal” 2^>nul’) do set MyDocument=%%k//%MyDocument%为当前用户的我的文档路径(如:C:\Users\James\Documents)

for变量扩展增强 注:delims==及delims=表示不要分割符

for /f “delims==” %%i in (‘dir /b’) do @echo %%~i // 删除引号" (1)若字符串首尾同时存在引号,则删除首尾的引号;(2)若字符串尾不存在引号,则删除字符串首的引号;(3)如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
for /f “delims==” %%i in (‘dir /b’) do @echo %%~fi // 将文件或目录名扩展到一个完全合格的路径名
for /f “delims==” %%i in (‘dir /b’) do @echo %%~di // 将文件或目录名扩展到一个驱动器号
for /f “delims==” %%i in (‘dir /b’) do @echo %%~pi // 将文件或目录名扩展到一个路径
for /f “delims==” %%i in (‘dir /b’) do @echo %%~ni // 将文件或目录名扩展到一个文件名
for /f “delims==” %%i in (‘dir /b’) do @echo %%~xi // 将文件或目录名扩展到一个文件扩展名,目录不存在扩展名,会输出错误提示:ECHO 处于关闭状态。
for /f “delims==” %%i in (‘dir /b’) do @echo %%~si // 将文件或目录名扩展到一个短路径名
for /f “delims==” %%i in (‘dir /b’) do @echo %%~ai // 扩展到文件属性 形如:–a------
for /f “delims==” %%i in (‘dir /b’) do @echo %%~ti // 扩展到文件或目录的修改日期时间
for /f “delims=” %%i in (‘dir /b’) do @echo %%~zi // 扩展到文件或目录的大小(单位:byte),目录返回的大小貌似不对
for /f “delims=” %%i in (“notepad.exe”) do echo %%~$PATH:i // 在PATH变量里指定的路径里搜索notepad.exe文件,如果有notepad.exe则把绝对路径打印出来,没有会输出错误提示:ECHO 处于关闭状态。

  1. 综合应用

(1) win7下修改dsw文件的关联图标

在xp下,我们可以通过文件夹选项 --文件类型 – 选中要修改的文件类型,然后点“高级” – 更改图标来达到目的,然而win7下已经不提供这种修改方法了。

@echo off
rem 获取dsw的文件类型
set dswcmd=reg query HKCR\.dsw /ve
for /f "tokens=1,2,3 usebackq" %%i in (`"%dswcmd%"`) do @set dswconf=%%k
rem 设置dsw的文件类型的缺省图标为msdev.exe的图标
set dswicon=HKCR\%dswconf%\DefaultIcon
for /f "delims=" %%i in ("msdev.exe") do @set msdevpath=%%~$PATH:i
reg add %dswicon% /t REG_SZ /d "\"%msdevpath%\",-20214" /f
rem 关联Progid到dsw的文件类型
reg add HKCU\software\microsoft\windows\currentversion\explorer\fileexts\.dsw\userchoice /v Progid /t REG_SZ /d "%dswconf%" /f

具体关联exe中的那个图标资源,可以使用Resource Hacker工具来查询,如下:

(2) 将脚本sleep两秒后再执行(时间精度:0.001秒)

@echo off
set tmpvbs=%temp%\tmp$$$.vbs
echo WScript.Sleep 2000 > %tmpvbs%
echo %time%
cscript /nologo "%tmpvbs%"
echo %time%
if exist "%tmpvbs%" del /f /q "%tmpvbs%"

(3) 使用ping命令来模拟暂停5秒后再执行(时间精度:1秒)

ping /n 1 /w 5000 1.1.1.2  // 注:1.1.1.2为一个永远无法达的IP地址  /n 1:表示尝试次数为1;/w 5000:表示超时时间为5000毫秒

(4) 模拟进度条

@echo off
mode con cols=113 lines=15 &color 9f
cls
echo.
echo  程序正在初始化. . .
echo.
echo ┌──────────────────────────────────────┐
set /p=" -■"<nul
for /L %%i in (1 1 38) do set /p a=■<nul&ping /n 2 127.0.0.1>nul
echo   100%%
echo └──────────────────────────────────────┘

注:ping /n 2 127.0.0.1的执行时间为1秒;ping /n 2 127.0.0.1>nul表示不将执行结果打印到屏幕上

(5) 强制结束指定路径下的进程及其子进程

@echo off
setlocal enabledelayedexpansion
set processname=client.exe
set processpath=D:\NZTest\体验服\TCLS
set "str=wmic process where caption="%processname%" get ExecutablePath^,ProcessId"
for /f "skip=1 tokens=*" %%i in ('!str!') do (for /f "tokens=1-2" %%a in ("%%i") do (if /i "%%a"=="%processpath%\%processname%" (taskkill /F /PID %%b /t))
)

注1:进程路径和进程名称中不能有空格

注2:只结束"D:\NZTest\体验服\TCLS"目录下的所有名为client.exe进程

(6) 强制结束指定参数及指定路径下的进程及其子进程

@echo off
setlocal enabledelayedexpansion
set /a matchName=0
set /a match=0
set pid=""
set LastFullPath=""
set getFullPath=""
set processname=client.exe
set processpath=D:\NZTest\体验服\TCLS
set arg=" -hello"
set "str=wmic process where caption="%processname%" get CommandLine^,ExecutablePath^,ProcessId"for /f "skip=1 tokens=*" %%i in ('!str!') do (set /a matchName=0set /a match=0for %%a in (%%i) do (set pid=%%aset LastFullPath=!getFullPath!set getFullPath=%%a)if /i "!LastFullPath!"=="%processpath%\%processname%" (set /a matchName=1)if !matchName!==1 (echo %%i | findstr /c:!arg! 1>nulif not errorlevel 1 (set /a match=1))if !match!==1 (taskkill /F /PID !pid! /t)
)

注1:进程路径和进程名称中不能有空格

注2:只结束"D:\NZTest\体验服\TCLS"目录下的所有名为client.exe且参数中含有" -hello"字符串的进程(参数字符串区分大小)

(7) 重建win7图标缓存

@echo off
rem 关闭Windows外壳程序explorer
taskkill /f /im explorer.exe
rem 清理系统图标缓存数据库
attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"
del /f "%userprofile%\AppData\Local\IconCache.db"
attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"
rem 清理系统托盘记忆的图标
reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams /f
reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream /f
rem 重启Windows外壳程序explorer
start explorer

(8) 修复win7桌面图标黑块

@echo off
reg delete "hkcu\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /f
reg delete "hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /f
taskkill /f /im explorer.exe & start explorer.exe

(9) 删除没有svn受控的目录及文件

@echo off
setlocal EnableDelayedExpansionfor /f "tokens=1,*" %%i in ('svn.exe status "D:\Client\Assets"') do (if %%i==? (if exist "%%j\*" (echo 删除目录 - %%jrd /s /q "%%j") else (del /f /s /q "%%j"))
)




♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

window中常用的命令相关推荐

  1. AI开发过程中常用开发命令及软件安装

    来源:投稿 作者:frank 编辑:学姐 <<打造舒适的AI环境>>系列总览: 分为硬件篇x1 跟 软件篇x3 硬件篇1:主机八大件的选购 软件篇1:AI开发过程中常用开发命令 ...

  2. Linux中常用的命令都是哪些单词的缩写

    作者:蓬岸 Dr.Quest 链接:https://www.zhihu.com/question/49073893/answer/114986798 来源:知乎 著作权归作者所有.商业转载请联系作者获 ...

  3. linux中常用nginx命令

    linux中常用nginx命令 首先我们进入到linux中nginx所在的文件夹(/nginx/sbin) 查看nginx版本 ./nginx -v 停止nginx服务 ./nginx -s stop ...

  4. 【3】web安全入门篇-渗透测试中常用的命令

    1.linux命令 渗透测试中常用的linux命令 上面博客提到的基本都能满足需求 2.cmd命令 常用的cmd命令 cmd命令和linux命令常用的对于web入门的萌新可以看看上面博客,多敲一敲用的 ...

  5. 学习转载:Android中常用shell命令详解

    https://blog.csdn.net/Z_HUALIN/article/details/77878609 设置adb环境变量 其实就是将adb.exe的路径放到Path中,目的是cmd直接可以使 ...

  6. Linux中常用的命令

    1.文件建立 touch file(文件的名字) 注意: touch不但可以建立文件也可以修改文件的时间戳 时间戳分为: atime:文件内容被访问的时间标识 mtime:文件内容被修改的时间标识 c ...

  7. 前端在linux中常用的命令,前端应该会的23个linux常用命令

    前言 一个前端好好切图不好吗?为什么要学 linux 呢? 嗯,真香 ! 1. ls 命令 : 显示目录内容列表 Linux ls 命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录 ...

  8. Linux 中常用的命令

    Linux中的常用命令: 终端快捷键: Ctrl + a/Home 切换到命令行开始 Ctrl + e/End 切换到命令行末尾 Ctrl + l 清除屏幕内容,效果等同于clear Ctrl + u ...

  9. Docker之工作中常用的命令(二)

    开心一笑 [有个楚国人坐船过江,不小心把剑掉落江中,他急忙用刀在船上刻了起来. 船夫奇怪地问道:"你这是干吗?" 那人答道:"剑是从这个地方掉落的,我做个记号到岸了好找. ...

最新文章

  1. 23 版本以上的v4包_Ant Design Pro V2升级到V4 小结
  2. 港科大谢丹阳教授问诊未来,预测长远趋势与转折点
  3. Android 使用Application类保存应用的全局数据
  4. POW矿池挖空块原理和解决方案
  5. C++ dll 动态链接库的创建与调用
  6. 6410 实现 linux 串口驱动详解
  7. add to -append Backend implementation
  8. jquery $(this)和this
  9. “成长”必经之路:越努力越幸运
  10. deleted 表和 inserted 表
  11. 乐优商场项目day08——图片(文件)上传
  12. html注册新会员页面实验,【实 验】实验四:会员注册登录系统设计
  13. 集成底座项目实施总结
  14. 『交换机连交换机』交换机多种化连接方式
  15. matlab中的颜色设置颜色,matlabpcolor设置颜色
  16. 如何快速上手操作Mac电脑?新手问号
  17. 一杯苦咖啡 | 公司来了个漂亮女实习程序员
  18. Mac清理磁盘管理内存的软件推荐
  19. Unity VR开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取
  20. 辅助系统(Flume,azkaban,sqoop)

热门文章

  1. Android菜鸟成长记4-button点击事件
  2. 2003和2007PPT解析
  3. 神奇的HTML5离线存储(应用程序缓存)
  4. word中package提取器
  5. php如何返回数据请求数据格式化,PHP以json或xml数据格式返回请求数据的封装代码...
  6. python3安装pip3-python3安装pip3
  7. 学python最好的方式-你们都是怎么学 Python 的?
  8. python手机版怎么用-QPython,一个在手机上运行Python的神器
  9. 为何python不好找工作k-给急着找工作的人一些建议,别在被骗了!
  10. 脚本编程语言python语言-python语言是脚本语言吗