1.字符串操作
1.语法
选项语法:
%~I - 删除任何引号("),扩展 %I
%~fI - 将 %I 扩展到一个完全合格的路径名
%~dI - 仅将 %I 扩展到一个驱动器号
%~pI - 仅将 %I 扩展到一个路径
%~nI - 仅将 %I 扩展到一个文件名
%~xI - 仅将 %I 扩展到一个文件扩展名
%~sI - 扩展的路径只含有短名
%~aI - 将 %I 扩展到文件的文件属性
%~tI - 将 %I 扩展到文件的日期/时间
%~zI - 将 %I 扩展到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩展到
空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩展到一个驱动器号和路径
%~nxI - 仅将 %I 扩展到一个文件名和扩展名
%~fsI - 仅将 %I 扩展到一个带有短名的完整路径名
%~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩展到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。(来自cmd for /?)
2.示例
在CMD脚本中,启动脚本时 start my.cmd var1 var2 var3 后面跟的参数var1 var2 var3传进脚本中后分别被%1 %2 %3 这三个变量来保存。%0 的值是脚本文件的路径,字符串操作就是在操作这些变量中的值。
示例
输出 (两种运行方式 两个结果)
1. 在cmd.exe中输入example 123 !@# qwe
的结果
2. 直接双击example.cmd的结果
以下都采用双击运行的方式来运行脚本
@echo off
echo %%~I - 删除任何引号("),扩展 %%I
echo %%~fI - 将 %%I 扩展到一个完全合格的路径名
echo %%~dI - 仅将 %%I 扩展到一个驱动器号
echo %%~pI - 仅将 %%I 扩展到一个路径
echo %%~nI - 仅将 %%I 扩展到一个文件名
echo %%~xI - 仅将 %%I 扩展到一个文件扩展名
echo %%~sI - 扩展的路径只含有短名
echo %%~aI - 将 %%I 扩展到文件的文件属性
echo %%~tI - 将 %%I 扩展到文件的日期/时间
echo %%~zI - 将 %%I 扩展到文件的大小
echo %%~$PATH:I - 查找列在路径环境变量的目录,并将 %%I 扩展
echo 到找到的第一个完全合格的名称。如果环境变量名
echo 未被定义,或者没有找到文件,此组合键会扩展到
echo 空字符串
echo ------------------------------------------------------
echo %%0 = %0
echo %%~0 = %~0
echo %%~f0 = %~f0
echo %%~d0 = %~d0
echo %%~p0 = %~p0
echo %%~n0 = %~n0
echo %%~x0 = %~x0
echo %%~s0 = %~s0
echo %%~a0 = %~a0
echo %%~t0 = %~t0
echo %%~z0 = %~z0
echo %%~$path:0 = %~$path:0
pause
输出
%0 = "C:\Users\y\Desktop\example.cmd"
%~0 = C:\Users\y\Desktop\example.cmd
%~f0 = C:\Users\y\Desktop\example.cmd
%~d0 = C:
%~p0 = \Users\y\Desktop\
%~n0 = example
%~x0 = .cmd
%~s0 = C:\Users\y\Desktop\example.cmd
%~a0 = --a--------
%~t0 = 2015/08/22 17:12
%~z0 = 1066
%~$path:0 = C:\Users\y\Desktop\example.cmd
请按任意键继续. . .
2. for循环 & setlocal enabledelayedexpansion
(启用延缓环境变量扩展)
1.语法
C:\Users\y\Desktop>for /?
对一组文件中的每一个文件执行某个特定命令。
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
2.示例
1.循环输出数字
@echo off
for %%a in (1,1,2,3,5,8) do (
echo %%a
)
pause
输出
1
1
2
3
5
8
请按任意键继续. . .
2.增量方式输出数字序列
FOR /L %variable IN (start,step,end) DO command [command-parameters]
@echo off
for /L %%a in (1,1,5) do (
echo %%a
)
pause
输出
1
2
3
4
5
请按任意键继续. . .
3.for循环中的变量
类似%0
这样的变量在for循环中要用%%0
来表示
类似%path%
这种变量在for循环中要用!path!
来表示
另外要在for循环中实时改变变量的值需要打开enabledelayedexpansion
(启用延缓环境变量扩展)开关
以下是示例:
1. 不打开enabledelayedexpansion
开关
@echo off
set var=123
for /L %%a in (1,1,5) do (
set var=%%a
echo a = %%a var = !var! %%var%% = %var%
)
pause
输出
a = 1 var = !var! %var% = 123
a = 2 var = !var! %var% = 123
a = 3 var = !var! %var% = 123
a = 4 var = !var! %var% = 123
a = 5 var = !var! %var% = 123
请按任意键继续. . .
2.打开enabledelayedexpansion
开关
@echo off
setlocal enabledelayedexpansion
set var=123
for /L %%a in (1,1,5) do (
set var=%%a
echo a = %%a var = !var! %%var%% = %var%
)
pause
输出
a = 1 var = 1 %var% = 123
a = 2 var = 2 %var% = 123
a = 3 var = 3 %var% = 123
a = 4 var = 4 %var% = 123
a = 5 var = 5 %var% = 123
请按任意键继续. . .
另外写博文是还遇到编辑器一个错误:
文章被保存到草稿箱,然后每次打开都是这个。
最后重启了一下浏览器才好。