![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 08:58 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 关于批处理可替换参数的问题 |
| 可打印版本 876 / 9 |
| 第1楼 purplelichen | 发表于 2008-11-10 22:51 |
| 新手上路 发帖 8 积分 8 | |
|
关于批处理可替换参数的问题 如果可替换参数中含有"&"字符,批处理总是可以正确获取这个参数吗?
例如 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" 似乎被截去了,哪位高手可以帮忙解释一下啊?谢了! |
|
| 第2楼 huahua0919 | 发表于 2008-11-11 08:17 |
| 银牌会员 发帖 780 积分 1,608 | |
|
你问的问题有些级怪,首先根本就无法建立具有如此文件名(“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" |
|
| 第3楼 tireless | 发表于 2008-11-11 09:30 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
Re 2 楼 把 1&1.txt 拖入 1 楼的批处理上,&1.txt 不能被显示。
|
|
| 第4楼 wxcute | 发表于 2008-11-11 10:03 |
| 中级用户 发帖 211 积分 458 | |
|
在XP下 如果路径中含有空格,拖入批处理的文件其路径会自动加上“”引号,所以显示正确。
如果路径中没有空格,就不会自动加上引号了,导致&变成连接符,所以出错。 暂无解决方法。 |
|
| 第5楼 purplelichen | 发表于 2008-11-11 18:20 |
| 新手上路 发帖 8 积分 8 | |
|
多谢各位支持。
to huahua0919: 不好意思,使我表达得不好,我是建立一个 "1&1.txt"(文件名在引号内)的文本文 件,在命令行调用时能获取%1 参数 call test.bat "1&1.txt" 得到 "1&1.txt" 的显示结果,但如果用拖文件的方法传递参数 就只能显示 : C:\Users\heylichen\Desktop\1 不能显示&1.txt ,正如tireless 和 wxcute 所说。 如果真的没有解决办法,在不能正确接受含有"&"的文件名参数 时,有办法让 批处理能报告错误 吗? 我想多了解一些关于批处理参数传递的细节,希望各位高手指点. |
|
| 第6楼 huahua0919 | 发表于 2008-11-11 20:30 |
| 银牌会员 发帖 780 积分 1,608 | |
Originally posted by tireless at 2008-11-11 09:30 AM: 這是我的測試結果,不知道哪裡有錯 附件 pic.jpg (19.95 KiB) |
|
| 第7楼 tireless | 发表于 2008-11-11 20:34 |
| 银牌会员 发帖 1,122 积分 2,025 | |
Re 6 楼如果路径中含有空格,拖入批处理的文件其路径会自动加上“”引号,所以显示正确。 |
|
| 第8楼 huahua0919 | 发表于 2008-11-11 20:48 |
| 银牌会员 发帖 780 积分 1,608 | |
|
关于这个问题就是我还没说完的,不知道你们有没有测试
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當成一個參數,這時&又起到了连接的符的作用,而 " 則失去了保護的作用。....... |
|
| 第9楼 purplelichen | 发表于 2008-11-11 21:48 |
| 新手上路 发帖 8 积分 8 | |
|
多谢各位。
看了huahua0919的解说,又学到了新东西,谢谢! |
|
| 第10楼 Saber | 发表于 2008-11-11 22:13 |
| 初级用户 发帖 14 积分 26 | |
|
拖曳还是没有解决啊?
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |