Windows еквівалент підстановки підказки ls * (зірочка)?


14

Ще одне питання давнього користувача 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 \ Налагодження
    Ім'я файлу, ім'я каталогу або синтаксис мітки тома неправильно.

    > реж * \ * \ *
    Ім'я файлу, ім'я каталогу або синтаксис мітки тома неправильно.

Чи є щось тонке, що я не розумію щодо команди dir, чи це просто обмежено?

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


Хоча приємно знати про всі інструменти, подібні Unix, які я можу додати до Windows (і повірте, я використовую Cygwin вдома!), Я не завжди матиму їх у будь-якому місці, де б я не хотів (і справді, можливо, не маю права адміністратора на встановити їх на кожен ПК, який я використовую).
Псалом Огр33,

Відповіді:


13

Щось подібне повинно робити те, що ви хочете. У кореневому каталозі типу проекту:


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

Dir аргументи: / s - рекурсивний, / b - "голий", без додаткової інформації
аргументи findstr: / i - ігнорувати випадок

Загалом, команда довідки покаже довідку для команд оболонки. Якщо це не працює, тоді
" команда /?" як правило, покажуть допомогу.


Відмінно! Я розумію, що існує багато інструментів / інструментаріїв, які допомагають мені "linuxize" мою Windows, але я шукав спосіб Windows зробити те, що я намагаюся зробити, і саме це!
Огрійський псалом33

7

Windows не робить макіяжів, як це робить Linux. Лише частина файлу може містити символи.

Ви можете завантажити версію ls, яка працює в Windows, і використовувати її. Я використовував Cygwin , але впевнений, що є й інші.


Також PowerShell
Joel Coehoorn

3
Ще одна річ, яку потрібно пам’ятати: у Windows символи марок розгортаються командою, а не оболонкою.
Лоранс Гонсальвс

2

unxutils має команду ls. Однак проблема справді в оболонці Windows. У unix ваша оболонка буде розширюватися */bin/Debugу відповідні імена шляхів і подавати їх команді ls як окремі аргументи командного рядка.

Cygwin, безумовно, зробив би трюк для вас, або ви можете спробувати порт порту оболонки Unix, наприклад, bash . Якщо ви хочете пройти сценарій сценарію, ви можете легко зашифрувати щось у python, використовуючи глобальний модуль , і більшість інших мов скриптів мають еквівалент.


2

Ви можете зробити щось на кшталт "dir / s * .obj * lib". У кінцевому підсумку він дасть підсумок, скільки файлів збігаються.


Закрити. Я дав вам реквізит, але відповідь Джеймса ближче, оскільки він фільтрує файли, які не знаходяться під \ налагодженням для мене.
Огрійський псалом33

2
@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

Не приємно, але треба працювати. Ви також можете помістити у .cmd файл (потім замініть кожен% на подвійний %%). Або визначте макрос за допомогою doskey (так, він все ще існує).

Переконайтеся, що розширення cmd увімкнено.

EDIT: Як це працює:

Перший для циклу повторюється через всі підкаталоги (/ D та / r перемикач) ітеративно. % ~ fP розгортається до повного шляху цього каталогу. Потім він додає \ bin \ Налагодження * до цього шляху. Другий цикл перераховує всі файли, які відповідають. % ~ ftzaQ розширюється на кожен збіг файлів і друкується на екрані за допомогою відлуння. Дивний% ~ ftzaQ формує це як вихід dir. Символ @ дозволяє уникнути друку самих команд на екрані.

Детальніше див


Я спробував це і справді це працює. Але, будучи дещо недосвідченим у програмі cmd, я ще не все це розумію :-).
Псалом Огр33,

0

У світі Windows cmd.exe не розширює підстановку - вони передаються як програми програмі в її командному рядку або масиві argv. Тому кожна програма розбирає і розширює їх по-різному, а деякі більш досконалі використання (як ви шукаєте), як правило, не підтримуються.

Пропозиція timgilbert щодо використання Cygwin є хорошою, також пакет GNUWin32 може мати щось, що допоможе вам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.