きったんの頭

ツイート
HOME > 開発室

コマンドプロンプト/バッチファイル

Windowsのコマンドラインインタプリタ cmd.exe
> ver
Microsoft Windows [Version 6.0.6002]
| サンプル | 演算子 | 動的環境変数 | バッチパラメータ | 部分文字列 | リンク |

サンプル

出力

コンソール出力しない
@echo off
ファイルの内容を1ページずつ出力
type some.txt | more
標準出力をファイルに書き込み
echo SampleString> output.txt    rem 上書き
echo.>> output.txt               rem 改行を追加
標準エラー出力をファイルに書き込み
SomethingError.exe 2> err.log
空のファイルを作成
type NUL>blank.txt

エスケープ

記号
echo ^ ^> ^<
 > <
改行
some.exe ^
  -opt1=foo ^
  -opt2=bar

コマンドライン引数

for %%i in (%*) do (
  echo %%i
)

ヘルプ

ヘルプを表示
help
ヘルプのヘルプ情報を表示
help help
help /?

サブルーチン

@echo off

call :func option1
exit /b

:func
  echo %1
goto :EOF

計算

set /a n = 2*3 + 1
echo %n%

set /a n += 1
echo %n%

set /a n ^>^> = 1
echo %n%

if %n% gtr 0 (
  echo %n% ^> 0
) else (
  echo %n% ^<= 0
)

set r=%random%
echo %r%

エラー処理

call foo.bat
if not %ERRORLEVEL% == 0 (
  echo error: %ERRORLEVEL% 1>&2
  exit /b %ERRORLEVEL%
)

ファイル名に日付

@echo off
setlocal

set DATESTR=%date:~-10,4%%date:~-5,2%%date:~-2,2%
set FNAME=sample%DATESTR%

echo sample log> "%FNAME%.log"

ファイル更新

古いテキストファイルのみ更新
replace *.txt backup /u
新規テキストファイルをコピー
replace *.txt backup /a
※backupディレクトリが見つからない場合はエラー

ファイル比較

相違点(+前後の行)を行番号とともに表示
fc /a /n a.txt b.txt

行単位の並べ替え

入力ファイル data.txt
nana
Nana
7
1234567
実行
sort data.txt
出力
1234567
7
nana
Nana

文字列置換

rem 日付の / を - にして表示
echo %date%
echo %date:/=-%
delayedexpansion
template.txt
1 2 3 4 5 6 !N!
rep.bat
@echo off
if "%1"=="" goto :EOF

setlocal enabledelayedexpansion
set N=%1
(for /f "delims=" %%A in (template.txt) do @echo.%%A)>replaced.txt
実行
rep 奈々
replaced.txt
1 2 3 4 5 6 奈々

.jsファイルをマージ

mergejs.bat
@echo off
if "%1" == "" (
  echo merge .js files.
  echo.
  echo ^ ^ mergejs [filename]
  goto :EOF
)

for %%i in (*.js) do (
  type %%i >> %1
)

NaturalDocs

@echo off
setlocal

set TARGET=C:\Documents\SampleProject
set DOCS=%TARGET%\docs

rem ディレクトリがなければ作る
if not exist %DOCS% mkdir %DOCS%

perl NaturalDocs -i %TARGET%\src -o HTML %DOCS% -p %TARGET% %1

rem Explorer で開く
start explorer %DOCS%

exit /b

演算子

()グループ化
! ~ -単項演算子
* / %算術演算子
+ -算術演算子
<< >>論理シフト
&ビット演算子 AND
^ビット演算子排他的 OR
|ビット演算子 OR
= *= /= %= += -= &= ^= |= <<= >>=代入
,式の区切り記号

比較

EQU等しい
NEQ等しくない
LSSより小さい
LEQ以下
GTRより大きい
GEQ以上

動的環境変数

%CD%現在のディレクトリ文字列
%DATE%DATE コマンドと同じフォーマットで現在の日付
%TIME%TIME コマンドと同じフォーマットで現在の時刻
%RANDOM%0 から 32767 の間の任意の 10 進数
%ERRORLEVEL%現在の ERRORLEVEL の値
%CMDEXTVERSION%現在のコマンド プロセッサ拡張機能のバージョン番号
%CMDCMDLINE%コマンド プロセッサを起動したオリジナル コマンド ライン
%HIGHESTNUMANODENUMBER%このコンピューター上の最大の NUMA ノード番号

バッチパラメータ

%~1引用句なし
%~f1完全修飾パス名
%~d1ドライブ名
%~p1パス
%~n1ファイル名
%~x1ファイル拡張子
%~s1展開されたパスはMS-DOSの「8.3形式」でも短い名前だけを含む。
%~a1ファイル属性
%~t1ファイルの日付・時刻
%~z1ファイルサイズ
%~$PATH:1PATH環境に指定されているディレクトリを検索し、最初に見つかった完全修飾名に%1を展開、または空の文字列。
バッチファイルのあるディレクトリに移動
cd /d %~dp0

部分文字列

%S:~m%m文字目以降
%S:~m,n%m文字目からn文字分
%S:~m,-n%m文字目から最後のn文字分を除いたもの
%S:~-m%後ろからm文字目以降
%S:~-m,n%後ろからm文字目からn文字分
%S:~-m,-n%後ろからm文字目から最後のn文字分を除いたもの
set S=123456789

echo %%S%% = %S%
echo %%S:~2%% = %S:~2%
echo %%S:~2,3%% = %S:~2,3%
echo %%S:~2,-3%% = %S:~2,-3%
echo %%S:~5%% = %S:~5%
echo %%S:~5,3%% = %S:~5,3%
echo %%S:~5,-3%% = %S:~5,-3%
出力
%S% = 123456789
%S:~2% = 3456789
%S:~2,3% = 345
%S:~2,-3% = 3456
%S:~5% = 6789
%S:~5,3% = 678
%S:~5,-3% = 6