コマンドプロンプトの備忘録です。
ROBOCOPY
ディレクトリ構造のみをコピー
ファイルはコピーしません。
ROBOCOPY [コピー元] [コピー先] /e /nocopy
-
/e
: サブディレクトリをコピーします。 このオプションでは、空のディレクトリをコピーすることに注意してください。 -
/nocopy
: ファイル情報をコピーしません。
コピーするファイルをワイルドカードで指定
たとえば、HTMLファイルを再帰適にコピーします。
ROBOCOPY [コピー元] [コピー先] *.html /s
-
/s
: サブディレクトリをコピーします。 このオプションでは、空のディレクトリをコピーしないことに注意してください。
ディレクトリの同期
ROBOCOPY [コピー元] [コピー先] /mir
-
/mir
: ディレクトリ ツリーをミラー化します (/e および /purge と同等)。
PAUSE
別バッチファイルのPAUSEコマンドを無効にする場合
PAUSEコマンドが書かれた下記のbatファイルを、繰り返し実行した場合です。
@echo off
echo %1
pause
subcommand.bat
の直前にECHO|
を付けると、PAUSEコマンドで止まらず次の処理に移ります。ただし「続行するには何かキーを押してください...」というメッセージは出ます。
@echo off
for /L %%i in (0,1,9) do (
ECHO|subcommand.bat %%i
)
ECHO|
の意味
ECHO
コマンドで改行が出力されます。その「改行」をパイプ|
で、subcommand.batの標準入力に渡しています。
FOR
指定回数ループする方法
以下のようなJavaのループを、コマンドプロンプトで実現する場合、
for (int i=0; i<10; i++)
下記で実現できます。
@echo off
for /L %%i in (0,1,9) do (
echo %%i
)
最初の0
が開始値、中間の1
が増分値、最後の9
が終了値です。
公式サイトを引用
反復変数を使い、開始値 Start# を設定し、その反復変数がセットの終了値 End# を超えるまで、設定された範囲の値を順に処理します。/L を指定すると、Start# と End# を比較することによって反復が実行されます。Start# が End# より小さければ、コマンドが実行されます。反復変数が End# を超えると、コマンド シェルはループから抜け出します。Step# に負の値を使用して、範囲内の値を大きい方から順に処理することもできます。たとえば、(1,1,5) は 1 2 3 4 5 というシーケンスを生成しますが、(5,-1,1) は 5 4 3 2 1 というシーケンスを生成します。構文は次のとおりです。
for/L {%% | %}Variable in (Start#,Step#,End#) do Command [CommandLineOptions]
その他
Linuxのsedコマンドに変わるもの
下記サイトを参考にしました。
http://knowledge.reontosanta.com/archives/816
rem テキストファイルの文字を置換した内容を出力する。ファイルは上書きしない。
rem -- 引数1個目 : 置換対象のファイル
rem -- 引数2個目 : 置換前の文字列
rem -- 引数3個目 : 置換後の文字列
rem 入力ファイル
set infilenm=%1
rem 置換前文字列
set beforestr=%2
rem 置換後文字列
set afterstr=%3
rem ファイル編集
setlocal enabledelayedexpansion
for /f "delims=" %%A in (%infilenm%) do (
set line=%%A
echo !line:%beforestr%=%afterstr%!
)
endlocal
PowerShellが使えるならば、PowerShellを使った方がよさそうです。
batファイルの引数チェック
if "%1"=="" goto usage
rem ~通常の処理~
:usage
echo ~使い方~
if %1==""
だと構文エラーになるので、"%1"
としています。
コメント
REMコマンドだけででなく、コロン2個でもコメント行になります。
::コメント行