- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-03-24T00:02:52+00:00","default:haikikyou","haikikyou")
#author("2019-04-20T13:13:26+00:00","default:haikikyou","haikikyou")
#contents
* 変数 [#g0b47819]
** 変数 [#w30ba674]
** 遅延変数 [#t0b4a1bc]
** 配列 [#d9895fae]
** 文字列処理 [#nc4c43f1]
*** 抽出 [#l40318d5]
%変数:~開始,文字数%
#geshi(dos){{{
set var=This is a sample
echo %var:~1,3%
@rem => his
set var=あいうえお
echo %var:~1,2%
@rem => いう
echo %var:~-1%
@rem => お
echo %var:~-2%
@rem => えお
echo %var:~0,-2%
@rem => あいう
}}}
*** 置換 [#fabc5afe]
%変数:置換対象文字=置換後文字%
#geshi(dos){{{
set var=あいうえお
echo %var:あ=か%
@rem => かいうえお
echo %var:*お=か%
@rem => か
echo %var:*う=か%
@rem => かえお
}}}
** リテラル [#jb109eb3]
** エスケープ [#d7b97a3d]
** エラーレベル [#z56ec81a]
- コマンドの終了コードは、%ERRORLEVEL%で確認できる。0~255の範囲。
- 0は成功、not 0は失敗。失敗は、通常1で表現される。
#geshi(dos){{{
@echo off
dir >NUL && echo success
echo ERRORLEVEL: %ERRORLEVEL%
type error.cat >NUL|| echo file not found
echo ERRORLEVEL: %ERRORLEVEL%
}}}
* 制御構造 [#kdc3fd78]
** 条件分岐 [#y3821490]
** 繰り返し [#z0f6ee8b]
* コマンド呼び出し [#w55be551]
** CALL [#o9cc24cf]
** START [#k3036d62]
* プログラム例 [#sd2d6073]
** batからJScriptを実行 [#v5d222a2]
こんな使い方があるのか、知らなかったが便利なので備考録として書く。
JScriptの @if @endで、囲まれたところまでをbatプログラムとして実行するという方法。
#geshi(dos){{{
@if(0)==(0) Echo Off
@rem 上記はJScriptでfalseのため実行されない
@rem 自分自身をJScriptとして実行、引数は全てそのまま渡す
CScript //NoLogo //E:JScript "%~f0" %*
@rem Begin Windows Batch
@rem ------------------------------
Exit /b
@rem ------------------------------
@rem End Windows Batch at next line @end
@end
/*
メモなど(JScriptコメント)
*/
// JScriptコード
// Do something
}}}
&label(warn){参考};
- https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc392525(v=msdn.10)
** ( ) の中での ( ) のエスケープしてパイプでつなげる [#b2f923e1]
&code(){^};キャレットが3つ必要、パイプでcmdに送られるコマンドでエスケープが必要となるためだ。
#geshi(dos){{{
@echo off
echo create table if not exists foo (id int) | psql -a
@rem Ex1: この方法はOK
echo ^
insert into foo (id) values (9); ^
delete from foo; | psql -a
@rem Ex2: )を^^^)でエスケープする必要あり
(
echo insert into foo ^(id^^^) values ^(9^^^);
)| psql -a
}}}
Ex2は可読性が悪い。。複数コマンドをつなげる場合は、Ex1の方法が良いだろう。
&label(warn){参考};
- https://stackoverflow.com/questions/12976351/escaping-parentheses-within-parentheses-for-batch-file
- https://stackoverflow.com/questions/8192318/why-does-delayed-expansion-fail-when-inside-a-piped-block-of-code
* コマンドプロンプトキー一覧 [#y0702223]
よく使うコマンドプロンプトのキー一覧。
|~キー|~意味|h
|ESC|現在入力のコマンドをクリア|
|Page up|コマンド履歴の先頭を表示(F7で見える最初)|
|Page down|コマンド履歴の最後を表示(F7で見える最後)|
|Home|カーソルを行頭に移動|
|End|カーソルを行末に移動|
|Tab|補完|
|↑|前のコマンド|
|↓|次のコマンド|
|Ctrl + Home|カーソル位置から行頭までを削除|
|Ctrl + End|カーソル位置から行末までを削除|
|Ctrl + →|単語単位で右に移動|
|Ctrl + ←|単語単位で左に移動|
|F7|履歴表示|
|F9|履歴番号を指定してコマンド実行|
* 環境変数 [#ubd6bac0]
|変数|内容|h
|a|a|
|a|a|
|a|a|
|a|a|
|a|a|
|a|a|
|a|a|
|a|a|
|a|a|
|a|a|
* スリープ処理 [#v0fd05aa]
#geshi(dos){{{
@rem timeoutを使う
timeout /t 10 /nobreak >nul
@rem pingを使う
ping -n 10 localhost >nul
@rem powershellを使う
powershell -Command Start-Sleep -s 10
}}}
&label(warn){参考};
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/timeout_1
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ping
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/start-sleep?view=powershell-6
-
* 役立つリンク [#kc197d6f]
- Bat
-- [[Windows Batch Scripting>https://en.wikibooks.org/wiki/Windows_Batch_Scripting]] - &size(11){&color(gray){on https://en.wikibooks.org/wiki/Windows_Batch_Scripting};};
-- [[Windows Environment Variables>https://ss64.com/nt/syntax-variables.html]] - &size(11){&color(gray){on https://ss64.com/nt/syntax-variables.html};};
-- [[バッチファイル基礎文法リファレンス>https://qiita.com/kshibamo/items/9368b0b2a4a2f40b61f1]] - &size(11){&color(gray){on https://qiita.com/kshibamo/items/9368b0b2a4a2f40b61f1};};
-- [[バッチファイルでの試行錯誤を回避するためのメモ>https://qiita.com/yz2cm/items/8058d503a1b84688af09]] - &size(11){&color(gray){on https://qiita.com/yz2cm/items/8058d503a1b84688af09};};
-- [[Command-line reference A-Z>https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands]] - &size(11){&color(gray){on https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands};};
-- [[Windows 10対応:これだけは覚えておきたいWindowsのコマンドプロンプトの使い方>http://www.atmarkit.co.jp/ait/articles/1502/13/news147.html]] - &size(11){&color(gray){on http://www.atmarkit.co.jp/ait/articles/1502/13/news147.html};};
- キーボードショートカット
-- [[Keyboard shortcuts in Windows>https://support.microsoft.com/en-us/help/12445/windows-keyboard-shortcuts]] - &size(11){&color(gray){on https://support.microsoft.com/en-us/help/12445/windows-keyboard-shortcuts};};
-- [[Windows のキーボード ショートカット>https://support.microsoft.com/ja-jp/help/12445/windows-keyboard-shortcuts]] - &size(11){&color(gray){on https://support.microsoft.com/ja-jp/help/12445/windows-keyboard-shortcuts};};
-- [[34 Useful Keyboard Shortcuts for the Windows Command Prompt>https://www.howtogeek.com/254401/34-useful-keyboard-shortcuts-for-the-windows-command-prompt/]] - &size(11){&color(gray){on https://www.howtogeek.com/254401/34-useful-keyboard-shortcuts-for-the-windows-command-prompt/};};