前回のつづき
リダイレクト、パイプ
標準出力と標準エラー出力
通常コマンドを入力し実行すると出力結果はモニタで確認できるようにコマンドプロンプトの画面上に出力されます。この出力結果のことは「標準出力」といいます。コマンドの文法が間違っている場合などエラーを伝える文章が表示された場合、通常の出力結果と違うため標準出力と区別します。そしてこの出力結果のことを「標準エラー出力」といいます。
実行結果の出力先
実行結果の出力先は通常ディスプレイになります。実はこの出力先はユーザーで自由に決めることができます。出力先をファイルにした場合はリダイレクトといい、出力先をほかのコマンドにする場合はパイプといいます。
ログ
出力結果をログとして残しておきたい場合はファイルにリダイレクトさせます。標準出力と標準エラー出力を別のファイルに分けることもできます。
リダイレクト
コマンドとファイルの間に大なり(>)を入れることでリダイレクトさせることができます。
[コマンド] > [ファイル] 通常の大なり(>)の場合は出力結果は上書きされますが、大なり大なり(>>)の場合は上書きされることなく追記することができます。 [コマンド] >> [ファイル]
パイプ
コマンドとコマンドの間に(|)を入れることでパイプすることができます。
[コマンド] | [コマンド]
例:リダイレクト、パイプ
@echo off rem echoの出力内容をtest.txtにリダイレクト echo Car > test.txt echo Apple >> test.txt echo Desk >> test.txt echo Bag >> test.txt rem ファイルの表示内容をsortコマンドにパイプしさらに出力結果をresult.txtにリダイレクト type test.txt | sort > result.txt pause
結果
test.txt Car Apple Desk Bag result.txt Apple Bag Car Desk
コマンドの結果を出力させない
コマンド > nul
@echo off net user | findstr /I guest > nul pause
文字列の操作
プログラムでは特定の文字を切り出したり、文字を置き換えたりと文字列の操作を頻繁に行います。batでもこれらの操作行うためいろいろなコマンドが用意されています。
・文字列切り出し・置き換え %[変数名]:~[開始位置],[文字数]% %[変数名]:~m% m文字目から、最後まで %[変数名]:~m,n% m文字目から、n文字分 %[変数名]:~m,-n% m文字目から、最後のn文字分を除いたもの %[変数名]:~-m% 後ろからm文字目から、最後まで %[変数名]:~-m,n% 後ろからm文字目から、n文字分 %[変数名]:~-m,-n% 後ろからm文字目から、最後のn文字分を除いたもの %[変数名]:a=b% 文字aを文字bに置換
日付/時刻
日付と時刻は形式がいろいろあり表記方法に悩むことがあります。
これを置き換えと切り出しを使ってどんな表記形式でも対応できるようにします。
@echo off set date_tmp=%date:/=% set time_tmp=%time: =0% set yyyy=%date_tmp:~0,4% set yy=%date_tmp:~2,2% set mm=%date_tmp:~4,2% set dd=%date_tmp:~6,2% set hh=%time_tmp:~0,2% set mi=%time_tmp:~3,2% set ss=%time_tmp:~6,2% echo %yyyy%-%mm%-%dd% %hh%:%mi%:%ss% echo %yyyy%/%mm%/%dd% %hh%:%mi%:%ss% pause
コマンドの出力結果から指定文字列を検索
findstr [オプション] "[指定文字列]" [検索対象ファイル] よく使うオプション /S: サブディレクトリを全部、再帰する。(シンボリックリンクも辿るかは未検証) /I: アルファベットの大小文字を区別しない。(デフォだと区別する) /X: 完全一致する行だけ。 /N: 行番号も表示する。(デフォだとファイル名だけ)
@echo off net user | findstr /I guest pause
ファイル操作
コピー
copy
copy [source_file] [destination_file] 低機能で単一のファイルのコピーに使う
xcopy
・xcopy [source_file] [destination_file] copyより高機能。ファイルをディレクトリ構造ごとコピーできる ・よく使うオプション /D:MM/DD/YYYY 指定した日付以降に更新されたファイルのみコピーする /D コピー先に同名のファイルが存在する場合に更新日が新しいファイルのみコピーする /P コピー前に確認メッセージを表示する /S ファイルが存在する場合のみコピーするサブディレクトリまで含めてディレクトリごとコピーする /E ファイルが存在しなくてもコピーするサブディレクトリまで含めてディレクトリごとコピーする /EXCLUDE:file name 指定したファイルをコピー対象から外す(複数ファイル指定時は"+"でくくる) /W キー入力を待ってコピーを開始する /C コピー時のエラーを無視する /I コピー先のディレクトリが存在しない場合は新規にディレクトリを作成する /Q コピーしたファイル名を表示しない /H 隠しファイルやシステムファイルも全てコピーする /T ファイルが存在するディレクトリのディレクトリのみコピーする /O ファイルの所有権やアクセス権限もそのままコピーする /Y 同名のファイルが存在する場合、上書きの確認を行わない
@echo off set source=%USERPROFILE%\Desktop\source set destination=%USERPROFILE%\Desktop\destination xcopy /S /C /I /Q /Y %source%\* %destination% pause
robocopy
・robocopy [source_file] [destination_file] 主にバックアップに使う。フォルダの同期が可能。コピー元、コピー先の差分を確認してコピーすることが可能。 ・よく使うオプション /B バックアップ専用の権限を持ったアカウント(バックアップモード)でファイルをコピーする /MIR ディレクトリツリーをミラー化する 増減両方の差分を反映する /XO 古いファイルを除外する /E 空のディレクトリを含むサブディレクトリをコピーする /COPY:Flag ファイルにコピーする情報を指定する(既定値は/COPY:DAT) ┣/COPY:DAT 既定値 ┗/COPY:DATS フォルダのアクセス権もコピー /R:1 コピー失敗時に何回再試行 (Retry) するか。1 の場合は、失敗した後にもう一度だけ再試行する。 /W:1 コピー失敗と判断するまでの待ち時間 (Wait time)。 /LOG:FileName ログファイルに状態を出力する(既存ファイルを上書く) /LOG+:FileName ログファイルに状態を出力する(既存ファイルに追記) /NP 進捗非表示 /NFL コピー成功時にはファイル名のログ出力しない /NDL コピー成功時にはフォルダ名のログを出力しない /L テストモード(ドライラン)。
@echo off set source=%~dp0\source set destination=%~dp0\destination robocopy %source% %destination% /B /E /R:1 /W:1 /LOG:%destination%\log.txt /NP pause
ファイルの移動や名前の変更
move [source_file] [destination_file] ・オプション /Y 上書き時に確認しない /-Y 上書き時に確認する
ディレクトリを作成する
mkdir [new directory name]
ディレクトリを削除する
rd [directory name] ・オプション /s ファイルやサブディレクトリも含めて削除する /q /sで削除する際に確認メッセージを表示しない
ファイルを削除
del [directory name] ・オプション /P ファイルの削除前に確認メッセージを表示する /F 読み取り専用ファイルを削除する /S 指定したファイルを全てのサブディレクトリから削除し、削除したファイル名を表示する /Q 削除前に確認メッセージを表示しない
管理者権限を持っているかどうか
openfilesは使用中の共有ファイルを表示するコマンドだが、管理者権限の持ったユーザーのみ使用可能。
これを使って管理者権限をもっているか判断する。
@echo off openfiles > NUL 2>&1 if NOT "%ERRORLEVEL%" == "0" goto user echo 【○】管理者権限です goto END :user echo 【×】管理者権限ではありません。 :END pause
次回はよく使うコマンドまとめです。
ユーザー操作、レジストリ操作、タスクスケジュールなど
「クラウドテック」です。 掲載案件では平均月60万、週3~4日勤務の案件が豊富で生活スタイルに合わせた働き方を設計できます。 また福利厚生が充実し旅行、レジャー、家事代行、ヘビーシッター、健康診断など100種類以上を無料で使えます。
- 97%がリモートのお仕事
- 週4日、週3日OKのお仕事多数
- 登録社数74万件業界トップクラス
- 2〜4週間程度でお仕事決定