DOS

日付、時間を加工して使用する ver2

DOS

FORコマンドを使用して年月日時分秒を展開する %A : 年 %B : 月 %C : 日 %D : 時 %E : 分 %F : 秒 FOR /F "tokens=1-6 delims=.: " %%A IN ('ECHO %DATE% %TIME: =0%') DO ECHO "%%A" "%%B" "%%C" "%%D" "%%E" "%%F"

標準エラー出力を制御

標準エラーをファイルに出力 コマンド 2>> ファイルパス標準エラーを標準出力に出力 コマンド 2>&1標準エラーと標準出力をファイルに出力 コマンド >> ファイルパス 2>&1

SQL SERVERをコマンドラインでDB操作

DOS

対話式 SQLCMD.exe -S サーバ名 -d スキーマ名ファイル実行 SQLCMD.exe -S サーバ名 -d スキーマ名 -i ファイルパス

ループ

よく書くループをメモ FOR /F "eol=" %%A IN (テキスト.txt) DO ( ECHO %%A )

GOTO文

バッチファイルはあまり複雑なことが出来ないので GOTO文を使うことがまれにある GOTO SKIPREM 処理:SKIPラベルにEOFを指定するとファイルの末尾に飛ぶ つまり終了する GOTO :EOFREM 処理

変数の値を切り出し

m,-nとかの組み合わせも出来るけど、使用するのはこのくらいのはず %VALUE% %VALUE:~m% m文字目から末尾まで %VALUE:~m,n% m文字目からn文字 %VALUE:~m,-n% m文字目から、末尾n文字目まで %VALUE:~-m% 末尾のm文字

MessageBoxのようなものをバッチで使用する

以下でMsgBoxを表示 REM "MESSAGE"をMsgBoxで表示 MSG 0 /W MESSAGE標準出力の結果を出力したい場合は パイプで繋ぐ ECHO MESSAGE | MSG 0 /W

TRACERT サーバーまでのルーティングの確認

TRACERT hostnamepingが許可されてないとたぶん駄目

一時的にカレントディレクトリの変更

REM 一時的にカレントディレクトリの変更 PUSHD パスREM ====== REM 処理 REM ======REM カレントディレクトリを戻す POPD

別バッチのPAUSEをキャンセル

ECHO|test.batECHOでエンターキーをパイプで送る

特定の文字列を含むファイルを検索する

DIRコマンドとFINDコマンドを繋ぐだけ DIR /S /B | FIND 文字列

リターンコード(ERRORLEBEL)

直前に実行したコマンドのリターンコードを取得する エラーコードをIF文にかませる場合はダブルクォーテーションでくくる ブランク対応だね ECHO %ERRORLEVEL% IF "%ERRORLEVEL%" == "0" ECHO 正常終了

DirectXのバージョン(設定)確認

DOS

キーワードDOSにしたけどDOSじゃないな 以下をファイル名を指定して実行で起動 dxdiag

ZIPコマンド

zipコマンドzip 圧縮ファイル名 追加するファイルORACLE入れるとzip/unzipがインストールされるので いろいろと使える

ファイルが存在する場合に警告を出力

DOS

「IF EXIST」と「PAUSE」の組み合わせ PAUSE状態でCtrl+Cで終了できる。 REM ファイル確認(存在する場合は警告) IF EXIST ファイル名 ( ECHO ファイル「%EXP_DMP%」は存在します。 ECHO Ctrl+C で終了できます。 PAUSE )

バッチファイル名を加工してバッチ内で使用する

DOS

%0 :フルパス %~d0 :ドライブ(C:) %~p0 :親ディレクトリ(〜\で終わる) %~n0 :拡張子を含まないファイル名 %~x0 :拡張子(.bat) %~s0 :MS-DOS(8.3形式) (複数の修飾子を組み合わせることも可能)

日付、時間を加工して使用する

DOS

REM 一度変数に入れないと時間が1桁のとき空白になる SET TIME2=%TIME: =0% ECHO %TIME2:~0,2%%TIME2:~3,2%%TIME2:~6,2% ECHO %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%