为什么要将文件备份到启动文件夹的批处理文件会复制所有 System32 文件

Why Did a Batchfile Meant to Back Files Up to Startup Folder Copy All System32 Files

我经常使用 AutoHotKey,并且喜欢让我的所有脚本 运行 在启动时包含我的更改,所以我制作了一个批处理文件来将我的 AutoHotKey 文件夹中的所有内容备份到 windows 启动文件夹中并将其安排为每天 运行:

 xcopy ".\*" "C:\Users\%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" /y

我将此文件放在我的 AutoHotKey 目录中,当它 运行 时它会自行拾取,因为我忘记使用“.*.ahk”来仅获取 AutoHotKey 文件。所以现在我的启动文件夹中也有这个批处理文件,这是毫无意义但无害的(所以我认为)。

突然重启几次后,我的电脑在启动时出现了故障,打开了大量文件并启动了一堆不同的程序。我收到了数千个 "you cannot open a .dll" 错误。

我以为我感染了病毒,然后在安全模式下重新启动。我记得这个脚本并在重新安装 windows 之前检查了我的启动文件夹,发现其中有数千个文件,我将其删除。

作为实验,我重新启动了计算机几次,没有出现问题。然后我把批处理文件放回启动文件夹,我的电脑又出问题了。

我的问题是,为什么它会复制它所在目录以外的所有内容?另外,为什么它只在启动时导致此问题?我运行 Startup目录下的文件正常,没有任何反应。

你已经在上面的评论中得到了所有好的建议。但是让我再给你一些监督......

pause 添加到脚本底部。现在 运行 脚本,双击它。

你会注意到 cmd.exe 已经在它的工作目录中启动,C:\Windows\System32 所以你这样做:

xcopy ".\*" ...

您正在从工作目录进行有效复制c:\windows\system32

所以改为:

xcopy "C:\path\to\files\*" ....

您也可以 cd /d C:\path\to\files\ 但无论哪种方式,使用完整路径都是最好的解决方案,这意味着脚本可以放在磁盘上的任何位置......或任何磁盘。

此外,正如 Compo 的评论中已经提到的,所有现代 Windows 版本中都有一个预设的 AppData 变量,您可以通过 运行来自 cmd.exe:

echo %AppData%

所以你应该能够运行你的脚本为:

xcopy "C:\path\to\files\*" "%AppData%\Microsoft\Windows\Start Menu\Programs\Startup" /y