Estou escrevendo um pequeno arquivo em lote para copiar meu projeto C# para outra unidade. Estou usando XCOPY
para copiar uma pasta inteira (ainda temos algumas máquinas XP, então robocopy
não é uma opção). No entanto, quando executo o arquivo em lote, ele me diz que não consegue encontrar o FILE especificado (por que está procurando um arquivo e não uma pasta, não tenho ideia).
Aqui está minha estrutura de pastas. Gostaria de copiar folder
para a program\dst
pasta na O
unidade.
src
-folder
-batchFile.bat
O
-program
--dst
Meu batchFile.bat contém a seguinte linha
XCOPY ".\folder" "O:\program\dst" /E
Quando executo isso, ele diz:
File Not Found - folder
mesmo que definitivamente exista (como uma pasta, não um arquivo).
Responder1
Como outras respostas sugerem, o uso .\folder
inicia no diretório atual, enquanto você deseja a localização do arquivo em lote:
XCOPY "%~dp0folder" "O:\program\dst" /E
Você poderia cd
ir para a pasta primeiro, mas isso é mais elegante, IMO.
Responder2
Eu tentei isso e funciona para mim. Suponho que você criou um atalho para o arquivo em lote e o diretório inicial não está correto. Nesse caso, adicionar um cd
comando ao início do arquivo em lote para alterar o diretório src
deve corrigi-lo ou, alternativamente, usar um caminho absoluto em folder
vez de relativo:
cd "C:\Whatever\src"
XCOPY ".\folder" "O:\program\dst" /E
ou
XCOPY "C:\Whatever\src\folder" "O:\program\dst" /E
Responder3
Em seu script, coloque o comando abaixo bem no início do seu arquivo CMD:
eco "%cd%"
Então observe o que este comando produz.
Se o caminho completo do diretório "pasta" for "C:\ABC\folder", o comando echo "%cd%" deverá gerar a saída "C:\ABC". No entanto, se você vir algo diferente disso, seu comando XCOPY acionará o erro de arquivo não encontrado. Isso é normal porque o XCOPY não pode determinar se "pasta" é um diretório ou arquivo e assume que é o padrão para um arquivo.