『第
3 楼』:
Quote: | Originally posted by zhclvip at 2007-2-4 04:48:
这个程序要带参运行。
无参就是什么都不显示就goto end了。
但是通过分析,即使带上参数运行,它也只会闪烁几秒而终止,这个时间与参数的长 ... |
|
谢谢回答,经过搜索学习,终于会了。跑到MS官方网站找到了这些东西,并总结了下。所以上面的代码要运行(假设保存为OK.BAT文件,调用的%1=ok.txt),则在DOS下输入OK.BAT OK.TXT 即可。
1.%加批处理参数引用符(用数字来表示):
批处理参数引用符,实际上也是一种变量,常用来做为批处理调用的参数.其中%0表示批处理自身,我们常常在批处理代码的最后输入DEL %0 来等批处理运行完后删除自身;%1-%9则是参数顺序,如批处理F.BAT内容为format %1,则调用该批处理格式化A时可以:F.BAT A:即可;但是当我们要引用第十一个参数引用符该怎么办呢?那么可以使用SHIFT命令移动DOS的参数起始指针,这类似C语言的指针操作.
例:建立一个MYCOPY.BAT,内容如下:XCOPY /S/C/Y %1\*.* %2,在命令中或批处理中就可以调用这些参数:mycopy.bat c:\boot d:\boot.可以看出这样比原来命令精简了很多.
例:以下批处理文件 Mycopy.bat 显示了如何使用包含任意数目批处理参数的 shift 命令。该批处理文件将一列文件复制到特定的目录。批处理参数由目录和文件名参数表示
@echo off
rem MYCOPY.BAT copies any number of files
rem to a directory.
rem The command uses the following syntax:
rem mycopy dir file1 file2 ...
set todir=%1
:getfile
shift
if "%1"=="" goto end
copy %1 %todir%
goto getfile
:end
set todir=
echo All done
2.%~加批处理参数修改符:
在批处理中也可以使用批处理参数修改符,修改符使用当前的驱动器和目录信息将批处理参数作为部分或完整的文件或目录名进行扩展.要使用修改符,请键入%~+合适的修改符,同样的可以使用批处理参数值来代替这些参数修改符.常见的修改符如下:
%*:扩展批处理文件中传递的所有参数的修改符,这个参数修改符号不能和其他参数修改符组合使用
%~1:扩展 %1 并删除任何外围引号 ("");
%~f1:将 %1 扩展到完全限定的路径名。
%~d1:将 %1 扩展到驱动器盘符。
%~p1:将 %1 扩展到路径。
%~n1:将 %1 扩展到文件名。
%~x1:将 %1 扩展到文件扩展名。
%~s1:扩展的路径仅包含短名称。
%~a1:将 %1 扩展到文件属性。
%~t1:将 %1 扩展到文件日期和时间。
%~z1:将 %1 扩展到文件大小。
%~$PATH:1:搜索 PATH 环境变量中列出的目录,并将 %1 扩展到第一个找到的目录的完全限定名称。如果没有定义环境变量名称,或没有找到文件,则此修改符扩展成空字符串。
%~dp1:将 %1 扩展到驱动器盘符和路径。
%~nx1:将 %1 扩展到文件名和扩展名。
%~dp$PATH:1:在 PATH 环境变量列出的目录中搜索 %1,并扩展到第一个找到的目录的驱动器盘符和路径。
%~ftza1:将 %1 扩展到类似 dir 的输出行。
3.其他问题:在批处理文件中,单个%将作为NUL处理,如ECHO A%B将显示为AB,ECHO A%B%C 将显示AC,这里的%B%被看做变量,如果没有设置则为NUL,如果要正确显示%则使用两个%%,如5%在批处理中表示为%%5,这就是在FOR语句中为什么要使用两个%%来表示变量的原因
|