【问题标题】:Why Did a Batchfile Meant to Back Files Up to Startup Folder Copy All System32 Files为什么批处理文件意味着将文件备份到启动文件夹复制所有 System32 文件
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多