1

Есть ли простой способ, чтобы окно windows cmd соответствовало всем файлам, соответствующим шаблону, рекурсивно, как в

rm **/*.tmp

Смотрите этот пост, чтобы узнать, как он работает в Unix.

(Я не уверен, что все оболочки Unix хорошо реагируют на это, но, по крайней мере, это делают bash и zsh)

3 ответа3

2

Я думаю, что ближайший эквивалент это del /S {pattern}

C:\Users\RGB> dir /S/B t
C:\Users\RGB\t\f1.foo
C:\Users\RGB\t\f1.txt
C:\Users\RGB\t\f2.txt
C:\Users\RGB\t\t2
C:\Users\RGB\t\t2\f3.txt
C:\Users\RGB\t\t2\f4.foo

C:\Users\RGB> del /S t\*.foo
Deleted file - C:\Users\RGB\t\f1.foo
Deleted file - C:\Users\RGB\t\t2\f4.foo

C:\Users\RGB> dir /S/B t
C:\Users\RGB\t\f1.txt
C:\Users\RGB\t\f2.txt
C:\Users\RGB\t\t2
C:\Users\RGB\t\t2\f3.txt
2

Вы можете использовать FOR /R для циклического просмотра файлов / папок. Узнайте больше о том, что вы можете сделать с командой здесь

Например, для вашего примера это будет что-то вроде:

For /R C:\ %G IN (*.tmp) do del "%G"

Если вы хотите использовать это в пакетном файле, используйте %%G вместо %G

2

Ответ: нет, нет способа сделать это.

Ваш вопрос, кажется, о том, как просто использовать **, что может быть полезно в различных обстоятельствах.

Это просто не поддерживается в командной строке, подобной DOS (CMD.EXE).

Ключевым моментом для понимания является то, что интерпретатор командной строки (COMMAND.COM в традиционной DOS) на самом деле не поддерживает подстановочные знаки, равно как и программа CMD, встроенная в Windows NT, 2K, XP и последующие версии Microsoft Windows.

DOS поддерживает групповые символы со многими своими командами, такими как XCOPY, и даже включает некоторые команды, такие как DIR, которые были встроены в оболочку командной строки DOS. (В зависимости от версии, рекурсивное удаление может быть доступно с помощью внешней команды DELTREE или внутренней команды, такой как DEL или RMDIR.) Тем не менее, каждая отдельная команда предоставила свою поддержку для понимания подстановочных знаков. Фактический интерпретатор командной строки просто передавал групповые символы командам. Итак, если у вас есть какая-то команда, которая не поддерживает символы подстановки (например, EDIT в DOS или NOTEPAD в Microsoft Windows), то командная оболочка не позаботится об этом за вас.

Напротив, в Unix оболочка интерпретирует подстановочные знаки. Отдельные программы обычно не поддерживают подстановочные знаки. Единственное исключение, которое я могу легко вспомнить, это команда "найти". Чтобы позволить команде "найти" получить подстановочный знак, вам может потребоваться ее избежать. Экранирующие символы также могут быть полезны, когда вы хотите передать определенные символы в программу, которая поддерживает "регулярные выражения". Такое экранирование обычно не требуется в DOS, потому что в DOS параметр командной строки не склонен смешиваться с символами, которые вы ему даете. (Опять же, Windows наследует поведение DOS, которое является результатом более ранних версий Windows, которые довольно трудно были в основном совместимы с DOS.)

Примечание: я не согласен с превосходным ответом Pungk, который дает практический обходной путь для многих обстоятельств. Если вы хотите сделать что-то рекурсивно, это может быть вариант. Я просто говорю, что вам может потребоваться сделать что-то подобное, вместо того, чтобы просто использовать подстановочные знаки, потому что подстановочные знаки не интерпретируются анализатором командной строки.

Другим вариантом может быть использование опций в программе, например , ответ RedGrittyBrick, который указывает, как рекурсивно удалять файлы в современных версиях Windows (что кажется подходящим для вашего примера рекурсивного удаления файлов в Unix). Часто это самый простой способ сделать что-то. Однако ваша способность делать это будет зависеть от того, какую программу вы используете. В Unix -R может быть наиболее распространенным для рекурсии, а -r является вторым по распространенности. В DOS/Windows наиболее часто встречается /s. Однако есть и исключения.

Другой вариант, конечно, может заключаться в использовании оболочки Unix в Windows. (Это особенно актуально для выпуска Windows 10, в котором есть встроенная опция для установки функции подсистемы Linux, предоставляющей версию bash.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .