我的便携式驱动器的管理分区中有一个批处理文件,驱动器根目录上有一个符号链接到该文件的快捷方式。该文件的目的是卸载驱动器并将其重新安装为指定的盘符(主要是为了方便)。
打开文件时,它是相对于当前字母而不是卷 ID 打开的,因此自然地,当发生卸载时,命令处理器不知道下一步要做什么,因为它会根据需要读取文件而不是缓存它。
有两个可预见的解决方案我能想到但无法弄清楚:
- 让文件在执行前缓存到 RAM 中
- 使文件相对于卷 ID 而不是挂载点运行(尝试使用 {VOLID}\file,其中 {VOLID} 是卷 ID,但无法找到该文件,尽管它在那里(正确导航到 {VOLID}\打开了目录,但尝试打开文件未能正确打开文件。
尽管有其他答案,将整个批处理脚本缓存到 RAM 是很简单的。
您只需要构建一个块,因为块在执行之前会被解析和缓存。
但块有一些缺点,百分比扩展不起作用,因此需要使用延迟扩展。
call
and goto
无法使用,因为它们会尝试再次从文件中读取。
(goto) 2>nul & (
echo The script is started
REM Need to change the directory, else the unmount doesn't work
c:
mountvol e: /p
mountvol g: \\?\Volume{VOLID}\
dir G:\
echo The script will end now
REM Here you need the goto 2>nul hack to avoid an error message
)
The (goto) 2>nul &
这里看起来很奇怪,但在SO:如何使批处理文件自动删除? https://stackoverflow.com/a/20333575/463115.
它也可以在没有goto
,但随后脚本以错误消息结束
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)