
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, PULLTEST
mas 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 /-Y
opção.
@move /-y "%~1\*" "%~1\.."
Responder2
Você escreveu pushd
o comando errado, você tem dois arquivos h
.
E você tem que remover %1
do move
comando. Se o diretório tiver espaços, move
o 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. pushd
funciona com espaços, mas move
não funciona. Tente colocar seu segundo argumento, ..\
entre aspas:
PUSHD %1
MOVE "%1*.*" "..\"