强制批处理文件在运行前加载到 RAM

Art*_*lin 5 windows batch-file command-prompt

我在便携式驱动器的管理分区中有一个批处理文件,在驱动器的根目录上有一个符号链接到它的快捷方式。该文件的目的是卸载驱动器并将其重新安装为指定的字母(主要是为了方便)。

当文件被打开时,它是相对于当前字母而不是卷 ID 打开的,所以很自然地,当卸载发生时,命令处理器不知道下一步要做什么,因为它根据需要读取文件而不是缓存它.

有两种可预见的解决方案,我能想到但无法弄清楚:

  1. 使文件在执行前缓存到 RAM 中
  2. 使文件相对于卷 ID 而不是挂载点运行(尝试使用 {VOLID}\file,其中 {VOLID} 是卷 ID,但它无法找到该文件,尽管它在那里(正确导航到 {VOLID}\打开目录,但尝试打开文件没有正确打开文件。

jeb*_*jeb 5

尽管有其他答案,但将整个批处理脚本缓存到 RAM 是微不足道的。

您只需要构建一个块,因为块在执行之前会被解析和缓存。

但是块有一些缺点,百分比扩展不起作用,因此您需要使用延迟扩展。
call并且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
)
Run Code Online (Sandbox Code Playgroud)

(goto) 2>nul &在这里似乎很奇怪,但在SO:How to make a batch file delete自身中有解释?.
它也可以在没有 的情况下工作goto,但是脚本以错误消息结束