Use o DOS para mover todos os arquivos para cima 1 diretório

4

Eu criei um arquivo de lote para ser executado através do menu do botão direito do mouse no Win7. Quando clico com o botão direito do mouse em uma pasta, gostaria que o arquivo de lote movesse todos os arquivos (exceto as pastas) para cima de um diretório. Eu tenho isso até agora:

PUSHHD %1
MOVE "%1\*.*"  ..\

Isso parece funcionar desde que a pasta da qual estou movendo os arquivos não tenha espaços. Quando a pasta tem espaços, recebo uma mensagem de erro: "A sintaxe do comando está incorreta."

Meu lote funciona em uma pasta chamada PULLTEST , mas não em uma pasta chamada PULL TEST .

Novamente, não preciso mover pastas, apenas arquivos. E eu gostaria que funcionasse em qualquer diretório em qualquer unidade. Não haverá diretórios específicos que eu trabalharei. Será aleatório.

Abaixo está o arquivo de registro que eu fiz se necessário para referência.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\PullFiles]
@="PullFilesUP"

[HKEY_CLASSES_ROOT\Directory\shell\PullFiles\command]
@="\"C:\Program Files\MyBatchs\PullFiles.bat\" \"%1\""
    
por Harminoff 17.08.2014 / 20:56

3 respostas

2

O lote pode ser tão simples quanto este forro:

@move "%~1\*" "%~1\.."

O til remove quaisquer citações de inclusão que possam estar presentes no valor do argumento. O conjunto extra de citações foi a fonte do seu problema.

EDIT - Você não diz o que você quer que aconteça se um arquivo com o mesmo nome já existir no diretório pai. Como o comando MOVE está em um arquivo em lotes, o padrão é sobrescrever automaticamente o arquivo na pasta pai. Se você quiser que o script solicite instruções, dando a você a oportunidade de evitar a sobregravação, então você precisa da opção /-Y .

@move /-y "%~1\*" "%~1\.."
    
por 18.08.2014 / 18:28
1

Você digitou o comando pushd errado, você tem dois h .

E você tem que remover o comando %1 from move . Se o diretório tiver espaços, o comando move será quebrado.

Suponha que seu lote tenha o nome MoveFiles.bat . É assim chamado:

MoveFiles.bat "C:\Test\With Spaces"

Após a substituição do parâmetro dentro do lote, parece desta forma:

PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\

O segundo comando tem erro de sintaxe devido a citações aninhadas.

Esta versão do lote funciona para mim:

PUSHD %1
MOVE *.* ..\
    
por 18.08.2014 / 08:21
-1

O motivo pelo qual esse erro está sendo causado é por causa dos espaços. pushd funciona com espaços, mas move não. Tente incluir seu segundo argumento, ..\ , com aspas:

PUSHD %1
MOVE "%1*.*" "..\"
    
por 17.08.2014 / 23:24