É possível obter um 'errorlevel 1' de 'xcopy' no Windows 10?

4

A documentação da Microsoft declara que xcopy exit códigos são

Exit code   Description
    0       Files were copied without error.
    1       No files were found to copy.
    2       The user pressed CTRL+C to terminate xcopy.
    4       Initialization error occurred. 
            There is not enough memory or disk space, 
            or you entered an invalid drive name 
            or invalid syntax on the command line.
    5       Disk write error occurred.

Estou executando um sistema Windows 10 de 64 bits (espanhol) e tentei tudo em que consegui pensar para obter um errorlevel 1 de xcopy , mas não consegui. E por tudo quero dizer que a única coisa que eu não testei foi /N com nomes longos de arquivos em uma fonte onde nomes curtos não são habilitados (no meu ambiente eu não posso testá-lo). Os suspeitos usuais de curingas não correspondentes, nomes de arquivos não presentes, pastas vazias, /D , /EXCLUDE , /A , /M , /U , ... foram testados.

Eu acho que deve ser fácil (não arquivos encontrados ?, fácil), mas eu estava errado, não foi, então eu depurei xcopy.exe e é isso que eu vi:

  • xcopy internamente usa um método chamado DisplayMessageAndExit(messageID, WSTRING, exitCode) para, bem, exibir uma mensagem e sair. Ele também usa várias chamadas exit para deixar o programa em alguns casos (ex. Ctrl-C )

  • Não encontrei nenhuma chamada exit que pudesse usar um valor de 1

  • Na lista de chamadas feitas para DisplayMessageAndExit , nenhuma delas passa / recebe um valor de 1 como código de saída.

  • Na lista de chamadas feitas para DisplayMessageAndExit , apenas uma delas usa o MessageID 0x5622 (na minha instalação, os recursos associados estão em C:\Windows\System32\es-ES\ulib.dll.mui , é dependente de localidade), que é No se encuentra el archivo: %1 ( File not found - %1 ) e o código de saída usado na chamada é 4

Talvez exista uma maneira em que xcopy seja capaz de gerar o código de saída 1 , mas não sei como.

Portanto, a pergunta é: existe uma maneira de obter o código de saída errorlevel 1 em xcopy ? o que estou perdendo?

    
por MC ND 18.02.2017 / 12:17

2 respostas

0

Para obter um errorlevel1, a única coisa que eu acho que você pode fazer é ter uma fonte de arquivo que não existe lá.

    
por 14.03.2018 / 13:07
0

A única coisa em que consigo pensar é em algum tipo de condição de corrida que entre o xcopy reunindo a lista de arquivos que irá copiar e realmente fazendo a cópia, algum outro processo apaga ou move os arquivos.

Se você puder receber um erro 1 se apenas ALGUNS dos arquivos de origem estiverem faltando, talvez seja possível fazer isso de propósito. A única maneira que posso pensar em fazer isso de propósito é ter dois ou mais processos separados em execução, um comando xcopy e um delete ou move, todos operando nos mesmos arquivos de origem. Você precisará de uma fonte com muitos arquivos para dar aos processos concorrentes tempo para ultrapassar um ao outro.

  1. inicie um comando de movimentação, del ou robocopy / mov em uma pasta com muitos arquivos.
  2. em outra janela e bem antes de o primeiro comando terminar, inicie seu comando xcopy

Omitir a opção / C pode significar que, se for o primeiro arquivo, o xcopy tenta e falha, ele desistirá imediatamente sem copiar nenhum arquivo, satisfazendo assim a condição de arquivos NO copiados.

    
por 14.03.2018 / 13:21