Windows Пакетное изменение команды "dir"? - PullRequest
0 голосов
/ 17 января 2020

Это кажется маловероятным, но я могу только предположить, что что-то изменилось недавно (на этой неделе) во время Windows Обновления.

По крайней мере два сценария, которые сейчас используются для работы, этого не делают. То есть скрипты я использую почти каждый день. Среди них мой конструктор сценариев для небольшого Java проекта.

dir /s /B /a:-d *.java >sources.txt

"%JAVA_HOME%"\bin\javac %javaopts% -d ..\classes -nowarn -classpath %clspath% @sources.txt

Стандарт, верно? За исключением того, что «dir» больше не удаляет имя каталога (согласно a: -d), как раньше. Следовательно, мой java скрипт компиляции не работает. (Почему да, я также использую Eclipse.)

Как и в случае, файлы, перечисленные в источниках, содержат полный путь к файлу ("C: \ X \ Y \ Z \ src \ foo. java "). Удаляя вручную путь, предшествующий sr c ("c: \ x \ y \ z"), тот же сценарий работает. Я пробовал разные варианты опций, меняя команду javac, но всегда получаю ошибку синтаксического анализа "unknown option c: ... :) из-за полных путей, указанных в исходном файле .

Независимо от того, почему это произошло, это происходит сейчас, и я ищу альтернативу, которую я еще не нашел. Простая альтернатива - я, вероятно, мог бы написать al oop, который удаляет что-либо до "sr *". 1022 * "(например) - но эти две команды приводятся во многих, многих местах, поэтому я подумал, что сэкономлю кому-то время и отправлю сам.

1 Ответ

0 голосов
/ 19 января 2020

Люди, которые прокомментировали, верны. аргумент /a:-D не удаляет каталоги. См. dir .

Когда вы думаете об этом, если вы хотите «построить небольшой Java проект» (используя 2-ю строку вашего скрипта), зачем вам удалять папки, содержащие файлы java, полные имена файлов которых записаны в sources.txt?

/ s: перечисляет каждое вхождение указанного имени файла в указанном каталоге и во всех его подкаталогах.

/ b: отображает пустой список каталогов и файлов (полные имена) , без дополнительной информации (т. е. дата, время, размер не указаны).

/ a [[:]]: отображаются только имена этих каталогов и файлов с указанными атрибутами.

Если вы используете /a с указанием атрибута -d, Directories (d означает Directories) отображаются Not (- означает Not)

Суть в том, что sources.txt будет содержать пустой список полностью определенных имен файлов, соответствующих маске *.java в и ниже, независимо от текущего каталога на момент запуска сценария

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...