renomeia (ou move) pastas, subpastas e arquivos em caminho específico

1

Eu tenho uma função (.bat) para procurar e renomear (ou mover) qualquer pasta com uma pasta de nome específica (chamada "dados"), com todo o seu conteúdo intacto, em um caminho específico (caminho: \ É o específico rota como c: \ ou h:)

Eu preciso simplificar e fazer funcionar.

call:test "TEST1"
call:test "TEST2"

:: funcion test
@echo off
pause
goto:eof
:test
 set test=%1
 CD /D path:\
 if exist "%test%" (goto make) else (goto end)
 :make
 MOVE /Y "%test%" data
 FOR /F %%x IN ("%test%") DO REN "%%x" data
 FOR /F "tokens=*" %%G IN ('DIR /B /AD /S "%test%"') DO MOVE /Y "%%G" data
 :end
 echo OK
 goto:eof

As pastas TEST1 e TEST2 contêm muitos arquivos e subpastas. O problema é que eu uso três comandos para fazer este trabalho e não 100% funciona.

 MOVE /Y "%test%" data
 FOR /F %%x IN ("%test%") DO REN "%%x" data
 FOR /F "tokens=*" %%G IN ('DIR /B /AD /S "%test%"') DO MOVE /Y "%%G"

Eu preciso renomear as pastas TEST1 e TEST2, onde quer que elas estejam dentro do caminho (podem estar na raiz ou em subpastas. Ambas devem ser renomeadas (mescladas) como "data").

Exemplo: as pastas TEST1 e TEST2 possuem conteúdo (arquivos e subpastas). O ".bat" pesquisa no caminho para localizar TEST1 e quando ele for renomeado TEST1 com "dados". Continue procurando e encontre o TEST2 e renomeie como "data" sem perguntar .

Mas, no caso de ambas as pastas (TEST1 e TEST2) estarem no mesmo local, ambas devem ser mescladas (uma substitui a outra). O importante é fazê-lo sem pedir .

Mas "MOVE / Y" não sobrescreve pastas (somente arquivos) . Eu acho que a solução poderia ser que, em vez de sobrescrever, renomeie o arquivo ou a pasta duplicada para evitar esse comando de falha

Nota: Anteriormente eu usava o Robocopy com a opção "mover" ...

SET MoveDirSource=path:\"%test%"
SET MoveDirDestination=path:\data
MKDIR "%MoveDirDestination%"
FOR %%i IN ("%MoveDirSource%\*") DO MOVE /Y "%%i" "%MoveDirDestination%\%%~nxi"
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E /W:5 "%%i" "%MoveDirDestination%\%%~nxi"

Mas não é viável, porque o robocopy, primeiro, copia da origem para o destino e depois é removido na origem. E se as pastas TEST1 ou TEST2 tiverem 2 ou 6 GB de informações, esse processo pode levar horas.

Muito obrigado

    
por BrianC 07.10.2016 / 23:02

1 resposta

2

eu usaria

ROBOCOPY "%Test%" Data /MOVE /E

O Robocopy é instalado por padrão no Windows e faz tudo o que você deseja em um único passo.

    
por 07.10.2016 / 23:51