楼 主
批处理中的%问题<----标题为cn_archer所加
发表于 2003-08-13 00:00 · 中国 福建 福州 仓山区 电信
中级用户
★★
积分 411 发帖 78 注册 2003-07-27 00:00 23年会员 UID 7622 性别 男
状态 离线
%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 楼
发表于 2003-08-13 00:00 · 中国 福建 福州 仓山区 电信
元老会员
★★★
农民
积分 2,903 发帖 991 注册 2003-07-23 00:00 23年会员 UID 7391 性别 男 来自 福建省
状态 离线
hotdog,下次发帖请注意标题!!
否则直接删帖!
艰难奋长戟,万古用一夫
中国DOS联盟 http://www.cn-dos.net 欢迎大家来共同学习
我的MSN&E-Mail cn_archer@hotmail.com QQ 56049418
第 3 楼
发表于 2003-08-13 00:00 · 美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736 发帖 10,521 注册 2002-10-09 12:00 23年会员 UID 9
状态 离线
%1和%1%在纯DOS下其实是一样的呢。。
Wengier - 新DOS时代
欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/
E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)
第 4 楼
发表于 2003-08-14 00:00 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 23年会员 UID 7105 性别 男
状态 离线
第 5 楼
发表于 2003-08-14 00:00 · 中国 福建 福州 电信
元老会员
★★★
农民
积分 2,903 发帖 991 注册 2003-07-23 00:00 23年会员 UID 7391 性别 男 来自 福建省
状态 离线
都会有回答的。除非那时候版主比较忙,或者帖子很快被挤下去,没被看到。
艰难奋长戟,万古用一夫
中国DOS联盟 http://www.cn-dos.net 欢迎大家来共同学习
我的MSN&E-Mail cn_archer@hotmail.com QQ 56049418
第 6 楼
发表于 2003-09-29 00:00 · 中国 山东 烟台 联通
元老会员
★★★★
Batchinger
积分 4,432 发帖 1,512 注册 2002-10-18 00:00 23年会员 UID 19 性别 男
状态 离线
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”了。
※ Batchinger 致 Bat Fans:请访问
批处理编程的异类 ,欢迎交流与共享批处理编程心得!
第 7 楼
发表于 2003-10-14 00:00 · 中国 吉林 四平 中移铁通
初级用户
★
蝎蛇统领
积分 280 发帖 35 注册 2003-05-21 00:00 23年会员 UID 2294 性别 男
状态 离线
可真是长知识啊~~`
我是菜鸟,我要变成老鸟!
www.10.164.63.101.com
第 8 楼
发表于 2003-12-06 00:00 · 中国 广东 广州 教育网
铂金会员
★★★★
C++启程者
积分 5,154 发帖 1,827 注册 2003-07-18 00:00 23年会员 UID 7105 性别 男
状态 离线
补充以下, 在for /f "eol= skip= tokens= delims="等 do command命令中,除了用 %a %b %c 等连续字母外,也可用 %1 %2 %3 等连续数字
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正