中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于批处理可替换参数的问题
作者:
标题: 关于批处理可替换参数的问题 上一主题 | 下一主题
purplelichen
新手上路





积分 8
发帖 8
注册 2008-11-10
状态 离线
『楼 主』:  关于批处理可替换参数的问题

如果可替换参数中含有"&"字符,批处理总是可以正确获取这个参数吗?

例如

rem ------------test.bat------------
@echo off
echo %1
pause
rem ---------------------------------


在命令行输入 call test.bat "1&1.txt"显示结果为 :

1&1.txt

正是我想看到的。但当在windows GUI下,把一个名为"1&1.txt"(
假设它在桌面上)的文本文件拖放到test.bat,显示结果为:

C:\Users\heylichen\Desktop\1

后面的"&1.txt" 似乎被截去了,哪位高手可以帮忙解释一下啊?谢了!

2008-11-10 22:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  

你问的问题有些级怪,首先根本就无法建立具有如此文件名(“1&1.txt”)的文本文件(包括“号),估計你的意思建立的文本文件为1&1.txt的文件,但是這樣的文件拖放到上面的TEST.BAT中显示的结构还是1&1.txt完整的路径。不知道你是如何测试除上面的结果的。
从外界环境传递给命令行的数据是不会被再次解析的,所以即使你的文本文件名有再多的特殊字符都能够完整的显示。比如1&^1.txt这样的结构。

其实你应该测试的多一些这些结构
call test.bat 1&1.txt
call test.bat "1&1.txt"
call test.bat ”"1&1.txt"
call test.bat "““1&1.txt"

2008-11-11 08:17
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 3 楼』:  Re 2 楼

1&1.txt 拖入 1 楼的批处理上,&1.txt 不能被显示。

2008-11-11 09:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 4 楼』:  在XP下

如果路径中含有空格,拖入批处理的文件其路径会自动加上“”引号,所以显示正确。

如果路径中没有空格,就不会自动加上引号了,导致&变成连接符,所以出错。

暂无解决方法。

   此帖被 +1 点积分    点击查看详情   
评分人:【 tireless 分数: +1  时间:2008-11-11 10:05




┌───────┐
├→学习→实践→┤
└───────┘
2008-11-11 10:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
purplelichen
新手上路





积分 8
发帖 8
注册 2008-11-10
状态 离线
『第 5 楼』:  

多谢各位支持。

to huahua0919:
不好意思,使我表达得不好,我是建立一个 "1&1.txt"(文件名在引号内)的文本文
件,在命令行调用时能获取%1 参数

call test.bat "1&1.txt"

得到 "1&1.txt" 的显示结果,但如果用拖文件的方法传递参数
就只能显示 :
C:\Users\heylichen\Desktop\1

不能显示&1.txt ,正如tireless 和 wxcute 所说。

如果真的没有解决办法,在不能正确接受含有"&"的文件名参数
时,有办法让 批处理能报告错误 吗?

我想多了解一些关于批处理参数传递的细节,希望各位高手指点.

2008-11-11 18:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by tireless at 2008-11-11 09:30 AM:
1&1.txt 拖入 1 楼的批处理上,&1.txt 不能被显示。

這是我的測試結果,不知道哪裡有錯

附件 1: pic.jpg (2008-11-11 20:36, 19.95 K,下载次数: 1)


2008-11-11 20:30
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 7 楼』:  Re 6 楼



  Quote:
如果路径中含有空格,拖入批处理的文件其路径会自动加上“”引号,所以显示正确。

如果路径中没有空格,就不会自动加上引号了,导致&变成连接符,所以出错。

 

2008-11-11 20:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 8 楼』:  

关于这个问题就是我还没说完的,不知道你们有没有测试
call test.bat 1&1.txt
call test.bat "1&1.txt"
call test.bat ““1&1.txt"
call test.bat "““1&1.txt"
我们知道参数基本是通过空格来区分的,在 “  中的特殊字符会被系统自动转义,而系统用的转义符就是和我们用的是同一个转义符(^),所以其中的任何特殊字符都会被转义,但当我用"1&^1.txt"的時候你會发现得到的结果会是"1&^^1.txt",系统默认^也是特殊字符,所以也会用^进行转义,导致在这种情况下 “ 失去的保护的功能,但其他的还是不变。
测试call test.bat ““1&1.txt"的结果你还会发现系统会吧""1當成一個參數,這時&又起到了连接的符的作用,而 " 則失去了保護的作用。.......

2008-11-11 20:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
purplelichen
新手上路





积分 8
发帖 8
注册 2008-11-10
状态 离线
『第 9 楼』:  

多谢各位。
看了huahua0919的解说,又学到了新东西,谢谢!

2008-11-11 21:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Saber
初级用户





积分 26
发帖 14
注册 2008-7-6
状态 离线
『第 10 楼』:  

拖曳还是没有解决啊?

2008-11-11 22:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: