Como executar o arquivo em lote do compartilhamento de rede sem a mensagem “caminho UNC não é suportado”?

87

Estou tentando executar um arquivo em lote de um compartilhamento de rede, mas continuo recebendo a seguinte mensagem: "Caminho UNC não é suportado. Padronizando para o diretório do Windows." O arquivo em lote está localizado em \\Server\Soft\WPX5\install.bat. Enquanto conectado como administrador, na minha área de trabalho do Windows 7, eu navego \\Server\Soft\WP15\e clico duas vezes em install.bat, quando obtenho a mensagem "Caminho UNC não é compatível". mensagem. Encontrei algumas sugestões online informando que a unidade de mapeamento não funcionará, mas usar um link simbólico resolverá esse problema, mas o link simbólico não funcionou para mim. Abaixo está o conteúdo do meu arquivo em lote, agradeceria qualquer ajuda que possa me ajudar a realizar o que estou tentando fazer. Basicamente, desejo executar o arquivo em lote do \\Server\Soft\WP15\install.bat.

Conteúdo do arquivo em lote

mklink /d %userprofile%\Desktop\WP15 \\server\soft\WP15
\\server\soft\WP15\setup.exe
robocopy.exe "\\server\soft\WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s \\server\soft\WPX5\Custom\Migrate.reg

Além disso, como removo o link simbólico após a conclusão da instalação?

Ensopado
fonte
2
Anos depois, mas talvez útil para outra pessoa: depois de criar o vínculo simbólico, por que você continua se referindo ao caminho original? O objetivo do link simbólico é fornecer um caminho local que você possa usar. Por exemplo, não diga "\\ server \ soft \ WP15 \ setup.exe", diga "% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve
sério, esta é uma pergunta do ServerFault.com
Junchen Liu

Respostas:

137

PUSHD e POPD devem ajudar no seu caso.

@echo off
:: Create a temporary drive letter mapped to your UNC root location
:: and effectively CD to that location
pushd \\server\soft

:: Do your work
WP15\setup.exe
robocopy.exe "WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s WPX5\Custom\Migrate.reg

:: Remove the temporary drive letter and return to your original location
popd

Digite PUSHD /?na linha de comando para obter mais informações.

dbenham
fonte
2
Obrigado pelas respostas rápidas e sugestões. Eu esperava que sua sugestão funcionasse, mas infelizmente não funcionou para mim. Recebi a mesma mensagem: "... caminhos UNC não são suportados. Padronizando para o diretório do Windows." Também fiz com que a caixa de diálogo Controle de conta de usuário clicasse em Sim ou Não, embora tenha executado o arquivo enquanto estava conectado como membro do grupo de administradores.
Stew
26
@Stew No início de seu arquivo .bat, coloque: pushd %~dp0Isso deve fazer com que ele mude o diretório para aquele que contém seu arquivo bat. O aviso ainda será impresso, mas deverá funcionar normalmente. Se o arquivo bat usa '% ~ dp0' em outro lugar, pode haver problemas com isso, nesse caso, você pode detectar se %~dp0começa com '//' no início do arquivo bat e, se for assim pushd, e depois execute o arquivo bat novamente, então goto :EOF. Isso fará com que ele seja executado no diretório recém-mapeado.
Grant Peters
o cmd será executado no computador remoto ou local?
Dingxin Xu
@DingxinXu - O código remoto será executado localmente. Se você deseja executar o código no computador remoto, precisa de algo como o PsExec .
dbenham
3
@balki - Sim, coloque os comandos remotos em outro script. Depois PUSHD, execute o 2º script via CMD /C, e siga com POPD. O controle retornará ao script pai após a CMD /Csaída do script, mesmo que tenha sido encerrado por CTRL-C.
dbenham,
29

Há uma configuração de registro para evitar esta verificação de segurança (use-a por sua própria conta e risco):

No caminho do registro

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

adicione o valor DisableUNCCheck REG_DWORD e defina o valor como 0 x 1 (Hex).

Observação: no Windows 10 versão 1803, a configuração parece estar localizada em HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor

Vinzz
fonte
1
Não sei por que, mas encontrei minha pasta "Command Processor" no seguinte caminho: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh
Obrigado, é útil. Mas no Windows 10 1803, é HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, como @aoh apontou.
Edwin Yip
Vou atualizar a resposta então; obrigado pela precisão
Vinzz
26

Eu sinto que clsé a melhor resposta. Ele oculta a mensagem UNC antes que alguém possa vê-la. Combinei com um @pushd %~dp0logo após para que parecesse abrir o script e mapear o local em uma única etapa, evitando assim mais problemas UNC.

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd

Notas:

pushd irá alterar seu diretório de trabalho para a localização dos scripts na nova unidade mapeada.

popd no final, para limpar a unidade mapeada.

Grallen
fonte
4
Eu precisava do popdno final (Windows 7), caso contrário, as unidades mapeadas ficaram presas depois que a janela foi fechada.
Patrick
1
Funciona muito bem. Obrigado.
Jonas_Hess
1
Deve funcionar no Windows 10. Ainda é o "Prompt de Comando".
Grallen
11

