我想用今天的日期创建文件夹作为文件夹的名称。然后,我想将数据从远程机器移动到新创建的文件夹。
我写了一个看起来像
的批处理脚本我的批处理脚本。
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(网络驱动器)
更新
当我的目标位置不是网络驱动器时,我能够正常工作。 但是,如果它是网络驱动器,则任务调度程序不起作用。
答案 0 :(得分:1)
这适用于Windows Vista及更高版本。 Vista对计划任务进行了重大安全更新。目的是防止病毒在用户未登录时通过网络传播。
您的计划任务设置可能存在问题。假设Z:是映射的网络驱动器,您的计划任务可能没有看到映射。驱动器映射属于用户,因此只有在创建映射的用户登录时才会出现。
如果在任务设置中选择以最高权限运行,则任务计划程序将使用内置管理员帐户。此帐户是一个单独的帐户,具有单独的安全上下文。此选项不会为选择运行任务的帐户分配更高的管理员权限 - 它使用单独的帐户。内置管理员帐户的内容不会包含用户的驱动器映射。
在没有任何人登录的情况下运行时,任务管理器使用与您作为用户看到的不同的用户身份验证过程。它被称为S4U身份验证,它拒绝访问网络资源,因此在这种情况下您也不会看到映射驱动器。由于网络资源根本不可用,因此您也无法使用UNC。所以在这种情况下它根本看不到映射的驱动器 - 甚至不使用UNC而不是驱动器映射。
让它运行的唯一方法是让用户在启动计划任务时实际登录,取消选中以最高权限运行,并将任务用户设置为以登录用户身份运行。
https://technet.microsoft.com/en-us/library/cc722152(v=ws.11).aspx
答案 1 :(得分:0)
计划任务可以在"不同的会话中运行"根据您的设置。
然后,您可以看到计划任务将在与用户相同的会话中运行。如果用户未登录,则任务将不会运行。该任务将看到用户的所有驱动器映射
如果设置为"运行用户是否登录",
然后,该过程在不同的会话中运行,即所谓的 - session 0
在此模式下,任务无法查看用户的驱动器映射。
(1)选项1 一种方法是在任务中明确映射驱动器
例如
net use Z: /delete
net use Z: <share name>
然后你的其余任务可以使用Z:
(2)备选方案2
始终使用完全限定的路径,即\\server name\share name\folder name
在大多数情况下,无论用户是否登录,您都希望该任务能够运行。在这种情况下,你不应该检查这个: