Na minha máquina Windows Server 2008 R2, um arquivo em lotes está agendado para ser executado usando o Agendador de Tarefas. Por algum motivo, somente uma parte dos comandos no arquivo de lote é executada; Alguns comandos do MS-DOS são ignorados.
O arquivo MS Dos Batch se parece com isto:
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:\
Quando eu executo o arquivo em lotes clicando duas vezes nele, tudo é executado como pretendido; Mas quando é executado a partir do agendador de tarefas, apenas a parte sqlcmd é executada corretamente. O comando de cópia parece não rodar.
O Y: \ é uma unidade mapeada sob o mesmo login. Depois de digitar minha pergunta até agora, voltei e fiz mais um teste. Curiosamente, se eu substituir a unidade mapeada pela unidade local, tudo parece estar funcionando bem. Então, neste ponto, parece que a unidade mapeada é o problema. Alguma idéia sobre como resolver isso?
Essencialmente, como copiar ou mover arquivos para uma unidade mapeada (máquina diferente) usando o arquivo de lote executado a partir do Agendador de Tarefas?
>x:\dir\Batch.log 2>&1
à primeira linha e>>x:\dir\Batch.log 2>&1
a cada um dos outros, você deve ver qual é o problema quando examinax:\dir\Batch.log
(x
edir
é uma unidade e um diretório de sua escolha).Respostas:
@briantist (resposta copiada de)
S:
eY:
provavelmente são unidades de rede mapeadas, mas elas são mapeadas no contexto de uma sessão do usuário. A tarefa agendada será executada em sua própria sessão e não terá essas unidades mapeadas.Você deve usar o caminho UNC do compartilhamento instead (
\\server\share
), pois isso deve funcionar em qualquer um dos contextos (contanto que o compartilhamento esteja acessível para o usuário em que a tarefa agendada está sendo executada).fonte