バッチファイル、って普通に実行する場合と管理者として実行する場合でカレントフォルダが変わってしまいます。
普通に実行する場合、カレントフォルダはファイルの所在。
一方、管理者として実行するとカントフォルダは "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\英俊\Desktop
C:\Users\英俊\Desktop\
C:\Users\英俊\Desktop\test
C:\Users\英俊\Desktop\test.bat
続行するには何かキーを押してください . . .
============================
実行結果(管理者として実行)
============================
C:\Windows\system32
C:\Users\英俊\Desktop\
C:\Users\英俊\Desktop\test
C:\Users\英俊\Desktop\test.bat
続行するには何かキーを押してください . . .
============================
評価環境:
・Windows7、Windows8
注意事項:
・“cd
/d”しないと正常動作しない場合がある。ファイル所在がカレントドライブと違うとき、つまり上記の場合はbatファイルがcドライブ以外にある場合はうまく動作しない。テスト環境でbatファイルがcドライブ下ならば
/d が無くても動いてしまうので注意。
参考URL:
http://d.hatena.ne.jp/fuzzhead/20080930/p1
記載: 2013年7月6日 木下英俊