中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 批处理中的%问题<----标题为cn_archer所加 
作者:
标题: 批处理中的%问题<----标题为cn_archer所加  上一主题 | 下一主题
hotdog
中级用户




积分 411
发帖 78
注册 2003-7-27
状态 离线
『楼 主』:  批处理中的%问题<----标题为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,要求只写一次,不该重复劳动)同时放在批文件中,并且只要在命令行中输入批文件名即可执行[无需在输入批文件名后再输入实际参数,否则,如果把这个批文件用call调入autoexec.bat中就不能自动执行!!]




[此贴子已经被cn_archer于2003-8-13 14:10:52编辑过]




2003-8-13 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cn_archer
元老会员

农民


积分 2903
发帖 991
注册 2003-7-23
来自 福建省
状态 离线
『第 2 楼』:  

hotdog,下次发帖请注意标题!!
否则直接删帖!



艰难奋长戟,万古用一夫

中国DOS联盟  http://www.cn-dos.net   欢迎大家来共同学习
我的MSN&E-Mail cn_archer@hotmail.com  QQ 56049418
2003-8-13 00:00
查看资料  发送邮件  发短消息 网志  OICQ (56049418)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 3 楼』:  

%1和%1%在纯DOS下其实是一样的呢。。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-8-13 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 4 楼』:  

以上的问题原是我提的,但为什么没有解答呢?

2003-8-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cn_archer
元老会员

农民


积分 2903
发帖 991
注册 2003-7-23
来自 福建省
状态 离线
『第 5 楼』:  

都会有回答的。除非那时候版主比较忙,或者帖子很快被挤下去,没被看到。



艰难奋长戟,万古用一夫

中国DOS联盟  http://www.cn-dos.net   欢迎大家来共同学习
我的MSN&E-Mail cn_archer@hotmail.com  QQ 56049418
2003-8-14 00:00
查看资料  发送邮件  发短消息 网志  OICQ (56049418)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

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:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2003-9-29 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无妄★模拟
初级用户

蝎蛇统领


积分 280
发帖 35
注册 2003-5-21
状态 离线
『第 7 楼』:  

可真是长知识啊~~`



我是菜鸟,我要变成老鸟!
       www.10.164.63.101.com
2003-10-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gotomsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 8 楼』:  

补充以下, 在for /f "eol= skip= tokens= delims="等 do command命令中,除了用 %a %b %c 等连续字母外,也可用 %1 %2 %3 等连续数字

2003-12-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: