我在Windows Server 2003 R2中有一项计划任务,该任务应该从网络位置(映射驱动器)获取一些文件,并将它们复制到本地文件夹,为当天晚些时候通过FTP同步到移动设备做准备。
当我点击并运行任务时,它运行没有问题。任务调度程序说它正在运行更新,它运行的时间和文件出现在正确的位置。然而
当任务应该在夜间运行时(我还没有登录),任务会运行(任务调度程序指示任务在指定时间运行),但不会发生文件复制。我怀疑这与将帐户登录,然后在网络驱动器连接并准备就绪之前运行文件副本的任务有关。
这是我从批处理文件中得到的代码:
@echo off
FORFILES /p "K:OncologyBSWRICS-MDM" /s /m *.* /c "cmd /c Del @path" /d -30
set "cleanup=K:OncologyBSWRICS-MDM"
for /f "usebackq tokens=*" %%a in (`dir /b/s/ad "%cleanup%" ^| sort /r`) do (rmdir "%%~a" 2>nul && echo:Removed: "%%a")
xcopy K:OncologyBSWRICS-MDM*.* C:wampwwwPortalfilesBSWRICS-MDM /Y /S
FORFILES /p "C:wampwwwPortalfilesBSWRICS-MDM" /s /m *.* /c "cmd /c Del @path" /d -30
前几行从本地文件夹中删除超过30天的文件,然后进行xcopy。正如我所说,当我第一次登录时,这个脚本非常有效。
如果网络驱动器准备好了,我是否可以在开始时插入一些代码来检查脚本,只有在TRUE的情况下,才能继续下一条指令?
预期问题的一些答案:-网络驱动器号永远不会更改。-使用计划任务登录的帐户与我可以成功运行任务的帐户相同。-该任务实际运行(已登录任务调度程序),但没有证据表明已执行文件复制。
提前谢谢。
您可以删除映射的驱动器并尝试再次映射,然后等到错误级别显示它已连接后再继续。
@echo off
:LOOP
net use Y: /delete
net use Y: \servershare
if errorlevel 1 (
goto :ERROR
) else (
goto :OK
)
:ERROR
echo ERROR!
rem Try again!
timeout /t 5
goto :LOOP
:OK
echo OK!
rem Carry on!
pause >nul