Команда Dir не работает так, как я хочу - PullRequest
0 голосов
/ 10 сентября 2018

Я должен написать командный файл, который будет искать файлы, начинающиеся с буквы a и заканчивающиеся расширением .dll.

Вот что я придумал:

@echo off
dir /b *.dll C:\windows\system32\ > dll.txt
dir /b a* C:\windows\system32\ > a.txt

Мой скрипт не работает так, как я хочу, потому что в нем перечислены все файлы из каталога system32.

Может кто-нибудь помочь мне исправить это так, как должно быть?

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

dir /b *.dll C:\windows\system32\ перечисляет все файлы, которые соответствуют *.dll, затем все файлы, которые соответствуют C:\windows\system32\, то есть все файлы в этой папке. Правильный синтаксис для того, что вы хотите сделать:

dir /b "C:\windows\system32\*.dll"

То же самое с другой строкой:

dir /b "C:\windows\system32\a*"
0 голосов
/ 11 сентября 2018

Команда DIR поддерживает несколько аргументов для списков каталогов.

dir /b *.dll C:\windows\system32\ > dll.txt

Эта командная строка приводит к записи в файл dll.txt

  1. все не скрытые имена файлов и папок, совпадающие в текущем каталоге шаблон подстановочного знака *.dll и
  2. все не скрытые имена файлов и папок, совпадающие в каталоге C:\windows\system32\ шаблон подстановочного знака по умолчанию *.

Следующая командная строка:

dir /b a* C:\windows\system32\ > a.txt

Эта командная строка приводит к записи в файл a.txt

  1. все не скрытые имена файлов и папок, совпадающие в текущем каталоге шаблон подстановки a* и
  2. все не скрытые имена файлов и папок, совпадающие в каталоге C:\windows\system32\ шаблон подстановки по умолчанию *.

Но, скорее всего, требуется запись dll.txt всех * .dll файлов в каталоге C:\windows\system32\ и a.txt всех a* файлов в каталоге C:\windows\system32\ с обоими значениями времени, включая сопоставление файлов со скрытым набором атрибутов. По этой причине следующие командные строки:

dir %SystemRoot%\System32\*.dll /A-D /B >dll.txt
dir %SystemRoot%\System32\a* /A-D /B >a.txt

Опция /A-D отключает список совпадений каталогов (атрибут, а не каталог), а также случайные шаблоны и включение списка скрытых файлов.

Для получения справки по команде DIR запустить в окне командной строки dir /?.

Кстати: Перенаправитель файловой системы Windows следует учитывать. Две командные строки выводят в текстовые файлы файлы *.dll и a* в каталоге %SystemRoot%\SysWOW64, если пакетный файл выполняется 32-битным cmd.exe в %SystemRoot%\SysWOW64\ в 64-битной Windows, поскольку пакетный файл запускается из 32-битного приложения.

Пакетный файл, приведенный ниже, может быть использован для получения списка системного каталога Windows в соответствии с архитектурой Windows, что имеет значение для 64-битной Windows.

set "SystemFolder=%SystemRoot%\System32"
if exist "%SystemRoot%\Sysnative\cmd.exe" set "SystemFolder=%SystemRoot%\Sysnative"
dir %SystemFolder%\*.dll /A-D /B >dll.txt
dir %SystemFolder%\a* /A-D /B >a.txt

Очень специальный перенаправитель %SystemRoot%\Sysnative не существует для 64-разрядных приложений и, следовательно, также не для пакетных файлов, выполняемых 64-разрядными cmd.exe в каталоге %SystemRoot%\System32\. Обратите внимание, что Sysnative - это ни каталог, ни символическая ссылка. Можно проверить, существует ли файл в %SystemRoot%\Sysnative, но нет, если существует %SystemRoot%\Sysnative.

0 голосов
/ 10 сентября 2018

Вы можете попробовать вот так:

@echo off
Set Log=%~dp0Files_DLL.txt
CD /D %Windir%\system32\
Dir /b a*.dll>>%Log%
Start "" %Log%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...