ja:windows-cmd-tips
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン | |||
ja:windows-cmd-tips [2014/05/08 04:17] – [現在のYYYYMMDD形式の文字列を手軽に取得する] makoto | ja:windows-cmd-tips [2014/05/13 13:35] (現在) – 削除 makoto | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== コマンドプロンプトのいろいろ ====== | ||
- | windowsのCUI環境コマンドプロンプトにおける、Tipsなど | ||
- | ===== コードページ切り替え ===== | ||
- | コマンドプロンプト上でのコードページは、windows標準であるMS932((Shift_JISのMicrosoftの独自拡張エンコード))になっている。\\ | ||
- | これがなんらかの原因で書き換わってしまった場合や、MS932以外のコードページでコマンドプロンプトを使用したい場合、CHCPコマンドを使用する。\\ | ||
- | > CHCP {使用したいコードページ番号} | ||
- | 以上でコードページの変更が可能。\\ | ||
- | UTF-8に変更したい場合であれば、 | ||
- | > CHCP 65001 | ||
- | 逆にコードページをMS932に戻したい場合は、 | ||
- | > CHCP 932 | ||
- | でOK。\\ | ||
- | ただし、下のコードページ一覧に記述があるものの、指定しても使用できないコードページもあるようです。 | ||
- | ==== コードページ一覧 ==== | ||
- | [[ja: | ||
- | ===== 手軽にSleep処理を行う ===== | ||
- | WindowsのバッチファイルでSleep処理を行う場合、sleepやwaitといったコマンドが準備されていない為、vbsやその他のプログラムを準備するなどする必要があるが、秒単位で、かつアバウトで良いのであれば、pingコマンドを使って簡単にSleep処理を実行できる。 | ||
- | **sleep.bat** | ||
- | <code winbatch> | ||
- | @ECHO OFF | ||
- | ECHO " | ||
- | REM ここで10秒Sleepしてみる | ||
- | PING -n 10 localhost > NUL | ||
- | ECHO " | ||
- | </ | ||
- | やっている事は至極簡単で、pingコマンドが1回辺り約1秒毎で実施される事を利用し、**-n**オプションでその繰り返し回数を指定。\\ | ||
- | 後は宛先を**localhost**で自分自身にしておけばOK。\\ | ||
- | ただし、**-n**で**1**を指定すると1秒とはならず、パケットの応答を確認すると即座に後続の処理に進んでしまう。\\ | ||
- | 実際のところは希望時間+1秒を-nオプションに指定すると良い。 | ||
- | ==== もっと手軽にSleep処理を行う ==== | ||
- | なんと**timeout**コマンドなる、そのものずばりなコマンドがあった。\\ | ||
- | 書式は**" | ||
- | 画面表示もカウントダウンしてくれるので、非常に良い。\\ | ||
- | 無言で待機させたい場合はNULLへリダイレクトすればよい。 | ||
- | |||
- | <code winbatch> | ||
- | TIMEOUT /T 10 /NOBREAK > NUL | ||
- | </ | ||
- | ===== コマンド実行結果を変数に格納する ===== | ||
- | Linuxのシェルスクリプトの場合、コマンドの実行結果を変数に代入するのはサクッと簡単にできるが、Windowsバッチの場合は直感的にはできない。一手間かけてfor文を使う。 | ||
- | |||
- | **var.bat** | ||
- | <code winbatch> | ||
- | @ECHO OFF | ||
- | REM hostnameコマンドの実行結果を変数DATAに代入する | ||
- | SET DATA= | ||
- | FOR /f %%A in (' | ||
- | ECHO %DATA% | ||
- | </ | ||
- | FOR文中の「~~~」の部分に実行したいコマンドを記述すると良い。 | ||
- | ただし、コマンドがパイプ「|」で連結されたり、コマンドに引数を渡す為にダブルクォートやシングルクォートなどを使う場合は「^」でエスケープする必要があるので注意する。 | ||
- | ==== FOR文の/ | ||
- | FOR文は/ | ||
- | テキストファイルをカンマ区切りで分割し、任意の列の文字列だけをECHOするとか。((**/ | ||
- | === 複数の空白文字を含む場合の取り扱い === | ||
- | FOR /F " | ||
- | 上記のような処理で、hogehoge.txtを読み込んだ時、hogehoge.txtが下記のような状態だったとする。 | ||
- | |||
- | **hogehoge.txt** | ||
- | < | ||
- | AAA BBB CCC | ||
- | DDD EEE | ||
- | FFF GGG | ||
- | </ | ||
- | これを上のコマンドで処理すると、出力は以下の様になる。 | ||
- | <code winbatch> | ||
- | FOR /F " | ||
- | BBB | ||
- | EEE | ||
- | GGG | ||
- | </ | ||
- | **delims**オプションが指定されていない場合、デフォルトの区切り文字は空白文字となるが、引き渡される文字列中に空白文字が連続して入っていたり、行頭に入っていたりする場合、次のように取り扱われる。 | ||
- | * 連続する空白文字は1文字として扱われる。\\ (空白文字毎に別の部分文字列に分解されない) | ||
- | * 行頭の空白文字は無視される。\\ (行頭の空白文字の後に来る最初の部分文字列が1つ目の文字列として取り扱われる) | ||
- | ===== 現在のYYYYMMDD形式の文字列を手軽に取得する ===== | ||
- | 以前某IT系サイトを見ていると、年月日をYYYYMMDD形式で取得する場合、 | ||
- | <code winbatch> | ||
- | set YYYYMMDD=%Date: | ||
- | echo %YYYYMMDD% | ||
- | </ | ||
- | のようにして取得する。\\ というような事が書かれていて、正直「めんどくせぇなぁ…」と思っていたのだが、目の覚めるような代替案を発見。 | ||
- | <code winbatch> | ||
- | set YYYYMMDD=%DATE:/ | ||
- | echo %YYYYMMDD% | ||
- | </ | ||
- | これでOK。DATEで出力される文字列から/ | ||
- | ちなみにTIMEでも**" | ||
- | ミリ秒が残って良いなら、こんな感じで午前中に発生する行頭の空白文字を除去(0に置換)できる。 | ||
- | <code winbatch> | ||
- | set dummy=%TIME:: | ||
- | set HHMMSS=%dummy: | ||
- | echo %HHMMSS% | ||
- | </ | ||
- | ===== 任意のテキストファイルを一行ずつ読み込んで処理する ===== | ||
- | 任意のテキストファイルを一行ずつ読み込んで処理した場合は次のようにする。 | ||
- | <code winbatch> | ||
- | for /f " | ||
- | |||
- | :sub | ||
- | echo %1 | ||
- | </ | ||
- | 一行ずつ読み込んで、サブルーチンに引数として渡す感じですね。 | ||
- | **delims=**の部分を**eol=# | ||
- | ===== 末尾が数値の文字列をECHOでリダイレクトする ===== | ||
- | リダイレクト、といえば> | ||
- | <code winbatch> | ||
- | set AAA=hogehoge=2 | ||
- | echo %AAA%> | ||
- | </ | ||
- | これを実際やると、末尾の2が消えます。\\ | ||
- | これを出力したい場合は、リダイレクトとecho命令の位置を差し替えて下さい。 | ||
- | </code winbatch> | ||
- | set AAA=hogehoge=2 | ||
- | > | ||
- | </ | ||
- | ===== バッチファイルのあるフォルダパスを取得する ===== | ||
- | バッチファイルの作成時、そのバッチファイルが存在しているフォルダのパスを取得したい時は、%~dp0と書く。\\ | ||
- | つまるところ、変数%0(実行するファイル自身のファイル名)の改変?みたいなもの。 | ||
- | <code winbatch> | ||
- | echo %~dp0 | ||
- | pause | ||
- | </ | ||
- | 上記の内容でtest.bat等と名前をつけて、例えばC: | ||
- | < | ||
- | C:\script\ | ||
- | </ | ||
- | と出力される。\\ | ||
- | スクリプトのログファイルとかのパス設定に便利。かも。 | ||
- | ==== その他パラメータ ==== | ||
- | **f** : フルパス\\ | ||
- | **d** : ドライブレター+コロンのみ\\ | ||
- | **p** : パスのみ(ドライブレター、ファイル名を除く)\\ | ||
- | **n** : 拡張子のみ |
ja/windows-cmd-tips.1399522623.txt.gz · 最終更新: 2014/05/08 04:17 by makoto