2022-01-28に更新

バッチ書くときにしょっちゅう調べなおすこと

パラメータ

%0がバッチ自身で%1-nが引数なのは当然として、%~dp0とかの話。

修飾子 意味
%~0 ダブルクォートをとっぱらう
%~d0 ドライブ文字だけ
%~p0 ドライブ文字の後のパスだけ(ファイル名は含まない)
%~f0 フルパス
%~n0 ファイル名だけ(拡張子は含まない)
%~x0 拡張子だけ
%~a0 ファイル属性だけ
%~t0 ファイル時刻だけ
%~z0 ファイルサイズだけ
%~dp0 [応用]ドライブ含むバッチのあるディレクトリ
%~dpn0.ps1 [応用]同パス同名だけど拡張子がps1

対話入力

/pオプション。気を付けるべきはsetは変数と=の間に隙間あけちゃだめってとこ。

set /p hoge="Input:"
echo %hoge%

遅延環境変数

詳しい説明はどこかに任せる。
要はifとかforとかの括弧の中は1行として扱われるからその中で変化した変数を扱いたい時にこれを使う。
※なにが”遅延”なのかいまだに理解できていない。
ポイントは最初のおまじないとエクスクラメーションマークでくくることくらい。
最初のおまじないの言葉をよく忘れる。間にスペースがないから覚えにくいのだと思う。
「enable delayed expansion」

setlocal enabledelayedexpansion
if "%hoge%"=="" (
  set result="karappo"
  echo !result!
)

権限昇格の技

PowerShellさんまじですごい。
Start-Processに-Verbっていうのがあって色々ユーザ視点でできるけどその中に管理者として実行がある。それがrunas。あとは知ってることの組み合わせ。

@echo off
if not "%1%"=="admin" (
  PowerShell -command "Start-Process -Verb runas -FilePath %~f0 -ArgumentList 'admin'"
) else (
  echo Start Run As Administrator!
  pause
)

上記例では自身を管理者権限で呼び出している。無理やり引数にフラグもたせたけどもっとスマートな方法があるかも。

気が向いたら追記する

ツイッターでシェア
みんなに共有、忘れないようにメモ

RedCol

医療モダリティの開発に携わる底辺PG。主にDICOM周りをやるも毎度英語の壁にぶち当たり、泣きそうになりながら調べ続けて10年、いい加減アウトプットしときたいなと思ってようやく書き始める。飽き性なのでいつまで続くか心配。 スクリプト言語が好き、同じことを5回以上やるならスクリプト書こうとする。但し、書いたスクリプト保存しようとすると似たようなスクリプトが既に保存先にあることが多々あって困る。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント