Как объединить подстановочные знаки и пробелы (кавычки) в команде Windows?

4995
Jan Fabry

Я хочу удалить каталоги следующего формата:

C:\Program Files\FogBugz\Plugins\cache\PluginName@example.com_NN 

NNэто число, поэтому я хочу использовать подстановочный знак (это часть шага после сборки в Visual Studio). Проблема заключается в том, что мне нужно объединить кавычки вокруг имени пути (для пробела в Program Files) с подстановочным знаком, чтобы соответствовать концу пути. Я уже выяснил, что rdэто команда удаления, которая принимает подстановочные знаки, но где я могу поставить кавычки? Я не пытался не окончание цитаты (работает dir), ...example.com*", ...example.com"*, ...example.com_??", ...cache\"PluginName@example.com*, ...cache"\PluginName@example.com*, но ни один из них не работает.

(Сколько команд для удаления файла / каталога есть в Windows в любом случае? И почему они все отличаются по возможностям?)

2
Я обычно использую `rm -rf` для этого. Существует несколько портов coreutils Unix для Windows: [UnxUtils] (http://sourceforge.net/projects/unxutils/), [пакет MSYS MinGW] (http://www.mingw.org/wiki/MSYS) , Cygwin (yecch), Micros ~ 1 собственный [Сервисы для Unix] (http://en.wikipedia.org/wiki/Services_for_unix) ... grawity 14 лет назад 0

2 ответа на вопрос

3
grawity

rmdir не поддерживает подстановочные знаки. Он принимает только полные имена файлов.

Вы можете попробовать эту альтернативу:

для / d% f в ("C: \ Program Files \ FogBugz \ Plugins \ cache \ PluginName@example.com_*") сделать rmdir / s / q "% ~ f" 

( /s/qАргументы rmdirделают то же самое, что и rm -rfв Unix. for /dАргумент forсопоставляет имена каталогов вместо имен файлов.)


Помните, что cmd.exeоболочка не выполняет подстановочные знаки (в отличие от Unix sh) - это обрабатывается самой командой.

Ваша альтернатива работает в `cmd.exe`, но не в качестве шага пост-сборки VS (` Команда завершилась с кодом 255`). И действительно, из (противоречивой) информации в Интернете я подумал, что `rd` поддерживает шаблоны, а` rmdir '- нет. Но, похоже, они синонимы? И действительно, я ожидал расширения оболочкой, а не отдельными командами. Jan Fabry 14 лет назад 0
@Jan: Это может быть потому, что `for` является встроенным` cmd.exe`. Вы можете попробовать поместить его в скрипт `.cmd` и запустить вместо этого. (Осторожно: `for` внутри пакетных сценариев требует` %% x` вместо `% x`.) И да,` rd` и `rmdir` - это одно и то же. grawity 14 лет назад 1
0
Darth Android

Вы можете покинуть пространство с ^персонажем: C:\Program^ Files\FogBugz\Plugins\cache\PluginName@example.com_*

Это не похоже на работу (хотя это должно быть: http://msdn.microsoft.com/en-us/library/kcc7tke7(VS.80).aspx). Я использую следующий код: `rmdir / s / q C: \ Program ^ Files \ FogBugz \ Plugins \ cache \ $ (TargetName) *` в VS или в `cmd.exe` (конечно, с заменой` TargetName`), и я получаю `Система не может найти указанный файл. / Система не может найти указанный путь в обоих местах. Jan Fabry 14 лет назад 0