在我的 Windows Server 2008 R2 计算机上,使用任务计划程序安排运行一个批处理文件。由于某种原因,批处理文件中只有一部分命令被执行;一些 MS DOS 命令被忽略。
MS Dos 批处理文件如下所示:
s:
cd "S:\Reports\"
sqlcmd -S ipAddress -U login -P password -d dbname -i "S:\query.sql" -o "S:\Folder\Report.txt"
copy /A /Y "S:\Folder\Report.txt" Y:\
当我双击运行批处理文件时,一切都按预期运行;但是当从任务计划程序执行时,只有 sqlcmd 部分正确运行。复制命令似乎没有运行。
Y:\ 是同一登录名下的映射驱动器。在输入完我的问题后,我返回并进行了另一次测试。有趣的是,如果我用本地驱动器替换映射驱动器,一切似乎都正常工作。所以,目前看来映射驱动器是问题所在。有什么解决此问题的方法吗?
本质上,如何使用从任务计划程序执行的批处理文件将文件复制或移动到映射驱动器(不同的机器)?
答案1
@briantist(复制自的答案)
S:
并且Y:
可能是映射的网络驱动器,但这些驱动器是在用户会话上下文中映射的。计划任务将在其自己的会话中运行,并且不会映射这些驱动器。
您应该使用共享的 UNC 路径 ( \\server\share
),因为它可以在任一上下文中工作(只要运行计划任务的用户可以访问该共享)。
答案2
当我尝试在 Powershell 上创建计划任务以将文件复制到映射驱动器时,我遇到了类似的挑战。计划任务似乎运行了,但复制操作不起作用:
以下是我修复的方法:
首先,我必须使用UNC 路径指定映射驱动器的路径:
Get-ChildItem -Path "C:\MyFiles\*" -Include *.jpg -Recurse | Copy-Item -Destination "\\192.168.54.20\CopiedFiles"
接下来,我使用以下命令设置计划作业:
$TaskName = "FileSync"
$Description = "This task will run periodically to sync .fin files from a specified source directory to a specified destination directory"
$ScriptPath = "C:\Users\my_userDesktop\file_sync.ps1"
$UserAccount = "COMP1\my_user"
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-ExecutionPolicy Bypass -File $ScriptPath"
$Principal = New-ScheduledTaskPrincipal -UserID $UserAccount -LogonType ServiceAccount
$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([System.TimeSpan]::MaxValue)
Register-ScheduledTask -TaskName $TaskName -Action $Action -Description $Description -Trigger $Trigger -Principal $Principal
笔记:$Principal
无论用户是否登录,都允许任务运行对于同步到映射驱动器的计划作业来说非常重要。
就这样。
我希望这有帮助