windows批处理文件不退出

Posted

技术标签:

【中文标题】windows批处理文件不退出【英文标题】:windows batch file not exiting 【发布时间】:2018-03-20 07:56:14 【问题描述】:

我不擅长 Windows 脚本。 (我是linux人) 我必须删除两个目录中超过 n 天的文件。 我在脚本中使用 2 forfiles 命令。当我手动运行脚本时没有问题,因此它正在运行并正确完成其工作,大约需要 30 秒才能完成

所以我创建了一个任务来每天在任务调度程序中运行这个批处理文件 当任务计划程序执行脚本时,脚本无法结束,我可以在任务管理器中看到一个正在运行的 forfiles 命令,第二天任务管理器会创建一个脚本/命令已经运行的日志。所以我要终止脚本并再次运行“手动”,它再次成功运行并在 30-35 秒内完成其工作

我的脚本是这样的

y:
cd \<path1>
forfiles /s /d -120 /m *.* /c "cmd /c del @path"
cd \<path2>
forfiles /s /d -120 /m *.* /c "cmd /c del @path"
EXIT

我怎样才能从任务管理器中正确运行这个批处理文件?

谢谢

【问题讨论】:

我假设,Y: 是一个网络驱动器。您的计划任务没有连接网络驱动器。您必须将它与批处理文件中的net use y: \\server\folder 连接起来,也许您还必须提供有效的凭据。 您好,您是对的,所以 Y 是网络驱动器,但驱动器没有连接问题。我可以手动运行脚本没有任何问题谢谢 net use &gt;&gt;script.log 和/或dir y:\&lt;path1&gt; &gt;&gt;script.log 插入您的批处理文件并自己查看。 请把你的问题的标题改得更具体一些,目前的问题很差! 我已经添加了带有目录完整路径的 /P 选项,它的工作原理 【参考方案1】:

对我来说,这听起来像是权利问题。你如何执行你的脚本(直接通过启动程序或通过批处理文件)?您正在运行哪些窗口?

在 Windows 7 和任务计划程序上:

填写正确的用户 - 谁有权运行任务和访问文件。

尝试在选中复选框 Run with highest privileges 的情况下运行脚本。

编辑

斯特凡是对的。如果您从批处理文件中运行它,则必须使用正确的凭据映射网络驱动器:

net use &lt;driver letter&gt; "\\&lt;servername&gt;\&lt;sharename&gt;" /user:&lt;username&gt; &lt;password&gt;

你可以这样做:

IF NOT EXIST y:\ (
  ECHO "The y: drive does not exist.  Mapping"
  net use y: "\\<servername>\<sharename>" /user:<username> 
)

【讨论】:

Hello Tukan 抱歉缺少输入 操作系统是 Windows 2012 R2 我不是操作系统和/或域管理员,所以我使用普通用户权限运行此脚本 我已应用最高权限复选框并再次尝试但没有进展, script/forfiles commmand 正在运行最后 4 分钟(没有要删除的文件 :))感谢您的回复 @user984074 我没有 Win2012R2 来测试它。但斯蒂芬所说的很有可能。

以上是关于windows批处理文件不退出的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 Windows 批处理文件提前退出?

Windows批处理文件中的Docker退出代码

cmd批处理,退出后继续处理的问题

如果不存在在 Windows 批处理中不起作用

退出批处理文件中的 FOR 循环?

使用 Windows 批处理命令循环直到文件存在