skuma0用メモ @ ウィキ
DOSコマンド
最終更新:
skuma0
-
view
概要
DOSコマンドメモ
出力
画面出力
結果のみ出力
@コマンド
全体で結果のみ出力
@echo off
テキスト内容出力
type a.txt
ファイル出力
上書き
コマンド > a.txt
追加
コマンド >> a.txt
結果を捨てる
コマンド >NUL
変数
変数は大文字小文字を区別しない
変数へのアクセス
変数の一覧表示
set
変数の設定(文字列)
set aaa=abc
変数の設定(数値)
set /a aaa=100+10 110 ----説明---- ・set~ /a 数値で設定
変数、パラメータの取得
| 文字 | 説明 | 例 |
|---|---|---|
| %変数名% | 変数に設定された文字 | %WINDIR% -> C:\WINDOWS |
| %0 | バッチファイル名(フルパス) | test.bat -> "c:\test.bat" |
| %1 | 第一引数の文字 | test.bat "abc" -> "abc" |
| %ERRORLEVEL% | 直前に実行されたコマンドの戻り値(通常0が成功) |
変数の操作
開始番号は0オリジンで設定する(1文字目 = 0)
| 文字 | 説明 | 例 (%WINDIR%=C:\Windows) |
|---|---|---|
| %変数名:x=y% | 変数内の文字列"x"を"y"に置換 | %WINDIR:C=D% -> D:\Windows |
| %変数名:~3% | 変数内の3+1文字目以降を取り出す | %WINDIR:~3% -> Windows |
| %変数名:~3,4% | 変数内の3+1文字目より4桁分を取り出す | %WINDIR:~3,4% -> Wind |
| %変数名:~-3% | 変数内の後ろから3文字目以降を取り出す | %WINDIR:~-3% -> ows |
| %変数名:~-3,2% | 変数内の後ろから3文字目より2桁分を取り出す | %WINDIR:~-3,2% -> ow |
パラメータの操作
| 文字 | 説明 | 例 (%0="C:\dos\test.bat") |
|---|---|---|
| %~0 | "を除く | C:\dos\test.bat |
| %~f0 | 完全修飾パス名 | C:\dos\test.bat |
| %~d0 | ドライブ名 | C: |
| %~p0 | パス名 | \dos\ |
| %~dp0 | フルパス名 | C:\dos\ |
| %~n0 | ファイルタイトル | test |
| %~x0 | 拡張子 | .bat |
| %~nx0 | ファイル名 | test.bat |
| %~t0 | ファイル更新日時(YYYY/MM/DD HH:MM) | 2012/02/16 10:19 |
| %~z0 | ファイルサイズ(byte) | 1024 |
環境変数
| 文字 | 説明 | 例 |
|---|---|---|
| %DATE% | 現在の日付(YYYY/MM/DD) | 2011/04/11 |
| %TIME% | 現在の時間( H:MM:SS.mm)(午前は前スペース) | 13:35:32.76 |
| %WINDIR% | システムフォルダ | C:\WINDOWS |
| %Systemroot% | システムフォルダ | C:\WINDOWS |
| %SystemDrive% | システムドライブ | C: |
| %COMPUTERNAME% | コンピュータ名 | |
| %USERDOMAIN% | ドメイン名 | |
| %USERNAME% | ユーザー名 | |
| %ALLUSERSPROFILE% | ALL Usersユーザープロファイルフォルダ | C:\Documents and Settings\All Users |
| %USERPROFILE% | Userユーザープロファイルフォルダ | C:\Documents and Settings\ユーザー名 |
便利な利用方法
日付(YYYYMMDD)
%date:/=% ----説明---- /を除去
時間(HHMMSS)
set tm=%time:~0,8% set tm=%tm::=% set tm=%tm: =0% %tm% ----説明---- :を除去した後、スペースを0置換
左0埋め(5桁)
set num=20 set num=00000%num% set num=%num:~-5% ----説明---- 前に5桁の0を付けた後、後ろから5桁取得
system32フォルダ
%windir%\system32
All Users デスクトップ
%ALLUSERSPROFILE%\デスクトップ
フロー制御
IF
文字列比較
IF 文字列1==文字列2 (
コマンド
) ELSE (
コマンド
)
ファイル存在チェック
IF EXIST ファイル名 (
コマンド
)
エラーチェック
結果が1以上 IF ERRORLEVEL 1 コマンド
GOTO
GOTO ERR :ERR
FOR
指定範囲繰り返し
10から1ずつ加算して20まで繰り返し for /l %%i in (10,1,20) do ( echo %%i )
変数の遅延展開(ループ内でSETする場合に使用)
SetLocal EnableDelayedExpansion
set num=100
for /l %%i in (1, 1, 20) do (
set /a num=!num!+1
echo !num!
)
----説明----
SetLocal EnableDelayedExpansion で遅延展開宣言
!変数名! で変数にアクセス
ファイル分ループ
for %%f in (.\files\*) do (
echo %%f
)
無限ループ
for /l %%i in (0,0,1) do ( echo %%i )
カンマ区切り分ループ
SET LIST=aaa,bbb,ccc for %%i in (%LIST%) do ( echo %%i )
サブルーチン
CALL :SUB aaa GOTO :EOF :SUB ECHO %1 EXIT /B
ファイル操作
dir
ファイル一覧表示
dir /b ・・・ファイル名のみ表示 dir /p ・・・1画面ごとに停止して表示 dir /s ・・・サブフォルダも表示
ソート順を指定して表示
dir /oソート順 例) dir /on ・・・ ファイル順 dir /od ・・・ 日付順(古いほうから) dir /o-d ・・・ 日付降順(新しいほうから) ----説明---- ・ソート順 N 名前順 (アルファベット) S サイズ順 (小さいほうから) E 拡張子順 (アルファベット) D 日時順 (古いほうから) G グループ (ディレクトリから)
カンレントディレクトリ移動(ネットワークパスもOK)
pushd ディレクトリパス
フォルダ内ファイル全コピー(読取専用上書き)
xcopy "c:\src" "c:\dest" /e /i /r /y ----説明---- ・xcopy /e サブディレクトリコピー /i 受け側がない場合ディレクトリとしてコピー /r 読取専用上書き /y 確認なし
ファイル一括処理(コピー,リネーム)
ファイル名の後ろ部分を残す場合
copy 0001*.jpg 0002*.jpg rename 0001*.jpg 0002*.jpg ----結果---- 0001_A.jpg -> 0002_A.jpg 0001_B.jpg -> 0002_B.jpg
ファイル名の前部分を残す場合
copy IMG_????A.jpg IMG_????B.jpg rename IMG_????A.jpg IMG_????B.jpg ----結果---- IMG_0001A.jpg -> IMG_0001B.jpg IMG_0002A.jpg -> IMG_0002B.jpg IMG_0003A.jpg -> IMG_0003B.jpg
フォルダ作成
存在チェック&作成
if not exist 対象フォルダ mkdir 対象フォルダ
ファイル・フォルダ削除
フォルダごと全削除
rd /s /q 対象フォルダ
フォルダ内のデータ全削除
set deldir="対象フォルダ" for /D %%f in ( %deldir% ) do rd /s /q "%%f" del /F /S /Q %deldir% ※ カウンタの変数はバッチファイルとコマンド入力で異なる バッチファイル時 %%f コマンド入力時 %f
10個残して削除
・ファイル
for /f "skip=10" %%f in ('dir /b /a /o-n "フォルダパス\*.log"') do del /f "フォルダパス\%%f"
・フォルダ
for /f "skip=10" %%f in ('dir /b /ad /o-n "フォルダパス\*"') do rd /s /q "フォルダパス\%%f"
フォルダ内の読取属性を全てはずす
cd 対象フォルダ attrib /s /d -r
ファイル内の文字検索
文字列を含む行を表示
find "検索文字" "ファイル名" ----説明---- ・find /c 検索文字の行の数のみ表示 /v 検索文字を含まない行を表示 /i 大文字小文字を区別しない
検索結果の行数を変数に代入
for /f "tokens=3" %%a in ('find /c "検索文字" "ファイル名"') do set ret=%%a
echo %ret%
外部プロセス実行
実行 -> 戻らない
xxx.bat
実行 -> 戻る
call xxx.bat
別プロセスで実行
start xxx.bat
タスク
タスク登録
起動時に実行
SCHTASKS /Create /TN "タスク名" /TR "プログラムパス" /SC ONSTART /RU ユーザ名 /RP パスワード
時間指定実行
5時に実行 SCHTASKS /Create /TN "タスク名" /TR "プログラムパス" /SC DAILY /ST 05:00:00 /RU ユーザ名 /RP パスワード
タスク実行
ローカルタスク
SCHTASKS /Run /TN "タスク名"
リモートタスク
SCHTASKS /Run /S コンピュータ名 /U ユーザ名 /P パスワード /TN "タスク名"
ネットワーク
Windows共有
共有の接続情報表示
net use
共有の接続
net use "共有フォルダ名" パスワード /user:ユーザ名
共有の切断
net use /delete "共有フォルダ名"
全共有の切断
net use /delete *
その他便利コマンド
なんちゃってSleep
5秒待機(数字にはSLEEP秒数+1を指定) ping localhost -n 6 >NUL ※Windows7以降はtimeoutコマンド使用可 timeout 5
ファイル数取得
SetLocal EnableDelayedExpansion set cnt=0 for %%f in (.\call\*) do set /a cnt=!cnt!+1 echo !cnt!