Como posso nivelar uma pasta no Windows 7, assumindo que todos os nomes de arquivos são diferentes?

Como posso nivelar uma pasta no Windows 7, assumindo que todos os nomes de arquivos são diferentes?

Por exemplo, digamos que eu tenha a seguinte hierarquia de pastas:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Quero executar algum comando que resulte em:

Folder1
   File1
   File2
   File3
   File4

ou algo semelhante. Não estou muito familiarizado com o Windows, então gostaria de receber o máximo de detalhes possível na resposta.

Responder1

A maneira mais fácil é entrar na pasta raiz comum e fazer uma busca por todos os arquivos (ou seja, procurar por *). Quando todos os arquivos forem encontrados, marque todos os arquivos, pressione Ctrl + X e navegue novamente até a pasta raiz comum. Agora pressione Ctrl + V para colar todos os arquivos na pasta raiz. Quando terminar, exclua todos os subdiretórios.

Não sei se isso pode ser feito como um trabalho em lote.

Responder2

Usei essa abordagem do PowerShell no final, quando precisei nivelar uma grande estrutura hierárquica (no meu caso, pngs):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\

Responder3

exe do Windows: http://en.sourceforge.jp/projects/sfnet_flatfolder/

ou AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

ou usarDiretório Opus

ouPowershell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

ouLote(como acima mencionado)

ou a busca manual, recortar e colar conforme mencionado acima

Há muitas maneiras, dependendo de suas habilidades e inclinações, você pode escolher qualquer uma delas e refinar de acordo com suas necessidades.

Você pode precisar dissoRemover diretórios vaziosapós a operação acima

Responder4

Muito simples, com uma opção de linha de comando para aqueles que não têm muita inclinação técnica.

  1. Crie um arquivo em algum lugar chamado "flatten.cmd"
  2. Abra esse arquivo no Bloco de Notas
  3. No arquivo coloque o seguinte:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Substitua "{SourcePath}" pela pasta que você deseja nivelar. No seu caso "c:\Folder1"

  5. Substitua "{Destino"} pela pasta para a qual deseja mover os arquivos. No seu caso também "c:\Folder1". O código agora deve ficar assim:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Abra uma janela de linha de comando. Pode fazer isso de várias maneiras, mas é rápido:

    • Clique no botão Iniciar
    • Clique em Todos os Programas
    • Clique em Acessórios
    • Clique em Prompt de Comando
  7. Na janela da linha de comando, digite:

    cd {folder where you put the flatten.cmd file}
    flatten
    

E isso vai bastar (Windows 8+). Acabei de fazer isso para compactar uma pasta de 10.000 arquivos de música. Funciona como um encanto.

Você pode encontrar as opções para o utilitário de linha de comando FOR emhttps://technet.microsoft.com/en-us/library/bb490909.aspx.

informação relacionada