Como mover todos os arquivos .txt na estrutura de diretório para outro diretório via linha de comando?

2

Eu tenho uma estrutura de diretórios bastante extensa:

c:\foo
  \foo
  \foo\doc1
  \foo\doc2
  \foo
  \foo\doc1
  \foo\doc2
  ...
  \foo\docX

Eu quero mover (não apenas copiar) todos os arquivos com extensão .txt para outro diretório c:\textfiles .

Eu gostaria de fazer isso via linha de comando (o normal, não o Powershell), possivelmente em um arquivo de lote.

Eu tentei o comando move , mas parece funcionar apenas em arquivos no diretório atual. Eu também tentei xcopy , mas ele não exclui arquivos na origem após a conclusão da cópia.

    
por AngryHacker 24.11.2017 / 06:45

2 respostas

2

De: Como mover todos os arquivos com extensão específica de todos os subdiretórios para seus pais usando o CMD?

This command will copy recursively al pdf files from source to target directory using cmd in windows 7 - tested and works

for /r "c:\source_directory\" %%x in (*.pdf) do move "%%x" "c:\target_directory\"

Veja também:

windows - Move todos os arquivos de várias subpastas para a pasta pai - Superusuário

Copie vários arquivos de subpastas para uma única pasta - Microsoft Community

    
por 24.11.2017 / 06:58
1

rsync

rsync é uma ferramenta disponível para janelas também , normalmente usada para sincronizar o diretório ... mas funciona bem no diretório local também ... como indicado em sua própria descrição

a fast, versatile, remote (and local) file-copying tool

A partir desta resposta em unix.stackexchange ...

rsync -a --prune-empty-dirs --include '*/' --include '*.txt' --exclude '*' source/ target/

Note que existe uma opção para excluir os arquivos da origem que você pode incluir na linha de comando, acho que o que você procura é --remove-source-files , mas verifique cuidadosamente . Outra opção que você pode achar útil é -n

    -n, --dry-run               perform a trial run with no changes made
    --remove-source-files       sender removes synchronized files (non-dir)

encontrar

find é outra ferramenta que você pode encontrar no seu bash shell no windows, assim como um executável compilado (gnu findutils ) ... A linha a seguir funciona no Linux, mas você pode modificar a instrução cp para estar em conformidade com as especificações do seu sistema. De outra resposta ...

 find . -name '*.txt' -exec cp --parents \{\} /target \; 

Equivalente ao Windows de find

De outro quesiton / answer para o seu script em lote, você pode use estas dicas ...

 dir <drive: [drive:]> /s | findstr /i <pattern>

... claro que se eles sentiram a necessidade de fazer um poder shell é razoável esperar que em esse ambiente deva haver uma maneira mais simples de fazer isso ...

mas talvez o seguinte seja um ponto de partida simples suficiente para o seu script:

dir c:\foo /s *.txt
    
por 24.11.2017 / 10:02