#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/};};

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP