Board logo

标题: 用记事本打开批处理 [打印本页]

作者: 26933062     时间: 2007-2-4 11:24    标题: 用记事本打开批处理

因我的鼠标右键坏了,突发奇想,想编一批处理a.bat,运行以后可以用记事本打开b.bat,不知道能否实现?[/size]
作者: 无奈何     时间: 2007-2-4 11:37
尾行添加以下语句试试:
start notepad "%~0"

call start notepad "%~0"

调用可执行程序用第一个,调用批处理用第二个。
作者: 26933062     时间: 2007-2-4 11:55
多谢版主
能解释一下 notepad 命令是干什么的吗? 谢谢!!!
作者: 无奈何     时间: 2007-2-4 11:59
搜索一下系统目录 notepad.exe 就知道了,不是你说的 “记事本” 吗?
作者: anqing     时间: 2007-2-4 12:14
版主的命令不太懂
作者: 无奈何     时间: 2007-2-4 12:55


  Quote:
Originally posted by anqing at 2007-2-4 12:14:
版主的命令不太懂

我猜想你对 call 与 start 的使用有疑问,详情参阅一下帮助。

我简单说明一下:

对于 call 与 start 很多时候能完成同样的命令,也可以组合起来使用。
简单点说一下两者的区别(个人体会)

call :可以调用可执行程序和代码段,也可以调用 set 等命令完成变量的转义(或者称宏替换我不确定该如何准确称呼),主程序会等待调用结束。

start:同样可以调用可执行程序和代码段,默认参数使用时主程序不等待调用结束继续下面语句的执行,可以加 /WAIT 参数等待命令结束。

启动 exe 程序一般使用 start 命令,启动 批处理脚本 一般使用 call ,当然根据具体情况选择,也可以混合使用。
作者: zhuzhu818     时间: 2007-2-5 09:41
有点疑问后面 "%~0"

是什么意思呢???解释一下好吗?
作者: anqing     时间: 2007-2-5 12:10
call start notepad "%~0"
这个放在p中,运行后,会打开这个p,用记事本打开,%0是表示调用自身,但加一个~号,意思可能就变了,就不懂了?
把这个含有call start notepad "%~0"的p中,拖进其它的p中,会自动打开运行哪个p

版主的这两条命令,真深
作者: anqing     时间: 2007-2-5 12:22
楼主可以在cmd,打入 echo start notepad "%~1">d:\a.bat,然后,把想打开的其它p拖进来 ,就可以查看p的代码了?
右键坏了,不如换个标!
作者: lizaoyou     时间: 2007-2-5 12:33
也不明白"%~0",仅知"~"可能是一元运算符。
作者: 无奈何     时间: 2007-2-5 14:13
%~0 只是 %0 的扩展,其含义是删除引号。
详情见:for /?
作者: lizaoyou     时间: 2007-2-5 14:35
谢版主释疑。
作者: anqing     时间: 2007-2-5 22:14
call start notepad "%~0"
请问版主,这句在p中,改成call start notepad %0的话,和call start notepad "%~0"有什么不同??
作者: vkill     时间: 2007-2-5 23:11


  Quote:
Originally posted by anqing at 2007-2-5 22:14:
call start notepad "%~0"
请问版主,这句在p中,改成call start notepad %0的话,和call start notepad "%~0"有什么不同??

防止文件名中有空格等
作者: 6622186     时间: 2007-3-18 11:44
学习了, 收下, 谢谢.
作者: everest79     时间: 2007-3-19 00:00


  Quote:
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"

作者: xswdong     时间: 2007-3-19 11:12
%~0 只是 %0 的扩展,其含义是删除引号。
无奈何
版主 的解释到位