#author("2019-08-27T15:19:53+00:00","","")
* DOSコマンド [#e1fe2151]

#setlinebreak(on);

#contents

** バッチファイルの制御用コマンド [#ba17d50b]
|コマンド|説明|h
|@|現在行の画面への表示抑止|
|:(ラベル)|ラベル|
|%0〜%9|パラメータの参照|
|%環境変数名%|環境変数の参照|
|%%文字|バッチ・プログラム内の変数|
|( )|一連のコマンドをグループ化|
|&&|前のコマンドが成功した場合だけ実行|
||||前のコマンドが失敗した場合だけ実行|
|&|1行中の複数のコマンドの区切り|
|^|エスケープ文字。&br;……@,&,%,^などを「文字そのもの」として使用したい場合に直前につける|
|; (セミコロン)|パラメータの区切り|
|, (カンマ)|パラメータの区切り|
|CALL|他のバッチ・プログラムの呼び出し|
|CALL :SUB|同一バッチファイル内サブルーチン呼び出し|
|ECHO|画面へのメッセージ表示|
|ENDLOCAL|環境変数のローカライズを終了する|
|FOR..IN(..)DO|繰り返し|
|GOTO|分岐|
|IF|条件比較|
|ELSE|条件が偽である場合の処理の指定|
|PAUSE|処理の停止|
|REM|コメント|
|SETLOCAL|環境変数のローカライズ|
|SHIFT|参照パラメータの繰り上げ|

&br;

** パラメータ参照方法の拡張 [#yec63905]
|パラメータ|説明|h
|%~1|引用句 (") があればそれを削除する|
|%~f1|完全修飾パス名を得る|
|%~d1|ドライブ文字を得る|
|%~p1|パス名だけを得る|
|%~n1|ファイル名だけを得る|
|%~x1|拡張子だけを得る|
|%~s1|短い名前を得る|
|%~a1|ファイルの属性を得る|
|%~t1|ファイルのタイムスタンプを得る|
|%~z1|ファイルサイズを得る|

&br;

** Windowsサービス登録・削除 [#u74888ec]
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;padding:0px 10px 0px 10px;">)
C:>sc create myservice binPath= "C:\xxxxxx\myservice.exe"

C:>sc delete myservice
#html(</td></tr></table>)

&br;

** nslookupを使用してDNSサーバの設定の状態を調べる [#s8400e93]

 《構文》
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;padding:10px;">)
nslookup -type=xxxx ドメイン名 DNSサーバ
#html(</td></tr></table>)

 《使用例》
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;padding:0px 10px 0px 10px;">)
## ネームサーバを調べる
nslookup -type=ns example.com

## MXレコードを調べる
nslookup -type=mx example.com

## CNAMEレコードを調べる
nslookup -type=cname example.com

## TXTレコードを調べる
nslookup -type=txt example.com
#html(</td></tr></table>)

** for文を使用してファイルやディレクトリの一覧を取得する [#edcac9b3]

#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;padding:0px 10px 0px 10px;">)
## ファイル一覧の取得
@for /R %i in (*) do @echo %~fi


## ディレクトリ一覧の取得
@for /D /R %i in (*) do @echo %~fi
#html(</td></tr></table>)


** キーボードからの値入力を受け付ける [#x371543e]
#html(<table><tr><td width="20"></td><td style="padding:0px;">input.cmd</td></tr></table>)
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;padding:0px 10px 0px 10px;">)
@echo off
echo 値を入力して下さい
set /p var=
echo 入力値は%var%です
#html(</td></tr></table>)


** 開いているポートを調べる [#u769797d]
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;">)
netstat -an
#html(</td></tr></table>)


** サーバのポートが開いているか調べる [#n8a379bc]
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;padding:0px 10px 0px 10px;">)
netsh diag connect iphost IPアドレス ポート番号
#html(</td></tr></table>)

** 簡単な文字列の置換 [#if483cc4]
#html(<div style="padding-left: 10px;">)
simple_replace.bat
#mycode2(){{
@echo off

set before="Hello World!"
set after=%before:World=Test%

echo %before%
echo %after%
}}
#html(</div>)


** 正規表現を使用した文字列の置換 [#taa7f239]
#html(<div style="padding-left: 10px;">)

for と powershell を利用して正規表現での文字列置換を行う
for の "usebackq" と powershell を利用して正規表現での文字列置換を行う

test_replace.bat
#mycode2(){{
@echo off

set target="C:\Program Files\R\R-3.5.3\bin\Rscript.exe"

set version=
for /F "usebackq delims=," %%i in (`powershell -Command "& { $txt = $Args -join ''; $txt -replace '.+[^0-9]([0-9]+\.[0-9]+\.[0-9]+)[^0-9].+','$1'} %target% "`) do set version=%%i

echo %target%
echo %version%
}}
#html(</div>)

** 遅延環境変数を使用した置換(変数の値を別の変数の値で置換する) [#jec8fd57]
#html(<table><tr><td width="20"></td><td style="background:#000000;color:white;">)
set var1=ABC
set varBF=A
set varAF=a

setlocal ENABLEDELAYEDEXPANSION
echo !var1:%varBF%=%varAF%!
endlocal
#html(</td></tr></table>)

** 代替Linuxコマンド [#v0b33e41]
#html(<div style="padding-left:20px;">)

*** 行数を数える(wc -l) [#u91d12f6]
 for /F "usebackq" %a in (`type ファイル名 ^| find /C /V ""`) do echo %a
#mycode2(){{
for /F "usebackq" %a in (`type ファイル名 ^| find /C /V ""`) do echo %a
}}

*** 実行中プロセスの表示(ps) [#edcdf7fe]
 tasklist
#mycode2(){{
tasklist
}}

*** コマンドの実行結果を変数にセットする [#re7aed5b]
 REM 変数nowdateに日付をセットする
 for /F "usebackq" %t in (`echo %date:/=%`) do set nowdate=%t
#mycode2(){{
REM 変数nowdateに日付をセットする
for /F "usebackq" %t in (`echo %date:/=%`) do set nowdate=%t
}}

*** コマンドの実行結果を変数にセットする(フィルタ使用) [#s5ab0b19]
 REM 変数cntに実行中の notepad.exe の数をセットする
 for /F "usebackq" %t in (`tasklist /NH /FI "IMAGENAME eq notepad.exe" ^| find /C /V ""`) do set cnt=%t
#mycode2(){{
REM 変数cntに実行中の notepad.exe の数をセットする
for /F "usebackq" %t in (`tasklist /NH /FI "IMAGENAME eq notepad.exe" ^| find /C /V ""`) do set cnt=%t
}}

*** grep [#o3bab086]
 findstr "検索文字列" ファイル名
#mycode2(){{
findstr "検索文字列" ファイル名
}}

*** cat [#b2146a80]
 type ファイル名
#mycode2(){{
type ファイル名
}}

*** tail [#w6e03209]
 @echo off
 set filename=%1%
 set cnt=%2%
 if "%cnt%" == "" set cnt=10
#mycode2(){{
@echo off
set filename=%1%
set cnt=%2%
if "%cnt%" == "" set cnt=10

REM 行数のカウント
set linecnt=0
for /F "tokens=*" %%a in (%filename%) do set /A linecnt+=1
 
 REM 行数のカウント
 set linecnt=0
 for /F "tokens=*" %%a in (%filename%) do set /A linecnt+=1
REM 行の表示
set /A startline=%linecnt% - %cnt%
set linecnt=0
for /F "tokens=*" %%a in (%filename%) do call :disp_rec %%a
goto :eof
 
 REM 行の表示
 set /A startline=%linecnt% - %cnt%
 set linecnt=0
 for /F "tokens=*" %%a in (%filename%) do call :disp_rec %%a
 goto :eof
 
 :disp_rec
 set /A linecnt+=1
 if %linecnt% GTR %startline% echo %*%
 goto :eof
 
 :eof
 
:disp_rec
set /A linecnt+=1
if %linecnt% GTR %startline% echo %*%
goto :eof

:eof
}}

*** tail -f[#w6e03209]
 @echo off
 set file=%1%
#mycode2(){{
@echo off
set file=%1%

set start_line=0
set pre_cnt=0
set pre_start_line=0

set linecnt=0
for /F "tokens=*" %%a in (%file%) do set /A linecnt+=1
set /A pre_cnt=%linecnt%-10

:main
set linecnt=0
for /F "tokens=*" %%a in (%file%) do set /A linecnt+=1
if "%linecnt%" GTR "%pre_cnt%" set /A start_line=%pre_cnt%
if "%pre_start_line%" EQU "%start_line%" sleep 1 & goto :main

set cnt=0
for /F "tokens=*" %%a in (%file%) do call :disp_line %%a
set pre_start_line=%start_line%
set pre_cnt=%linecnt%

sleep 1
goto :main

:disp_line
set /A cnt+=1
if %cnt% GTR %start_line% echo %*%
goto :eof

:eof
}}
 
 set start_line=0
 set pre_cnt=0
 set pre_start_line=0
 
 set linecnt=0
 for /F "tokens=*" %%a in (%file%) do set /A linecnt+=1
 set /A pre_cnt=%linecnt%-10
 
 :main
 set linecnt=0
 for /F "tokens=*" %%a in (%file%) do set /A linecnt+=1
 if "%linecnt%" GTR "%pre_cnt%" set /A start_line=%pre_cnt%
 if "%pre_start_line%" EQU "%start_line%" sleep 1 & goto :main
 
 set cnt=0
 for /F "tokens=*" %%a in (%file%) do call :disp_line %%a
 set pre_start_line=%start_line%
 set pre_cnt=%linecnt%
 
 sleep 1
 goto :main
 
 :disp_line
 set /A cnt+=1
 if %cnt% GTR %start_line% echo %*%
 goto :eof
 
 :eof
 
*** tee[#w6e03209]
 @echo off
 set file=%1%
 del %file%
 for /f "tokens=* delims=" %%i in ('@findstr /R .*') do @echo.%%i && @echo.%%i>>%file%
#mycode2(){{
@echo off
set file=%1%
del %file%
for /f "tokens=* delims=" %%i in ('@findstr /R .*') do @echo.%%i && @echo.%%i>>%file%
}}

#html(</div>)



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS