10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コマンドプロンプトの自分用メモ

Last updated at Posted at 2016-07-31

コマンドプロンプトの備忘録です。

ROBOCOPY

ディレクトリ構造のみをコピー

ファイルはコピーしません。

ROBOCOPY [コピー元] [コピー先] /e /nocopy
  • /e : サブディレクトリをコピーします。 このオプションでは、空のディレクトリをコピーすることに注意してください。
  • /nocopy : ファイル情報をコピーしません。

コピーするファイルをワイルドカードで指定

たとえば、HTMLファイルを再帰適にコピーします。

ROBOCOPY [コピー元] [コピー先] *.html /s
  • /s : サブディレクトリをコピーします。 このオプションでは、空のディレクトリをコピーしないことに注意してください。

ディレクトリの同期

ROBOCOPY [コピー元] [コピー先] /mir
  • /mir : ディレクトリ ツリーをミラー化します (/e および /purge と同等)。

PAUSE

別バッチファイルのPAUSEコマンドを無効にする場合

PAUSEコマンドが書かれた下記のbatファイルを、繰り返し実行した場合です。

subcommand.bat
@echo off
echo %1
pause

subcommand.batの直前にECHO|を付けると、PAUSEコマンドで止まらず次の処理に移ります。ただし「続行するには何かキーを押してください...」というメッセージは出ます。

main.bat
@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個でもコメント行になります。

::コメント行

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?