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

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

Criei um arquivo em lote para ser executado através do menu do botão direito do mouse no Win7. Quando clico com o botão direito em uma pasta, gostaria que o arquivo em lote movesse todos os arquivos (excluindo pastas) para 1 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 contém espaços, recebo uma mensagem de erro:"A sintaxe do comando está incorreta."

Portanto, meu lote funciona em uma pasta intitulada, PULLTESTmas não em uma pasta intitulada PULL TEST.

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


Abaixo está o arquivo de registro que criei, 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\""

Responder1

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

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

O til remove quaisquer aspas que já possam estar presentes no valor do argumento. O conjunto extra de citações foi a origem do seu problema.

EDITAR- Você não diz o que deseja que aconteça se já existir um arquivo com o mesmo nome no diretório pai. Como o comando MOVE está em um arquivo em lote, o padrão é substituir automaticamente o arquivo na pasta pai. Se quiser que o script solicite instruções, dando-lhe a oportunidade de evitar a substituição, então você precisa da /-Yopção.

@move /-y "%~1\*" "%~1\.."

Responder2

Você escreveu pushdo comando errado, você tem dois arquivos h.

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

Suponha que seu lote seja nomeado MoveFiles.bat. É chamado assim:

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

Após a substituição dos parâmetros dentro do lote, fica assim:

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

O segundo comando apresenta erro de sintaxe devido a aspas aninhadas.


Esta versão do lote funciona para mim:

PUSHD %1
MOVE *.* ..\

Responder3

A razão pela qual está gerando esse erro é por causa dos espaços. pushdfunciona com espaços, mas movenão funciona. Tente colocar seu segundo argumento, ..\entre aspas:

PUSHD %1
MOVE "%1*.*" "..\"

informação relacionada