|
网上找到些资料,都不是很全,有些还有错误。闲着没事,重新将之整理了下,分享给需要的朋友。如果有错误和不足之处,还请指出来,我好重新修改,谢谢!
(一)%~I——删除全部引号("),扩展 %I(微软解释。下同)
先看这个例子:
复制下面内容,保存为c:\temp.txt,内容如下:
--------------分割线--------------
"1111
2222"
"3333"
"44"44
--------------分割线--------------
然后复制下面代码,保存为BAT文件,随便保存到哪里都行。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN (c:\temp.txt) DO @echo %%~I>>c:\temp1.txt
PAUSE
--------------分割线--------------
双击该BAT文件,会生成c:\temp1.txt文本文件,temp1.txt内容如下:
--------------分割线--------------
1111
2222"
3333
44"44
--------------分割线--------------
与之前temp.txt中的内容比较,会发现temp1.txt第一行和第三行的引号消失,这就是%~I删除引号的作用。
引号删除规则为(欢迎补充完善):
1.若字符串首部存在引号,首部的引号将被删除;
2.若字符串首尾同时存在引号,则同时删除首尾的引号;
3.若引号出现在字符串首部和中间,则只删除字符串首部的引号;
4.若引号只出现在字符串中间或者只出现在尾部,则引号不被删除。
(二)%~fI——将 %I 扩展到一个完全合格的路径名
复制下面代码,假设保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~fI
Pause
--------------分割线--------------
执行后显示内容如下:
C:\Documents and Settings\Administrator\桌面\test.bat
若将代码中的 %%~fI直接改成%%I,执行后显示内容如下:
test.bat
因此,如果%I变量的内容是一个文件名,%~fI就会将该文件扩展成文件所在的绝对路径+文件名,而不仅仅是文件名。
(三)%~dI——仅将 %I 扩展到一个驱动器号
复制下面代码,同样保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~dI
Pause
--------------分割线--------------
执行test.bat后CMD窗口显示如下:
C:
因此,如果变量%%I代表的是一个文件或者目录,%%~dI就会将该文件或者目录扩展成文件或目录所在的盘符号(C: D: E:等等)。
(四)%~pI——仅将 %I 扩展到一个路径
复制下面代码,保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~pI
Pause
--------------分割线--------------
执行test.bat后显示内容如下:
\Documents and Settings\Administrator\桌面\
可以看出,%~pI用法和(二)中的%~fI类似,%~pI是将%I变量代表的文件扩展成该文件所在的绝对路径(不含驱动器号和文件名)。
(五)%~nI——仅将 %I 扩展到一个文件名
复制下面代码,保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~nI
Pause
--------------分割线--------------
执行test.bat后显示内容如下:
test
因此,%~nI是将%I变量所代表的文件扩展成该文件的前缀名,不含点号(.)与扩展名。
(六)%~xI——仅将 %I 扩展到一个文件扩展名
这个与上面(五)中的%~nI作用相反,即:只扩展成点号(.)+扩展名。
(七)%~sI——扩展的路径只含有短名
复制下面代码,保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~sI
Pause
--------------分割线--------------
执行test.bat后显示内容如下:
C:\DOCUME~1\ADMINI~1\桌面\TEST.BAT
可以看出,%~sI的作用就是将%I变量代表的文件扩展成该文件所在的短文件路径名。
(八)%~aI——将 %I 扩展到文件的文件属性
复制下面代码,保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~aI
Pause
--------------分割线--------------
执行test.bat后显示结果如下:
--a------
可以看出,%~aI的作用就是将%I变量代表的文件扩展成该文件的属性(a代表存档,s代表系统,h代表隐藏,r代表只读,等)。
(九)%~tI——将 %I 扩展到文件的日期/时间
复制下面代码,保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~tI
Pause
--------------分割线--------------
执行后显示内容如下:
2011-12-15 17:41
因此,%~tI会将%I变量代表的文件扩展成该文件的修改日期与时间。
(十)%~zI——将 %I 扩展到文件的大小
复制下面代码,保存到桌面,命名为test.bat文件。
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ('dir /a /b test.*') DO @echo %%~zI
Pause
--------------分割线--------------
执行后显示内容如下:
34
因此,%~zI会将%I变量所代表的文件扩展成该文件的大小(单位:字节)。
(十一)%~$PATH:I——查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串。
复制下面代码,保存到桌面,命名为test.bat文件:
--------------分割线--------------
@echo off
FOR /F "delims=" %%I IN ("explorer.exe") DO @echo %%~$PATH:I
Pause
--------------分割线--------------
执行test.bat后CMD窗口显示结果如下:
C:\windows\explorer.exe
(说明:%~$PATH:I中的PATH可以用其它变量替代。如%~$aa:I,前提是%aa%事先已做过定义)
因此,%~$PATH:I是在%PATH%变量定义的路径里搜索指定的文件,如果文件存在,%~$PATH:I会被扩展成该文件所在的绝对路径名。如果%PATH%路径下没找到文件,%~$PATH:I将被扩展成空值,同时显示错误:ECHO处于关闭状态。
以上从(一)到(十一)的变量%I可以用其它替代,如%a或%i等。扩展变量符也可以组合使用,如: %~dpI、%~nxI等等。例子不举了,输入FOR /? 就明白用法了。
[ 本帖最后由 pznpt 于 2011-12-18 19:23 编辑 ] |
评分
-
查看全部评分
|