Basicamente, você não pode executá-lo de um caminho UNC sem ver essa mensagem.

O que normalmente faço é colocar um CLSno início do script para não ter que ver essa mensagem. Em seguida, especifique o caminho completo para os arquivos no compartilhamento de rede que você precisa usar.

aforia
fonte
1
Obrigado. Vou tentar isso como a última opção, se não houver outra solução.
Stew
A resposta @jameslr funcionará, mas dá mais trabalho (digitação) do que normalmente estou disposto a fazer. Portanto, apenas limpar a tela para me livrar do erro já é o suficiente para mim. :)
aphoria
8

Eu precisava ser capaz de navegar apenas pelo Windows Explorer no compartilhamento do servidor e, em seguida, clicar duas vezes para iniciar o arquivo em lote. @dbenham me levou a uma solução mais fácil para meu cenário (sem popdpreocupações):

:: Capture UNC or mapped-drive path script was launched from
set NetPath=%~dp0

:: Assumes that setup.exe is in the same UNC path
%NetPath%setup.exe

:: Note that NetPath has a trailing backslash ("\")
robocopy.exe "%NetPath%Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s %NetPath%..\WPX5\Custom\Migrate.reg

:: I am not sure if WPX5 was typo, so use ".." for parent directory
set NetPath=
pause
JayRO-GreyBeard
fonte
@ peter-mortensen, editou os comentários no script 4x para capitalizar a primeira palavra? Digno de uma edição? Por que não colocar um ponto final no final para transformá-la em uma frase? Que tal: por ser apenas um comentário, propositalmente NÃO uso maiúsculas na primeira palavra dos comentários, EXCETO em aprovações e variáveis ​​(ou ênfase) para uma compreensão mais clara.
JayRO-GreyBeard
4

Em vez de iniciar o lote diretamente do explorer - crie um atalho para o lote e defina o diretório inicial nas propriedades do atalho para um caminho local como% TEMP% ou algo assim.

Para excluir o link simbólico, use o comando rmdir.

Jameslr
fonte
1
Isso funcionará, mas apenas se você quiser iniciar a partir de um atalho. Não ajudará se você deseja executar a partir de uma linha de comando ou chamar de outro arquivo em lote.
aphoria
2
Se você quiser chamar de outro lote ou linha de comando, você pode chamar assim: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr
2

Corri para o mesmo problema recentemente trabalhando com um arquivo em lote em uma unidade de compartilhamento de rede no Windows 7.

Outra maneira que funcionou para mim foi mapear o servidor para uma unidade através do Windows Explorer: Ferramentas -> Mapear unidade de rede. Dê a ele uma letra de unidade e um caminho de pasta para \ seu servidor. Como trabalho com o compartilhamento de rede, muitas vezes o mapeamento para ele o torna mais conveniente e resolveu o erro “caminho UNC não é suportado”.

Kai
fonte
2

Minha situação é um pouco diferente. Estou executando um arquivo em lote na inicialização para distribuir a versão mais recente dos aplicativos de negócios internos.

Nesta situação, estou usando a chave de execução do Registro do Windows com a seguinte string

cmd /c copy \\serverName\SharedFolder\startup7.bat %USERPROFILE% & %USERPROFILE%\startup7.bat

Isso executa dois comandos na inicialização na sequência correta. Primeiro copiando o arquivo em lote localmente para um diretório para o qual o usuário tenha permissão. Em seguida, executando o mesmo arquivo em lote. Posso criar um diretório local c: \ InternalApps e copiar todos os arquivos da rede.

Provavelmente é tarde demais para resolver a pergunta do autor da postagem original, mas pode ajudar outra pessoa.

James
fonte
1

Esta é a RegKey que usei:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
FreeSoftwareServers
fonte
0

Minha versão env windows10 2019 lts e eu adiciono esses dois dados binray, corrijo este erro

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDisableUNCCheck value 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNCCheck value 1

Zhui Wang
fonte
0

Este é um tópico muito antigo, mas eu ainda uso o Windows 7. :-)

Há um ponto que ninguém parece ter levado em consideração, o que provavelmente ajudaria os usuários do Windows 10 também.

Se as extensões de comando estiverem ativadas, o comando PUSHD aceita caminhos de rede além da letra e caminho normais da unidade.

Portanto, a resposta óbvia - e mais simples - pode ser habilitar extensões de comando no script de lote, se você pretende usar PUSHD. No mínimo, isso deve reduzir os problemas que você pode ter ao usar PUSHD com um caminho de rede.

Ed999
fonte
-1

Editar registros do Windows não vale a pena e não é seguro, use Map network drivee carregue o compartilhamento de rede como se ele fosse carregado de uma de suas unidades locais.

insira a descrição da imagem aqui

Adham Sabry
fonte
1
Como isso é diferente da resposta de Kai ?
SomethingDark
Não percebi tbh, será que as screenshots valem mais que mil palavras que fazem a diferença?
Adham Sabry