LoginSignup
46
38

More than 5 years have passed since last update.

コマンドプロンプト/PowerShell でスクリプト自身のパスを扱う

Posted at

タスクスケジューラからスクリプトをキック → スクリプトから相対パスで別スクリプトを指定してキック… 等のシチュで必要になるアレです。

コマンドプロンプト

スクリプト自身のパス.bat
@echo off

@rem 実行時に指定された絶対/相対パスそのまま
echo %0

@rem スクリプトのフルパス
echo %~f0
echo %~dpnx0

@rem スクリプトのディレクトリ
echo %~dp0

実行確認(例)

C:\Users\heignamerican\testroom\cmd>hoge.bat

hoge.bat
C:\Users\heignamerican\testroom\cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\

C:\Users\heignamerican\testroom\cmd>.\hoge.bat

.\hoge.bat
C:\Users\heignamerican\testroom\cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\

C:\Users\heignamerican\testroom\cmd>cd ..
C:\Users\heignamerican>cmd\hoge.bat

cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\hoge.bat
C:\Users\heignamerican\testroom\cmd\

PowerShell

スクリプト自身のパス.ps1
$scriptPath = $MyInvocation.MyCommand.Path

echo $scriptPath
Split-Path -Parent $scriptPath

実行確認(例)

普通に実行する場合

C:\Users\heignamerican\testroom\ps> .\hoge.ps1

C:\Users\heignamerican\testroom\ps\hoge.ps1
C:\Users\heignamerican\testroom\ps

C:\Users\heignamerican\testroom\ps> cd ..
C:\Users\heignamerican\testroom> .\ps\hoge.ps1

C:\Users\heignamerican\testroom\ps\hoge.ps1
C:\Users\heignamerican\testroom\ps

ドットソース形式での読み込み

C:\Users\heignamerican\testroom\ps> . .\hoge.ps1

C:\Users\heignamerican\testroom\ps\hoge.ps1
C:\Users\heignamerican\testroom\ps

C:\Users\heignamerican\testroom> . .\ps\hoge.ps1

C:\Users\heignamerican\testroom\ps\hoge.ps1
C:\Users\heignamerican\testroom\ps

PowerShell 補足

  • > hoge.ps1 と指定してはダメ。
    > .\hoge.ps1 とカレントディレクトリの相対パスを明記する
    別ディレクトリであれば > ps\hoge.ps1 は通る
  • . コマンドによる ドットソース形式での読み込み を考慮

所感という名の愚痴

いつも思うんですが、コマンドプロンプトの方は自明な命名ではないですが
その分ワンライナー的な扱いは簡単ですね。
PowerShell はスクリプトゴリゴリ書く場合はいいけど、コマンドラインからワンライナーを駆使した作業とかに向かない…
alias を頑張って設定するとかでちょっとは便利になるのだろうか。

46
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
38