2011-04-07 119 views
4

我试着在Google上搜索这个,并没有真正学到任何东西,因为搜索结果通常与其他递归主题有关。我想知道的是,如果一个文件夹在路径中是递归定义的(在Windows上)?我想创建一个C:\ StandalonePrograms并将其添加到路径。它将包含一些编程语言和其他通常来自zip文件的程序。我想知道如果通过添加程序目录,我可以调用所有的程序。例如,如果我有C:\ StandalonePrograms \ SomeProgram,我可以打开命令提示符类型someCommand,并期望它从C:\ StandalonePrograms \ SomeProgram \ bin文件夹运行?或者我需要在我的路径中明确定义C:\ StandalonePrograms \ SomeProgram \ bin?如果我不能有任何解决方法来实现我想要的情况?路径递归

回答

6

您需要单独指定每个目录,PATH机制不会遍历子目录。

一种解决方法可以是一个完整的批处理文件(有些排序)目录下,以全路径

2

这里是一个解决办法开始真正的工具。保存为“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的最新副本可以启动(如果需要,请发表评论)。