バッチファイル、って普通に実行する場合と管理者として実行する場合でカレントフォルダが変わってしまいます。
普通に実行する場合、カレントフォルダはファイルの所在。
一方、管理者として実行するとカントフォルダは
c:\Windows\system32
になります。
今回困った事象は、DirectShowのフィルタをインストールするバッチファイルの書き方。regsrv32.exe を使ってDirectShow関連のモジュールをインストールするためには当然ながら管理者としてバッチを実行する必要がある。が、関連するファイルがあるのでカレントフォルダが移動してしまうので、いったんバッチファイルがある所在へ cd する必要がある。どうやって書いたらよいのでしょう? という問題。
結果からすると
cd /d %~dp0
と書けばよい。
調べた結果詳細を以下に記載します。説明は書きませんが必要な人は参考にしてください。
"test.bat"
@echo off cd cd /d %~dp0 echo %~dp0 echo %~dpn0 echo %~dpnx0 pause
実行結果(通常実行):
C:\Users\[your_name]\Desktop C:\Users\[your_name]\Desktop\ C:\Users\[your_name]\Desktop\test C:\Users\[your_name]\Desktop\test.bat 続行するには何かキーを押してください . . .
実行結果(管理者として実行):
C:\Windows\system32 C:\Users\[your_name]\Desktop\ C:\Users\[your_name]\Desktop\test C:\Users\[your_name]\Desktop\test.bat 続行するには何かキーを押してください . . .
評価環境:
・Windows7、Windows8
注意事項:
・“cd
/d”しないと正常動作しない場合がある。ファイル所在がカレントドライブと違うとき、つまり上記の場合はbatファイルがcドライブ以外にある場合はうまく動作しない。テスト環境でbatファイルがcドライブ下ならば
/d が無くても動いてしまうので注意。
| 修飾子 | 意味 |
|---|---|
| f | フルパス名(ファイル名含む) |
| d | ドライブ文字だけ(C:など) |
| p | パス名だけ(ファイル名除く) |
| n | ファイル名だけ(.より前) |
| x | 拡張子だけ(.なんとか) |
| s | n または x と一緒に使って短いファイル名形式または拡張子に(そのファイルが存在する必要あり) |
| $変数: | 変数をディレクトリリストとして、パラメータで指定したファイルを探して最初に一致したフルパス |
本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。
| 2026-09-05 | - | ページデザイン更新 |
| 2013-07-06 | - | 新規作成 |