Windows调度程序不执行批处理脚本,但脚本可以从命令行正常工作

时间:2017-07-12 12:07:52

标签: windows batch-file scheduled-tasks mkdir

我想用今天的日期创建文件夹作为文件夹的名称。然后,我想将数据从远程机器移动到新创建的文件夹。

我写了一个看起来像

的批处理脚本

我的批处理脚本。
  name:run.bat

::@ECHO off
SET CurrentDate= %date:~-4,4%_%date:~-10,2%_%date:~7,2%
SET CurrentDate=%CurrentDate: =%
"%SystemRoot%\System32\cmd.exe"  /c mkdir  "Z:\some_name_commercial\%CurrentDate%"
C:\Users\H213561\Documents\pscp.exe -l username -pw **** username@mftp.somename.com:/Distribution/somename_corp/*  "Z:\some_name_commercial\%CurrentDate%"

脚本工作正常,当我从命令行运行上面的脚本时,它会执行我打算做的事情。但我无法将Windows调度程序中的脚本安排为日常工作。

我尝试了什么!!!

我认为问题在于mkdir命令,我尝试给出一个完整的路径 好像没有运气。

"%SystemRoot%\System32\cmd.exe"  /c mkdir  "Z:\some_name_commercial\%CurrentDate%"

P.S:Z:\是挂载的NAS(网络驱动器)

更新

当我的目标位置不是网络驱动器时,我能够正常工作。 但是,如果它是网络驱动器,则任务调度程序不起作用。

2 个答案:

答案 0 :(得分:1)

这适用于Windows Vista及更高版本。 Vista对计划任务进行了重大安全更新。目的是防止病毒在用户未登录时通过网络传播。

您的计划任务设置可能存在问题。假设Z:是映射的网络驱动器,您的计划任务可能没有看到映射。驱动器映射属于用户,因此只有在创建映射的用户登录时才会出现。

如果在任务设置中选择以最高权限运行,则任务计划程序将使用内置管理员帐户。此帐户是一个单独的帐户,具有单独的安全上下文。此选项不会为选择运行任务的帐户分配更高的管理员权限 - 它使用单独的帐户。内置管理员帐户的内容不会包含用户的驱动器映射。

在没有任何人登录的情况下运行时,任务管理器使用与您作为用户看到的不同的用户身份验证过程。它被称为S4U身份验证,它拒绝访问网络资源,因此在这种情况下您也不会看到映射驱动器。由于网络资源根本不可用,因此您也无法使用UNC。所以在这种情况下它根本看不到映射的驱动器 - 甚至不使用UNC而不是驱动器映射。

让它运行的唯一方法是让用户在启动计划任务时实际登录,取消选中以最高权限运行,并将任务用户设置为以登录用户身份运行。

https://technet.microsoft.com/en-us/library/cc722152(v=ws.11).aspx

答案 1 :(得分:0)

计划任务可以在"不同的会话中运行"根据您的设置。

例如,如果您有"仅在用户登录时运行" enter image description here

然后,您可以看到计划任务将在与用户相同的会话中运行。如果用户未登录,则任务将不会运行。该任务将看到用户的所有驱动器映射

enter image description here

如果设置为"运行用户是否登录",

enter image description here

然后,该过程在不同的会话中运行,即所谓的 - session 0

enter image description here

在此模式下,任务无法查看用户的驱动器映射。

(1)选项1 一种方法是在任务中明确映射驱动器

例如

net use Z: /delete
net use Z: <share name>

然后你的其余任务可以使用Z:

(2)备选方案2

始终使用完全限定的路径,即\\server name\share name\folder name

在大多数情况下,无论用户是否登录,您都希望该任务能够运行。在这种情况下,你不应该检查这个:

enter image description here