4

Я создал командный файл для выполнения через контекстное меню в 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\""

3 ответа3

2

Пакет может быть таким же простым, как этот вкладыш:

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

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

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

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

Вы неправильно написали команду 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 *.* ..\
-1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .