ディレクトリとすべてのサブディレクトリを単一のエントリでPATH変数に追加します


19

ホームフォルダーにコマンドラインソフトウェア(CMD_Software)を配置するディレクトリがあります。混乱を避けるために、各ソフトウェアをCMD_Software内の独自のディレクトリに配置しました。

コマンドラインからCMD_Softwareとそれに含まれるすべてのディレクトリへのアクセスを許可するPATH変数に1つのエントリを作成したいと思います。

試しましたC:\Users\myuser\CMD_Software\*が、何もしませんでした。それが私がアイデアを使い果たしたポイントです。

ターミナルにいる間は新しいパスを設定しようとしていないことに注意してください。システムプロパティの[詳細]タブにある[環境変数]で新しいパスを設定しようとしています。


`C:\ Users \ myuser \ CMD_Software *`のようなものを試しましたか?
テルドン

4
これが可能だとは思わない。
ハリージョンストン

回答:


16

PATH変数は、ワイルドカードまたは再帰をサポートしていません。これは仕様です。

私がときどき使用した2つの可能な回避策があります。

  • 単純なバッチファイルでディレクトリを作成し、そのディレクトリをPATHに追加します。各バッチファイルは、たとえば次のようなプログラムを起動できます。

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    最初の行はコメントであり、2行目は@実行中のコマンドの表示を回避するために始まり、%*コマンドライン引数をEXEに渡すために使用されます。

  • CMD.EXEにエイリアスを追加します。

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    これは基本的CMD_Softwareに、コマンドプロンプトで等号の後のすべてに変換されます。$*指定された引数に置き換えられます。

単一のファイルにすべてのエイリアスをグループ化し(DOSKEY /?の「/ MACROFILE」スイッチを参照)、コマンドインタープリターがレジストリ設定を使用して起動するたびに自動実行することができるため、2番目のアプローチをお勧めします(「AutoRun」キーを参照CMD /?)。

2番目の方法の欠点は、エイリアスがコマンドラインの先頭でのみ機能することです。これは、コマンドを連鎖させたい場合に問題になる可能性があります。たとえば、CLS & CMD_Software括弧を使用して別の行にエイリアスを配置しないと機能しません。

CLS & (
CMD_Software
)

これが問題になるたびに、バッチファイルアプローチにフォールバックします。


ありがとう!最初の方法は、コンピューター間でデータを転送するときにレジストリを台無しにする必要がないため、私にとって非常にうまく機能します。また、ユーティリティを取得したときにbatファイルを作成するのに少し時間を費やしただけなので、かなり整頓されていて便利です。
サイクシモン

残念ながら、これまでの声明をすぐに編集しなければなりません。最初の方法を採用した後、スクリプトが実行の途中でランダムに終了するという奇妙な問題に遭遇しました。特に、Windowsのwgetは、ダウンロードが完了した後、スクリプトを強制終了することを楽しんでいるようです。最後の2時間はスクリプトのトラブルシューティングに苦労しましたが、最終的にはすべてのexeを単一のルートディレクトリに投げてみましたが、問題はすべてなくなりました。したがって、この方法を使用する前に注意することを強くお勧めします。
サイクシモン

4

これは私が問題を解決するために使用するものです。以下のこのスクリプトをコピーFIXPATH.BATして、PATH環境変数に追加したフォルダーに保存します。例えば:

C:\ Users \ myuser \ CMD_Software \

これで、サブフォルダーにあるプログラムを実行する必要があるときはいつでも...

C:\ Users \ myuser \ CMD_Software \ unixutils \ grep.exe
または
C:\ Users \ myuser \ CMD_Software \ imagetools \ exiftool.exe

fixpath最初に実行し、次のようにコマンド(grepまたはexiftool)を入力します。

Microsoft Windows [バージョン6.3.9600]
(c)2013 Microsoft Corporation。全著作権所有。

C:\ Users \ myuser> fixpath
C:\ Users \ myuser> exiftool


FIXPATH.BAT

setlocal EnableDelayedExpansion
cd / D%〜dp0

/ R %% d in(。)do(
    set "dirs =!dirs!; %% d"
)

path =%path%!dirs!
(エンドローカル
    「ret =%PATH%」を設定します
)
cmd / K "title [#] Path Fixed [#] && path%ret%"
exit / B

@VonCの回答に感謝


1

... \ CMD_Software(または実際にはどこかに)の下に「programlinks \」サブディレクトリを配置し、アクセスしたい各実行可能ファイルへのシンボリックリンクまたはハードリンクで埋めます。次に、... \ programlinksのPATHに1つのエントリで十分です。


1
それに関する主な問題は、実行可能ファイルが依存しているライブラリが潜在的にexeと同じディレクトリにある場合、それらが使用されないことです。または、少なくともこれで私の試みで起こっていることです。
-zero298

すばらしい発言、@ zero298。誰もが必ず100%であり、これは実際にチャイムを喜ばせるために真であることを確認することができます場合、私は、たいと思いますが(この方法原因そうでない場合は、すべての絶対的なクリーンである。)。
ヘンリック

-1

あまりにも先送りにならない場合は、コマンドラインツールをWindows \ System32ディレクトリにコピーできます。その後、pingやipconfigのように、任意のディレクトリから実行できます。

編集
少し手を加えた後、これは可能です。ディレクトリを区切るにはセミコロンを使用するだけです。「folder1」と「folder2」にプログラムがあるとします。次のようにパスを記述します。

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

その後、コマンドラインから直接、いずれかのディレクトリのプログラムを呼び出すことができます。私の知る限り、これを1行だけで行う方法は他にありません。

サポート情報:http : //en.wikipedia.org/wiki/PATH_(variable)


1
これはあまり意味がありません。1.これにより、PATH変数の以前の内容が消去されます。2. PATH変数にはフォルダーのみが含まれ、そのサブディレクトリーは含まれません(望ましい結果)。3. program.batas を呼び出すこと%PATH%\program.batは、PATHが設計されたものとほぼ反対です。
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.