中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-25 06:58
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 用记事本打开批处理 查看 6,740 回复 16
16 发表于 2007-03-19 00:00 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
Originally posted by anqing at 2007-2-5 09:14 AM:
call start notepad "%~0"
请问版主,这句在p中,改成call start notepad %0的话,和call start notepad "%~0"有什么不同??

~是扩展功能,没有扩展项目时,只是去除引号
这样是为了提高程序的兼容性
因为脚本在不同的调用方式下%0参数是不同的(完整路径与名称以及有无引号)
为了避免路径或名称中的空格,我们需要给notepad的参数%0加上引号,而当系统默认引用时,这引号是自动就加上去的,但你若是已经定义了自身名称,那引用时会使用定义后的,例如命令行下执行test.cmd,这是%0的值就是test.cmd,不会有引号,而不是你双击执行时的"path\test.cmd",由于这种现像,系统默认的引号反而会在不同的运行方式下成了导致运行故障的环节""path\test.cmd""这样双引号的情形会让脚本中断并退出,所以版主采用了不管有没有引号,先使用~来删除,再人工添加

例如以下代码,双击执行会中断,但手工调用是一直可循环执行的

echo %0
echo %~0
pause
call "%0"
17 发表于 2007-03-19 11:12 ·  中国 黑龙江 牡丹江 电信
中级用户
★★
积分 216
发帖 129
注册 2007-02-14 07:26
19年会员
UID 79469
性别 男
状态 离线
%~0 只是 %0 的扩展,其含义是删除引号。
无奈何
版主 的解释到位
论坛跳转: