Путь рекурсивно - PullRequest
       4

Путь рекурсивно

4 голосов
/ 07 апреля 2011

Я попытался выполнить поиск в Google и ничего не узнал, поскольку результаты поиска обычно относятся к другим рекурсивным темам. Что я хотел бы знать, если папка находится в пути, определяется ли она рекурсивно (в Windows)? Я хочу создать C: \ StandalonePrograms и добавить это к пути. Он будет содержать несколько языков программирования и других программ, которые обычно приходят из zip-файлов. Я хочу знать, что если, добавив каталог программ в него, я могу вызвать все программы. Например, если у меня есть C: \ StandalonePrograms \ SomeProgram, могу ли я открыть командную строку типа someCommand и ожидать ее запуска из папки C: \ StandalonePrograms \ SomeProgram \ bin? Или мне нужно явно определить C: \ StandalonePrograms \ SomeProgram \ bin в моем пути? Если я не могу, есть ли какие-то обходные пути для достижения желаемой ситуации?

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

Вам необходимо указать каждый каталог индивидуально, механизм PATH не проходит по подкаталогам.

В качестве обходного пути может использоваться каталог, полный пакетных файлов (какого-то рода), которые запускают реальные инструменты с полным путем

2 голосов
/ 26 августа 2017

Вот обходной путь. Сохраните его как «SetMyPath.bat» (или с другим именем):

@echo off
set dir=%*
setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('dir /s /ad /o:d /b "%dir:"=%"') do set path=%%i;!path!
cmd

(Здесь "%dir:"=%" требуется только для того, чтобы вы могли опускать кавычки вокруг каталогов с пробелами в именах при вызове этого файла. Если вам это не нужно, то вместо этого подойдет %1.)

Этот файл принимает один аргумент командной строки: каталог. Он запустит новую копию cmd.exe, где будут доступны файлы в указанном каталоге:

C:\> mysqldump.exe
File not found.
C:\> SetMyPath.bat C:\Program Files\MySQL
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\> mysqldump.exe
Usage: mysqldump [OPTIONS] database [tables]
C:\> exit

В этом примере первая команда показывает, что mysqldump.exe не находится на пути. После выполнения командного файла запускается новый cmd.exe, где доступен mysqldump.exe. Когда вы закончите работу с ним, exit вернет вас к исходной копии cmd.exe.

Если в разных подкаталогах есть две копии файла .exe, будет запущена копия в самом последнем обновленном каталоге (из-за /o:d). В этом примере, предполагая, что каталог самой последней версии MySQL обновлялся последним, будет запущена самая последняя версия mysqldump.exe.

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

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