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