Используйте пакетную команду DOS для перемещения всех файлов на 1 каталог вверх

Используйте пакетную команду DOS для перемещения всех файлов на 1 каталог вверх

Я создал пакетный файл, который будет запускаться через контекстное меню в Win7. Когда я нажимаю правой кнопкой мыши на папке, я хочу, чтобы пакетный файл перемещал все файлы (исключая папки) на 1 каталог вверх. У меня пока есть это:

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

Кажется, это работает, пока в папке, из которой я перемещаю файлы, нет пробелов. Когда в папке есть пробелы, я получаю сообщение об ошибке:«Синтаксис команды неверен».

Итак, мой пакет работает с папкой под названием , PULLTESTно не с папкой под названием PULL TEST.

Опять же, мне не нужно перемещать папки, только файлы. И я хотел бы, чтобы это работало в любом каталоге на любом диске. Не будет никаких определенных каталогов, в которых я буду работать. Это будет случайным образом.


Ниже приведен файл реестра, который я создал, если он вам нужен для справки.

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\""

решение1

Партия может быть такой же простой, как эта однострочная:

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

Тильда удаляет любые кавычки, которые уже могут присутствовать в значении аргумента. Дополнительный набор кавычек был источником вашей проблемы.

РЕДАКТИРОВАТЬ- Вы не говорите, что хотите, чтобы произошло, если файл с таким же именем уже существует в родительском каталоге. Поскольку команда MOVE находится в пакетном файле, по умолчанию автоматически перезаписывается файл в родительской папке. Если вы хотите, чтобы скрипт запрашивал инструкции, давая вам возможность предотвратить перезапись, то вам нужна эта /-Yопция.

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

решение2

Вы pushdнеправильно написали слово «команда», у вас их два h.

И вам нужно удалить %1из moveкоманды. Если в каталоге есть пробелы, moveкоманда становится сломанной.

Предположим, что ваша партия называется MoveFiles.bat. Она называется так:

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

После подстановки параметров внутри пакета это выглядит так:

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

Во второй команде обнаружена синтаксическая ошибка из-за вложенных кавычек.


Эта версия пакета работает у меня:

PUSHD %1
MOVE *.* ..\

решение3

Причина, по которой он выдает эту ошибку, — пробелы. pushdработает с пробелами, но moveне работает. Попробуйте заключить второй аргумент, ..\, в кавычки:

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

Связанный контент