Еще в 1990-х я использовал « *.*
» для обозначения любого имени файла в MS-DOS, но я видел больше сценариев, использующих только « *
» в эти дни. Имеет ли это какое-то значение, какой я использую?
command-line
Foebane
источник
источник
*
и*.*
теперь они эквивалентны дляcmd
внутренних команд и современных утилит командной строки, некоторые старые утилиты, которые принимают параметры маски файла, могут использовать более старые функции сопоставления файлов, и для них маски не будут эквивалентны.*.*
Маркер не должен возвращать extensionless файлов.*.*
не следует возвращать файлы без расширений. К сожалению, это так. Смотрите ответ Гравити.Ответы:
Имя и расширение файла были единым полем с тех пор, как в Windows 95 и NT 3.5 была введена поддержка «длинных имен файлов», и сопоставления с подстановочными знаками выполняются сразу для всего имени файла. В результате вы можете иметь имя файла без точек (возможно, редко для файлов, но очень часто встречающееся для папок / каталогов), и на первый взгляд
*.*
фактически не будет совпадать с такими файлами.Использование старых скриптов
*.*
все равно будет работать из-за кода совместимости - если подстановочный знак заканчивается.*
, эта часть игнорируется ОС. (Так что, если вы хотите специально сопоставить файлы с расширением, думаю, вам это понадобится*.?*
.)Но это не то, на что вы должны положиться; если вы пишете сценарии для современных версий Windows, следуйте их соглашениям, а не соглашениям MS-DOS. (Обратите внимание, что в Windows NT сценарии .bat больше не интерпретируются MS-DOS
cmd.exe
, а встроенной программой Win32.)В Linux и различных других Unixen, имя и расширение никогда не были разделены в первую очередь, и нет никакой особой магии, чтобы сделать
*.*
работу, так*
что это единственный выбор, который имеет смысл.источник
*
будет соответствовать только именам файлов без расширения. «Безопасный» способ быть совместимым с обоими - использовать**
.*
( по умолчанию ) не совпадает со скрытыми именами файлов (начиная с a.
).Это, вероятно , стоит упомянуть о том , что unixy / posixy оболочка , таких как оболочки Борна, Баш, KSH, Zsh, и т.д. сделать подстановочное расширение (из GLOB символов нравятся
*
,?
,[range]
,[!range]
и другие расширения , как скобки и расширенные комки) составить список аргументов , прежде чем команда выполнен. Таким образом, это расширение выполняется оболочкой, а не командой, аргументами которой они могут быть.т.е. за что отвечает оболочка
*
,*.*
расширяется доЭто не относится к CMD (и аналогично для утилит powershell ), так как он дословно передает символы глобуса в исполняемую команду - и поэтому расширение является обязанностью команды / утилиты, а не оболочки. Таким образом, в конечном счете, то, что
*.*
или что*
означает, остается за утилитой, оставляя ее для соответствия (или нет) соглашениям - вот почему утилиты CMD, например,dir *.*
также сопоставляют (возможно, неправильно, но сохраняют ожидания) файлы без расширений.Я считаю, что это можно обобщить таким образом.
источник
FindFirstFile
сам по себе является пользовательским режимом (и kernel32.dll, и ntdll.dll являются библиотеками пользовательского режима - это часть подсистемы Win32, а не ядра), но на самом деле он мало что делает.mmv "fred.*" "tom.#1"
. (#1
Вместо замены используется*
, что позволяет переупорядочивать поля).mmv
не устанавливается по умолчанию в большинстве систем, но часто используются другие инструменты пакетного переименования. См. Эту статью об этом , и stackoverflow.com/questions/417916/how-to-do-a-mass-rename .