CMD: Проверить котировки

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

copy "%1" "C:\path\to\it"

Проблема здесь в кавычках около%1. Когда вы перетаскиваете что-то в пакетном файле, обычно кавычки не ставятся, так что все в порядке. Но когда я конвертирую свой командный файл в EXE, он фактически помещает туда кавычки.

Итак, что я хочу сделать, это проверить, есть ли в файле кавычки, если нет, то выполнить команду выше, в противном случае выполнить команду без кавычек.

Спасибо.


person Deniz Zoeteman    schedule 02.01.2010    source источник


Ответы (3)


Будет ли работать следующее?

copy %1 "C:\Dir1\Dir2"

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

person shroudednight    schedule 02.01.2010
comment
+1. Фактически, имена файлов с пробелами всегда передаются в кавычках, и эти кавычки являются частью аргумента. Ставить кавычки вокруг %1 обычно излишне. Это не обязательно должно быть связано с конвертером из пакета в exe. - person Joey; 02.01.2010

Не уверен, что приведенный здесь ответ был тем, что вы искали, и, возможно, я опоздаю на пару лет, но я хотел бы предложить альтернативное решение вашей проблемы с цитированием, поскольку я сам столкнулся с чем-то похожим. Может быть, кому-то это принесет пользу.

Вы МОЖЕТЕ удалить кавычки вокруг переменных, включая те, которые перетаскиваются. Вот как:

  • добавить тильду к переменной %n (например, copy %~1 "C:\path\to\it")

Для других переменных в пакетном файле используйте аналогичную технику, на этот раз выполняя замену двойных кавычек на пустые :"=, как в:

set filename="C:\path\to\it"
echo %filename% (will give you "C:\path\to\it") 
set noquotefilename=%filename:"=%
echo %noquotefilename% (will give you C:\path\to\it without the quotes)

Это не мое оригинальное решение, но я нашел его в конце следующего сообщения:

Удаление двойных кавычек из переменных в командный файл создает проблемы со средой CMD

Техника подстановки имеет и другие применения, так как вы можете легко заменить любой символ на любой другой (например,: \ = _, чтобы заменить знак подчеркивания обратной косой чертой).

Надеюсь это поможет!

person Dereck R. Prince    schedule 31.05.2012

Проблема заключается в процессе преобразования в EXE. Попробуйте другой конвертер BAT в EXE.

person Wongamatic    schedule 02.01.2010
comment
я могу просто проверить цитаты? - person Deniz Zoeteman; 02.01.2010