Windows Batch - Mover arquivos para o pai da pasta e remover subpastas vazias

2

Encontrei várias perguntas desse tipo e tentei adaptar as respostas às minhas necessidades, mas sem sorte até o momento. Estou tentando criar duas entradas de menu de contexto no Windows 7 que:

  1. Mova todos os arquivos das subpastas de uma determinada pasta para a pasta pai. As duplicatas devem ser renomeadas para Filename-Duplicate , mas não excluídas.
  2. Excluir todas as subpastas vazias.

Consegui criar com sucesso as entradas necessárias em:

HKEY_CLASSES_ROOT\Directory\shell\Delete Empty Subfolders\command

e

HKEY_CLASSES_ROOT\Directory\shell\Move all subfiles here\command

Os comandos (e acho que aqui está o problema) são os seguintes:

for /r ROOT %%d in (*.*) do move "%%d" "%1\"
for /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"

Quando eu seleciono uma pasta que eu criei para testar isso e selecione qualquer um no menu de contexto, parece que o arquivo de lote no disco para o qual a entrada do Registro aponta é encontrado e executado, mas sem resultado.

Eu acho que o problema são os próprios comandos. Eu não tenho muita experiência com FOR . Se isso puder ser feito com o PowerShell, estou aberto a essa opção. Se possível, evitaria usar dependências externas, como aplicativos de terceiros, para executar os comandos.

    
por TMRW 21.08.2014 / 12:52

1 resposta

0

O problema não está no seu comando. Em vez disso, ele está relacionado ao Registro, porque quando você o faz, o Windows começa a procurar por um programa chamado for.exe

HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\for.exe
HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\for.exe

e, em seguida, ele começa a procurar pelo seu programa for.* no System32 e nos diretórios do Windows. Quando isso falha, retorna um erro.

Como um começo, tente criar um arquivo .bat e colocar seus comandos nele. No Registro, tente se referir ao caminho completo do seu arquivo de lote.

P.S: Você terá outro problema com nomes extensos de arquivos.

    
por 21.08.2014 / 13:15