Еще один вопрос от давнего пользователя Unix / Linux, который оказался в мире Windows. Сначала позвольте мне объяснить, что именно я пытаюсь сделать. Я использую оболочку Windows cmd.exe, и я хочу перечислить все каталоги ниже текущего каталога, которые содержат иерархию bin \ Debug, и определить, содержат ли они какие-либо файлы (например: пытаюсь выяснить, является ли моя цель очистки NAnt чистой работает правильно). Моя иерархия может выглядеть примерно так:
\Current
\DirA
\bin
\Debug
(some files under debug)
\Release
\DirB
\bin
\Debug
\DirC
\bin
\Release
В Unix, ls */bin/Debug
просто дал бы мне список всех вещей в DirA/bin/Debug
и показал бы факт, что DirB/bin/Debug
это пусто. Я пробовал разные искажения в оболочке cmd, но продолжаю заводиться с такими вещами, как:
> dir * \ bin \ Debug Неверный синтаксис имени файла, имени каталога или метки тома. > dir * \ * \ * Неверный синтаксис имени файла, имени каталога или метки тома.
Есть ли что-то тонкое, чего я не понимаю в команде dir, или она ограничена таким образом?
Да, я понимаю, что могу просто переключиться в проводник, перемещаться, щелкать правой кнопкой мыши и, возможно, в конечном итоге создать поиск, который делает то, что я хочу, но меня больше интересует решение командной строки quick-n-dirty.
источник
Ответы:
Нечто подобное должно делать то, что вы хотите. В корневом каталоге проекта введите:
Аргументы dir: / s - рекурсивный, / b - "голый", без дополнительной информации
Аргументы findstr: / i - игнорировать регистр
В общем, команда help покажет справку для команд оболочки. Если это не сработает, тогда
' command /?' как правило, покажет помощь.
источник
Windows не использует подстановочные знаки так, как Linux. Только часть имени файла может содержать символы подстановки.
Вы можете скачать версию ls для Windows и использовать ее. Я использовал Cygwin , но я уверен, что есть и другие.
источник
У unxutils есть команда ls. Однако проблема действительно в оболочке Windows. В Unix ваша оболочка расширится
*/bin/Debug
до соответствующих имён путей и передаст их команде ls в качестве отдельных аргументов командной строки.Cygwin, безусловно, справится с задачей, или вы можете попробовать порт windows в оболочке Unix, такой как bash . Если вы хотите пойти по пути написания сценариев, вы можете довольно легко кодировать что-то на python, используя модуль glob , и большинство других языков сценариев имеют аналог.
источник
Вы можете сделать что-то вроде "dir / s * .obj * lib". В конце будет дана сводка по количеству совпавших файлов.
источник
Не приятно, но должно работать. Вы также можете поместить в файл .cmd (затем заменить каждый% на double %%). Или определите макрос, используя doskey (да, он все еще существует).
Убедитесь, что расширения cmd включены.
РЕДАКТИРОВАТЬ: Как это работает:
Первый цикл for выполняет итерацию по всем подкаталогам (переключатели / D и / r). % ~ fP раскрывает полный путь к этому каталогу. Затем он добавляет \ bin \ Debug * к этому пути. Второй цикл for перечисляет все совпадающие файлы. % ~ ftzaQ расширяется до каждого совпадения файла и выводится на экран с помощью echo. Странный% ~ ftzaQ форматирует его как вывод dir. Символ @ позволяет избежать вывода команд на экран.
Для получения дополнительной информации см.
источник
В мире Windows cmd.exe не расширяет подстановочные знаки - они передаются программе как есть в ее командной строке или массиве argv. Поэтому каждая программа анализирует и расширяет их по-своему, и некоторые из более продвинутых вариантов использования (как вы ищете), как правило, не поддерживаются.
Предложение Тимгилберта об использовании Cygwin является хорошим, также в пакете GNUWin32 может быть что-то, что поможет вам.
источник