windows定时任务执行bat文件失败

时间:2021-09-13 08:12:01
情景:bat文件中包含了数据库备份和文件复制操作,文件备份目录为局域网内的一个共享服务器。
问题:如果用户直接执行bat文件,数据备份和文件复制都正常,但是如果运行windows定时任务来执行该bat文件,则只能备份,不能将文件复制到共享目录,不知是什么问题,麻烦知道的朋友帮帮忙,谢谢!

@echo off
set path=%path%;C:\Program Files\Microsoft SQL Server\100\Tools\Binn
set dt=%date:~0,4%%date:~5,2%%date:~8,2%
set dates=%date% %time%

rem 设置各种路径
rem 备份文件源地址
set pathfrom=F:\BACK\DATABASE_BACK\AutoBack
rem 文件备份地址
set pathto=Z:\DataBaseBack
rem 日志文件路径
set pathlogs=F:\BACK\logs\logs%dt%.txt

echo %dates% >> %pathlogs%
echo 差异备份开始(每天) >> %pathlogs%

SQLCMD.exe -S 127.0.0.1 -U sa -P 123qwe -i F:\TaskPlan\databaseNewDiffBack.sql

echo 差异备份文件生成成功 >> %pathlogs%


xcopy %pathfrom%\databaseNew_diff_%dt%*.bak  %pathto%  /s /h /d /c /y

echo 差异备份文件复制成功 >> %pathlogs%


rem pause

9 个解决方案

#1


修改Windows定时任务对应服务的登录为你当前的用户登录。

#2


引用 1 楼 zhao4zhong1 的回复:
修改Windows定时任务对应服务的登录为你当前的用户登录。

我试过好几个用户,管理员用户都用过。还是不行

#3


试试使用net use命令在批处理中映射网络驱动器。

C:\>net help use
此命令的语法是:


NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
        [/USER:[domainname\]username]
        [/USER:[dotted domain name\]username]
        [/USER:[username@dotted domain name]
        [/SMARTCARD]
        [/SAVECRED]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]


NET USE 用于将计算机与共享的资源相连接,或者切断计算机与共享资
 源的连接。当不带选项使用本命令时,它会列出计算机的连接。

devicename        指定一个名字以便与资源相连接,或者指定要切断的设备。
                  有两种类型的设备名:磁盘驱动器 (D: 至 Z:) 和打印机
                  (LPT1: 至 LPT3:)。输入 一个星号来代替一个指定的设备
                  名可以分配下一个可用设备名。
\\computername    指控制共享资源的计算机的名字。如果计算机名中包含有
                  空字符,就要将双反斜线 (\\) 和计算机名一起用引号
                  (" ")括起来。计算机名可以有1 到 15 个 字符。
\sharename        指共享资源的网络名字。
\volume           指定一个服务器上的 NetWare 卷。用户必须安装 Netware
                  的客户服务(Windows 工作站) 或者 Netware 的网关服务
                  (Windows 服务器) 并使之与 NetWare 服务器相连。
password          指访问共享资源所需要的密码。
*                 进行密码提示。当在密码提示符下输入密码时,密码不会显示。
/USER             指定连接时的一个不同的用户名。
domainname        指定另外一个域。如果缺省域,就会使用当前登录的域。
username          指定登录的用户名。
/SMARTCARD        指定连接使用在智能卡上的凭据。
/SAVECRED         指定保留用户名和密码。此开关被忽略,除非命令提示输入用
                  户名和密码。
/HOME             将用户与他们的主目录相连。
/DELETE           取消一个网络连接,并且从永久连接列表中删除该连接。
/PERSISTENT       控制对永久网络连接的使用。其默认值是最近使用的设置。
YES               在连接产生时保存它们,并在下次登录时恢复它们。
NO                不保存正在产生的连接或后续的连接;现有的连接将在下次登
                  录时恢复。可以使用 /DELETE 选项开关来删除永久连接。
NET HELP command | MORE 用于逐屏显示帮助。

#4


还可以试试
C:\>runas /?
RUNAS 用法:

RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ]
        /user:<UserName> program

RUNAS [ [/noprofile | /profile] [/env] [/savecred] ]
        /smartcard [/user:<UserName>] program

   /noprofile        指定不应该加载用户的配置文件。
                     这会加速应用程序加载,但
                     可能会造成一些应用程序运行不正常。
   /profile          指定应该加载用户的配置文件。
                     这是默认值。
   /env              要使用当前环境,而不是用户的环境。
   /netonly          只在指定的凭据限于远程访问的情况下才使用。
   /savecred         用用户以前保存的凭据。
                     Windows XP Home Edition 上没有这个选项。
                     该选项会被忽略。
   /smartcard        如果凭据是智能卡提供的,则使用这个选项。
   /user             <UserName> 应使用 USER@DOMAIN 或 DOMAIN\USER 形式
   program           EXE 的命令行。请参阅下面的例子

例如:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""

