【发布时间】:2018-11-15 19:22:13
【问题描述】:
我经常使用 AutoHotKey,并且喜欢让我的所有脚本在启动时运行我的更改,所以我制作了一个批处理文件来将我的 AutoHotKey 文件夹中的所有内容备份到 Windows 启动文件夹中,并安排它每天运行:
xcopy ".\*" "C:\Users\%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" /y
我将这个文件放在我的 AutoHotKey 目录中,当它运行时它会自行拾取,因为我忘记使用“.*.ahk”来只获取 AutoHotKey 文件。所以现在我的启动文件夹中也有这个批处理文件,这是无意义但无害的(所以我想)。
突然重启几次后,我的电脑在启动时出现了故障,打开了大量文件并启动了一堆不同的程序。我收到了数以千计的“您无法打开 .dll”错误。
我以为我感染了病毒并以安全模式重新启动。我记得这个脚本并在重新安装 Windows 之前检查了我的启动文件夹,并在其中看到了数千个文件,我删除了这些文件。
作为一个实验,我重新启动了我的电脑几次,没有问题。然后我把批处理文件放回启动文件夹,我的电脑又出问题了。
我的问题是,为什么它会从它所在的目录之外的任何地方复制所有内容?另外,为什么它只会在启动时引起这个问题?我正常运行启动目录下的文件,没有任何反应。
【问题讨论】:
-
为什么不使用源的完整路径而不是相对路径?如果使用批处理文件路径会更好。
%~dp0 -
这就是我要切换到的,我只是想弄清楚为什么它会首先出现这种行为
-
因为您是以管理员身份运行的。您遇到问题是因为您没有遵循良好的做法。使用完整路径。什么都不做。
-
我的理解是你在启动时产生了一个子进程,它从父进程继承了环境。启动时工作目录为 SYSTEM32。
-
只是为了让您知道,在现代 Windows PC 中,
C:\Users\%USERPROFILE%\AppData\Roaming可以更简洁地表示为%AppData%。
标签: batch-file cmd startup xcopy