Finalmente .. aqui está a solução .. Obrigado pela ajuda galera:)
SET mydir=C:\mydir
IF EXIST "%mydir%\%~n1\" (
ROBOCOPY %1 "%mydir%\%~n1" /E /IS /MOVE
) ELSE (
MOVE /Y %1 "%mydir%\"
)
O comando MOVE não funciona quando ovewrite um diretório. Eu também tentei executar cmd com direitos de administrador.
Estou postando esta pergunta com mais informações para que você possa testar facilmente.
Faça sua própria pasta em algum lugar e abra a janela de comando nesse local. Copie e cole este bloco na janela cmd para criar a estrutura de teste
MD aaa\test\a MD aaa\test\b MD bbb\test\b MD bbb\test\c MD ccc\test\a MD ccc\test\c ECHO hello > aaa\test\a\a.txt ECHO hello > aaa\test\b\b.txt ECHO hello > bbb\test\b\b.txt ECHO hello > bbb\test\c\c.txt ECHO hello > ccc\test\a\a.txt ECHO hello > ccc\test\c\c.txt
Agora eu quero mover e mesclar todas as pastas "test" em ". \ test"
O comando MOVE está bom, mas no win 7 ele falha (Access Denied) quando sobrescrevendo "pastas" existentes. Se você tentar seguir o bloco um por um, o primeiro será ok, mas o próximo falhará.
move /Y aaa\test .\ move /Y bbb\test .\ move /Y ccc\test .\
No entanto, encontrei outras soluções que fazem o mesmo.
XCOPY aaa\test test\ /E/Y XCOPY bbb\test test\ /E/Y XCOPY ccc\test test\ /E/Y RD aaa\test /Q/S RD bbb\test /Q/S RD ccc\test /Q/S
XCOPY e depois remover o diretório
ROBOCOPY aaa\test test\ /E /IS /MOVE
ROBOCOPY com a opção / Mover
COPY command is totally useless in this case...
Eu realmente preciso do comando MOVE para obter um arquivo de lote com este contett para o trabalho que funcionou no XP.
move /y "%1" c:\mydir\
Eu tentei robocopy, mas depois ele irá mover apenas o conteúdo da pasta. não a pasta completamente.
robocopy "%1" c:\mydir /E /IS /MOVE
Se você quiser me ajudar, então você pode fazer isso de duas maneiras.
1) Encontre uma solução para fazer com que o MOVE funcione como no XP
2) Encontre uma maneira de fazer o mesmo que move / y "% 1" c: \ mydir \ faz
Uma sugestão poderia ser pegar o nome da pasta do caminho e fazer algo assim
// %1 = "c:\anotherdir\cool" if %1 is path_to_a_folder then ( get %foldername of %1 robocopy "%1" c:\mydir\%foldername /E /IS /MOVE ) else move /y "%1" c:\mydir\
EDITAR:
Ei, isso funciona bem para diretórios, o que mais eu posso fazer para que o script também possa trabalhar com arquivos?
robocopy %1 "C:\Users\azizkar\Desktop\ebben\%~n1" /E /IS /MOVE
XXCopy seria minha recomendação.
A versatile file copy utilitiy.