注意:  只在得到提示时才输入用户的密码。
注意:  USER@DOMAIN 跟 /netonly 不兼容。
注意:  /profile 跟 /netonly 不兼容。
注意:  /savecred 跟 /smartcard 不兼容。

#5


set path=%path%;C:\Program Files\Microsoft SQL Server\100\Tools\Binn
可能需要改为
set path=%path%; "C:\Program Files\Microsoft SQL Server\100\Tools\Binn "

#6


基本可以判定为权限问题, 可以给定时任务指定权限高的用户, 或者在目录上给那个用户加权限.

#7


给任务设置最高权限吧

#8


怎么解决的?

#9


楼主解决了嘛

#1


修改Windows定时任务对应服务的登录为你当前的用户登录。

#2


引用 1 楼 zhao4zhong1 的回复:
修改Windows定时任务对应服务的登录为你当前的用户登录。

我试过好几个用户,管理员用户都用过。还是不行

#3


试试使用net use命令在批处理中映射网络驱动器。

C:\>net help use
此命令的语法是:


NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
        [/USER:[domainname\]username]
        [/USER:[dotted domain name\]username]
        [/USER:[username@dotted domain name]
        [/SMARTCARD]
        [/SAVECRED]
        [[/DELETE] | [/PERSISTENT:{YES | NO}]]

NET USE {devicename | *} [password | *] /HOME

NET USE [/PERSISTENT:{YES | NO}]


NET USE 用于将计算机与共享的资源相连接,或者切断计算机与共享资
 源的连接。当不带选项使用本命令时,它会列出计算机的连接。

devicename        指定一个名字以便与资源相连接,或者指定要切断的设备。
                  有两种类型的设备名:磁盘驱动器 (D: 至 Z:) 和打印机
                  (LPT1: 至 LPT3:)。输入 一个星号来代替一个指定的设备
                  名可以分配下一个可用设备名。
\\computername    指控制共享资源的计算机的名字。如果计算机名中包含有
                  空字符,就要将双反斜线 (\\) 和计算机名一起用引号
                  (" ")括起来。计算机名可以有1 到 15 个 字符。
\sharename        指共享资源的网络名字。
\volume           指定一个服务器上的 NetWare 卷。用户必须安装 Netware
                  的客户服务(Windows 工作站) 或者 Netware 的网关服务
                  (Windows 服务器) 并使之与 NetWare 服务器相连。
password          指访问共享资源所需要的密码。
*                 进行密码提示。当在密码提示符下输入密码时,密码不会显示。
/USER             指定连接时的一个不同的用户名。
domainname        指定另外一个域。如果缺省域,就会使用当前登录的域。
username          指定登录的用户名。
/SMARTCARD        指定连接使用在智能卡上的凭据。
/SAVECRED         指定保留用户名和密码。此开关被忽略,除非命令提示输入用
                  户名和密码。
/HOME             将用户与他们的主目录相连。
/DELETE           取消一个网络连接,并且从永久连接列表中删除该连接。
/PERSISTENT       控制对永久网络连接的使用。其默认值是最近使用的设置。
YES               在连接产生时保存它们,并在下次登录时恢复它们。
NO                不保存正在产生的连接或后续的连接;现有的连接将在下次登
                  录时恢复。可以使用 /DELETE 选项开关来删除永久连接。
NET HELP command | MORE 用于逐屏显示帮助。

#4


还可以试试
C:\>runas /?
RUNAS 用法:

RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ]
        /user:<UserName> program

RUNAS [ [/noprofile | /profile] [/env] [/savecred] ]
        /smartcard [/user:<UserName>] program

   /noprofile        指定不应该加载用户的配置文件。
                     这会加速应用程序加载,但
                     可能会造成一些应用程序运行不正常。
   /profile          指定应该加载用户的配置文件。
                     这是默认值。
   /env              要使用当前环境,而不是用户的环境。
   /netonly          只在指定的凭据限于远程访问的情况下才使用。
   /savecred         用用户以前保存的凭据。
                     Windows XP Home Edition 上没有这个选项。
                     该选项会被忽略。
   /smartcard        如果凭据是智能卡提供的,则使用这个选项。
   /user             <UserName> 应使用 USER@DOMAIN 或 DOMAIN\USER 形式
   program           EXE 的命令行。请参阅下面的例子

例如:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""

注意:  只在得到提示时才输入用户的密码。
注意:  USER@DOMAIN 跟 /netonly 不兼容。
注意:  /profile 跟 /netonly 不兼容。
注意:  /savecred 跟 /smartcard 不兼容。

#5


set path=%path%;C:\Program Files\Microsoft SQL Server\100\Tools\Binn
可能需要改为
set path=%path%; "C:\Program Files\Microsoft SQL Server\100\Tools\Binn "

#6


基本可以判定为权限问题, 可以给定时任务指定权限高的用户, 或者在目录上给那个用户加权限.

#7


给任务设置最高权限吧

#8


怎么解决的?

#9


楼主解决了嘛