Questão Como fazer uma mensagem de erro em um script em lotes se o alvo não estiver presente?


Fiz um modelo de script em lote que posso programar para selecionar um determinado destino, mas gostaria que o script Além disso lançar um personalizadas diálogo de erro se o destino ainda não estiver presente na máquina do usuário final.

Aqui está meu script atual:

set targetfilepath=%TARGETPATH%
%SYSTEMROOT%\explorer.exe /select, "%TARGETFILEPATH%"

Eu poderia incorporar isso no meu script? Se sim, onde devo colocá-lo ?:

IF NOT EXIST goto net send localhost "%MESSAGETXT%"

2


origem


Você pode usar IF EXIST para testar se um caminho ou arquivo já existe e continuar de lá. - LPChip
SuperUser não é um tipo de serviço "Por favor, escreva um script". Se você pesquisar no Google para IF e CMD, encontrará muitos exemplos. Sinta-se à vontade para editar sua pergunta com um script mais completo, para que possamos ajudar com pequenos erros. - LPChip
Eu estou votando para fechar esta questão como fora do tópico porque ela pede por scripts específicos. - Overmind


Respostas:


Eu também gostaria de usar um diálogo mais limpo para a mensagem de erro. Posso incorporar esse método no script em lote?

Sim, você pode correr msgbox com um script em lote usando wscript como no exemplo que forneci abaixo. Desde que você também indicou que você queria "usar um diálogo de limpeza para a mensagem de erro"Eu usei a linha de cima para definir uma variável e começar o script em lote novamente, mas com o /MIN opção para manter a janela do lote de ser tão perceptível. Simples, remova a linha superior se você não quiser usá-la.

Script em lote

Certifique-se de definir os valores para as variáveis SET TARGETPATH=, SET msgboxTitle=e SET msgboxBody= para as suas necessidades em conformidade.

IF NOT DEFINED MINIMIZED SET MINIMIZED=1 && START "" /MIN "%~dpnx0" %* && EXIT

SET TARGETPATH=C:\Users\User\Desktop\Test
IF NOT EXIST "%TARGETPATH%" GOTO :ERROR
%SYSTEMROOT%\EXPLORER /SELECT, "%TARGETPATH%"
GOTO :END

:ERROR
SET msgboxTitle=This is my Message Title
SET msgboxBody=This is my Message Body
SET tmpmsgbox=%temp%\~tmpmsgbox.vbs
IF EXIST "%tmpmsgbox%" DEL /F /Q "%tmpmsgbox%"
ECHO msgbox "%msgboxBody%",0,"%msgboxTitle%">"%tmpmsgbox%"
WSCRIPT "%tmpmsgbox%"

:END

Mais recursos


1



Excelente! Isso funcionou muito bem e é fácil de adicionar a um script existente. Obrigado. - Mr. Mendelli


set MESSAGETXT = "Seu texto vai aqui"
set TARGETPATH ​​= "Seu caminho vai aqui"
SE NÃO EXISTIR "% TARGETPATH%" IRÁ ERRO
% SYSTEMROOT% \ explorer.exe / select, "% TARGETFILEPATH%"
GOTO END
:ERRO
msg "Nome de usuário" "% MESSAGETXT%"
:FIM

Você quase teve isto. SS64 é seu amigo quando se trata de programação em lote. E o uso geral da linha de comando também: Aqui está o site deles.  Eu não tenho nenhuma afiliação com eles.

EDITAR: Uau, sim, eu fiz algumas suposições ruins lá e adicionei o código sem testar / olhar para ele. Windows 7 não tem net send mais, mas usa msg em vez de. Atualizei minha resposta e funciona no meu sistema. Você pode adicionar um PAUSE comando no final se você quiser que a linha de comando permaneça visível até que você pressione uma tecla para se livrar dela.


4



Obrigado! Eu não sabia que o site existia, eu sei o que eu vou estar freqüentando para informações sobre scripts em lote a partir de agora. No entanto, tentei seu script, mas parece que não funcionou. Deve haver uma pausa, talvez? - Mr. Mendelli


Infelizmente, o script fornecido por @Blerg não funcionou * (para mim). Eu me aventurei Estouro de pilha e encontrado esta discussão e usou-o em conjunto com o script de @ Blerg. O script agora é capaz de lançar uma mensagem de erro usando este script que eu joguei junto:

IF NOT EXIST "%TARGETPATH%" GOTO ERROR
%SYSTEMROOT%\explorer.exe /select, "%TARGETPATH%"
GOTO END
:ERROR
START CMD /C "ECHO The target could not be located because it does not exist! && PAUSE"
:END

(Tudo que eu tive que fazer foi substituir a quinta linha.)

Mesmo que isso funcione, eu também gostaria de usar um diálogo de limpeza para a mensagem de erro como este script VBS pode fazer:

x=msgbox("%WINDOWTEXT%" ,0, "%WINDOWTITLE%")

Posso incorporar tal método no script em lote ou devo traduzir o script em lote em um script básico visual?


1