1. ホーム
  2. windows

[解決済み] Windowsのバッチファイルを「管理者として実行」した場合の起動ディレクトリについて

2023-03-10 18:56:39

質問

あるディレクトリにバッチファイルがあり、そのディレクトリ内のファイルを更新するため、そのディレクトリからも実行する必要があります。

これは、ユーザーが管理者としてバッチ ファイルを実行する場合 (Vista で必要) を除いて、まったく問題なく機能します。その場合、開始ディレクトリは C:\WindowsSystem32 となります。



それでも、どのディレクトリからバッチファイルが実行されたかを知ることができる方法はないでしょうか?

私は、ユーザーが手動でディレクトリを入力することを望んでいません。

どのように解決するのですか?

バッチファイルのパスには、次のようにアクセスしてみてください。

echo %~dp0

詳細については、コマンドの次の引用を参照してください。 for /? を参照してください。

次のオプション構文が使えるようになりました。

    I - %I を展開し、周囲の引用符 (") をすべて削除します。
    %~fI - %I を完全修飾パス名に展開します。
    %~dI - %I をドライブ文字にのみ展開します。
    %~pI - %I をパスのみに展開します。
    %~nI - %I をファイル名のみに展開します。
    %~xI - %I をファイル拡張子のみに展開します。
    %~sI - 展開されたパスは短い名前のみを含みます。
    %~aI - %I をファイルの属性に展開します。
    %~tI - %I をファイルの日付/時刻に展開します。
    %~zI - %I をファイルのサイズに展開します。
    %~$PATH:I - 環境変数 PATH にリストされたディレクトリを検索し、%I をファイルのサイズに展開します。
                   環境変数にリストされているディレクトリを検索し、%I を
                   の完全修飾名に展開する。
                   環境変数名が定義されていない場合、または
                   環境変数名が定義されていないか、検索でファイルが見つからなかった場合
                   によってファイルが見つからなかった場合、この修飾子は
                   空の文字列

修飾子を組み合わせて、複合的な結果を得ることができます。

    dpI - %I をドライブ文字とパスだけに展開します。
    nxI - %I をファイル名と拡張子だけに展開します。
    %~fsI - %I をフルパス名と短い名前にのみ展開します。
    %~dp$PATH:I - PATH 環境変数にリストされたディレクトリを %I で検索し、展開します。
                   環境変数 PATH にリストされたディレクトリを %I で検索し、最初のドライブ文字とパス
                   ドライブ文字とパスが最初に見つかったものに展開します。
    %~ftzaI - %I を DIR のような出力行に展開します。