![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-13 01:15 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS学习入门 & 精彩文章 (教学室) » 批处理中的%问题<----标题为cn_archer所加 |
| 可打印版本 1,023 / 7 |
| 第1楼 hotdog | 发表于 2003-08-13 00:00 |
| 中级用户 发帖 78 积分 411 | |
|
批处理中的%问题<----标题为cn_archer所加 %1和 %%1有什么关系和区别
批处理的%1错在哪里?请指教!! 1, @echo off dir %1 c:\d4.txt type %1 copy %1 e:\ dir 可以.但type 找不到文件 2, @echo off set c:\d4.txt=%1 dir %1 type %1 copy %1 e:\ 3, @echo off set 1=(or ==) c:\d4.txt dir %1% type %1% copy %1% e:\ 4, @echo off if exist %1 c:\d4.txt type %1 没反映,或语法不正确 哪里有问题? 应该怎么写能把形参(%1)和实参(c:\d4.txt,要求只写一次,不该重复劳动)同时放在批文件中,并且只要在命令行中输入批文件名即可执行 |
|
| 第2楼 cn_archer | 发表于 2003-08-13 00:00 |
| 元老会员 发帖 991 积分 2,903 来自 福建省 | |
|
hotdog,下次发帖请注意标题!!
否则直接删帖! |
|
| 第3楼 Wengier | 发表于 2003-08-13 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
%1和%1%在纯DOS下其实是一样的呢。。
|
|
| 第4楼 GOTOmsdos | 发表于 2003-08-14 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
以上的问题原是我提的,但为什么没有解答呢?
|
|
| 第5楼 cn_archer | 发表于 2003-08-14 00:00 |
| 元老会员 发帖 991 积分 2,903 来自 福建省 | |
|
都会有回答的。除非那时候版主比较忙,或者帖子很快被挤下去,没被看到。
|
|
| 第6楼 willsort | 发表于 2003-09-29 00:00 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re hotdog:
前面给出的例程,已经逼近正确答案,只需要再前进一步即可,下面给出我修改后的范例: ::Sample.bat @echo off set file=c:\d4.txt if not exist %file% goto error dir %file% type %file% copy %file% e:\ goto end :error echo File %file% not exist. echo. :end set file= 另外以下几点需要提醒一下: 1、批处理并非高级编程语言,并无所谓“形参”与“实参”的概念,而只有“命令行参数”,“循环变量”,“环境变量”等概念。典型情况如下: %0 %1 %1 ...%9 : 命令行参数,它本身也是变量 %%a %%b %%c ...%%z: 循环变量,仅用于FOR命令语句中,区分大小写,用于命令行时仅使用一个百分号%; %temp% %path%...:环境变量,相当于高级语言中的全局变量,这是引用其值时的形式,设置其值时不需要加双%,不区分大小写; 2、程序一中: dir %1 c:\d4.txt 存在语法错误,因为dir只分析一个合法的文件名参数,因此当此程序带参数运行时,将会得到错误结果。其它语句没有语法错误,但是因为运行时需要合法文件名作为参数,因此不合题目要求。 3、程序二中 set c:\d4.txt=%1 虽然不存在语法问题,但仍与作者的初衷背道而驰。因为它的赋值顺序是颠倒的——是把一个常量赋给一个变量,而非把一个变量赋给一个常量。另外,我本人也不建议在环境变量名中包含有": . \"等非字母字符,因为这容易造成对程序语句的误解。 4、程序三 set 1=c:\d4.txt 想把文件名赋给环境变量,但是切忌以单个数字作为环境变量名,因为它的名字空间会与命令行参数相冲突,而command解释时,会将%1%, %2%之类的二义用法优先解释为命令行参数。 另外,set 1==c:\d4.txt的用法是错误的,因为set处理命令行中的等号比较特别,并不像其它内部命令一样把它与空格一起忽略。 5、程序四仍然没有解决本质问题: if exist %1 c:\d4.txt type %1一句中,%1的位置有些尴尬,因为%1是做为文件名被作者引入的,但却在其后又指定了一个文件名,这直接导致以下结果:如果%1为空,则type %1执行时会提示必须的参数缺失(“Required parameter missing” );若%1不为空,则将C:\d4.txt作为一个命令执行,结果显然是“Bad command or file name”了。 |
|
| 第7楼 无妄★模拟 | 发表于 2003-10-14 00:00 |
| 初级用户 发帖 35 积分 280 | |
|
可真是长知识啊~~`
|
|
| 第8楼 GOTOmsdos | 发表于 2003-12-06 00:00 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
补充以下, 在for /f "eol= skip= tokens= delims="等 do command命令中,除了用 %a %b %c 等连续字母外,也可用 %1 %2 %3 等连续数字
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |