DOS批处理高级教程第三章FOR命令中的变量.doc
文本预览下载声明
FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!先把FOR的变量全部列出来: ~I - 删除任何引号(),扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号 %~pI - 仅将 %I 扩展到一个路径 %~nI - 仅将 %I 扩展到一个文件名 %~xI - 仅将 %I 扩展到一个文件扩展名 %~sI - 扩展的路径只含有短名 %~aI - 将 %I 扩展到文件的文件属性 %~tI - 将 %I 扩展到文件的日期/时间 %~zI - 将 %I 扩展到文件的大小 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串我们可以看到每行都有一个大写字母I,这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.比如:FOR /F %%z IN (set) DO @echo %%z这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz至于前面的%~p这样的内容就是语法了!好开始讲解:一、 ~I - 删除任何引号(),扩展 %I这个变量的作用就如他的说明,删除引号!我们来看这个例子:首先建立临时文件temp.txt,内容如下111122223333444444555555可建立个BAT文件代码如下:@echo off
echo ^1111temp.txt
echo 2222temp.txt
echo 3333^temp.txt
echo 444444temp.txt
echo ^555555temp.txt
复制代码
rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格
FOR /F delims= %%i IN (temp.txt) DO echo %%~i
pause
del temp.txt
复制代码
执行后,我们看CMD的回显如下:1111 #字符串前的引号被删除了2222 #字符串首尾的引号都被删除了3333 #字符串前无引号,后面的引号保留444444 #字符串前面的引号删除了,而中间的引号保留555555 #字符串前面的引号删除了,而中间的引号保留请按任意键继续. . .和之前temp.txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了!删除引号规则如下(BAT兄补充!)1、若字符串首尾同时存在引号,则删除首尾的引号;2、若字符串尾不存在引号,则删除字符串首的引号;3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。二、 %~fI - 将 %I 扩展到一个完全合格的路径名看例子:把代码保存放在随便哪个地方,我这里就放桌面吧.
FOR /F delims== %%i IN (dir /b) DO @echo %%~fi
pause
复制代码
执行后显示内容如下C:\Documents and Settings\Administrator\桌面\test.batC:\Documents and Settings\Administrator\桌面\test.vbs当我把代码中的 %%~fi直接改成%%i
FOR /F delims== %%i IN (dir /b) DO @echo %%i
pause
复制代码
执行后就会显示以下内容:test.battest.vbs通过对比,我们很容易就看出没有路径了,这就是将 %I 扩展到一个完全合格的路径名的作用也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名,自己动手动实验下就知道了!三、 %~dI - 仅将 %I 扩展到一个驱动器号看例子:代码如下,我还是放到桌面执行!
FOR /F delims== %%i IN (dir /b) DO @echo %%~di
pause
复制代码
执行后我CMD里显示如下C:C:我桌面就两个文件test.bat,test.vbs,%%~di作用是,如果变量%%i
显示全部