我在 Windows Server 2003 R2 中有一个计划任务,该任务应该从网络位置(映射驱动器)获取一些文件并将它们复制到本地文件夹,以准备当天晚些时候通过 FTP 同步到移动设备。
当我单击并运行该任务时,该任务运行没有问题。任务计划程序表示它正在运行并更新其运行时间并且文件出现在正确的位置。然而...
当任务应该在夜间运行时(并且我尚未登录),任务会运行(任务计划程序指示任务在指定时间运行),但不会发生文件复制。我怀疑这与登录帐户、然后在网络驱动器连接并准备就绪之前运行文件副本的任务有关。
这是我的批处理文件中的代码:
@echo off
FORFILES /p "K:\Oncology\BSWRICS-MDM" /s /m *.* /c "cmd /c Del @path" /d -30
set "cleanup=K:\Oncology\BSWRICS-MDM"
for /f "usebackq tokens=*" %%a in (`dir /b/s/ad "%cleanup%" ^| sort /r`) do (rmdir "%%~a" 2>nul && echo:Removed: "%%a")
xcopy K:\Oncology\BSWRICS-MDM\*.* C:\wamp\www\Portal\files\BSWRICS-MDM /Y /S
FORFILES /p "C:\wamp\www\Portal\files\BSWRICS-MDM" /s /m *.* /c "cmd /c Del @path" /d -30
前几行从本地文件夹中删除超过 30 天的文件,然后进行 xcopy。正如我所说,当我第一次登录时,这个脚本运行得很好。
是否可以在开始处插入一些代码,让脚本检查网络驱动器是否已准备好,并且只有在 TRUE 时,才继续执行下一条指令?
对预期问题的一些回答: - 网络驱动器号永远不会改变。 - 使用计划任务登录的帐户与我可以成功运行该任务的帐户相同。 - 任务实际运行(已登录任务计划程序),但没有证据表明已执行文件复制。
提前致谢。
最佳答案
您可以删除映射的驱动器并尝试再次映射它,然后等到错误级别显示它已连接后再继续。
@echo off
:LOOP
net use Y: /delete
net use Y: \\server\share
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
关于windows - 计划任务.bat - 检查网络驱动器是否准备就绪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925553/