cloud9_note

cloud9に限らないメモ

View on GitHub

Windows batch

起動引数

%0
%1
...

※%0は起動ファイル名。

変数

宣言

set 変数名=

参照

%変数名%

if : 条件分岐

if 条件 (
  コマンド
) else (
  コマンド
)

例 : 文字列

@echo off

set hoge=%1

if %hoge%==hoge (
  echo true
) else (
  echo false
)
>if.bat hoge
true
>if.bat piyo
false

for

ディレクトリ配下のファイル一覧を取得する

変数(%%A)は必ず1文字でなくてはいけない。

for オプション 検索対象フォルダ %%A in (ファイル名) do (
  echo %%A 
)

オプション

オプション 効果
/r 再帰検索して、ファイルのみ取得
/d ディレクトリのみ取得

実行例

>dir sample01 /b /s
sample01\sample01_01.txt
sample01\sample02
sample01\sample02\sample02_01.txt
@echo off

for /r .\sample01 %%A in (*.*) do (
  echo %%A 
)
C:\Users\ittim\BatchSample\sample01\sample01_01.txt
C:\Users\ittim\BatchSample\sample01\sample02\sample02_01.txt

参考

ファイルを読み込む

@echo off

set filename=%1

for /f %%l in (%filename%) do (
  echo %%l
)

参考

ファイルの???のみ取得する

オプション 取得するもの
%%f ファイルのフルパス
%%~nf ファイル名のみ。拡張子を除く。
%%~xf 拡張子のみ。(”.”がついてくる。)
%%~nxf ファイル名のみ。拡張子を含む。
%%~df ドライブレター(C:]等)
%%~pf ドライブレターを除いたディレクトリ名
%%~dpf ディレクトリ名
%%~tf ファイル更新日
%%~zf ファイルサイズ

実行例

>dir hogedir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は AC93-73F5 です

 C:\Users\alluser\WindowsBatSample\hogedir のディレクトリ

2022/05/11  09:01    <DIR>          .
2022/05/11  09:01    <DIR>          ..
2022/05/11  08:52                 4 piyo.txt
               1 個のファイル                   4 バイト
               2 個のディレクトリ  48,286,896,128 バイトの空き領域
@echo off

for /r .\hogedir %%f in (*.*) do (
  echo %%f
  echo %%~nf
  echo %%~xf
  echo %%~nxf
  echo %%~df
  echo %%~pf
  echo %%~dpf
  echo %%~tf
  echo %%~zf
  echo   
)

>hoge.bat
C:\Users\alluser\WindowsBatSample\hogedir\piyo.txt
piyo
.txt
piyo.txt
C:
\Users\alluser\WindowsBatSample\hogedir\
C:\Users\alluser\WindowsBatSample\hogedir\
2022/05/11 08:52
4
ECHO は <OFF> です。

参考

置換

実装例

@echo off
setlocal enabledelayedexpansion

set PROJECT_HOME=c:\work\
set PWD=%~dp0

for /f "delims=" %%a in (%1) do (
    set line=%%a
    echo !line:%PROJECT_HOME%=%PWD%!

)
c:\work2\copies>type list.txt
c:\work\hoge\hoge.txt
c:\work\hoge\piyo\piyo.txt
c:\work2\copies>create_copies.bat list.txt
c:\work2\copies\hoge\hoge.txt
c:\work2\copies\hoge\piyo\piyo.txt

参考

現在のディレクトリ取得

@echo off
@REM どちらでもOK。
echo %~dp0
echo %~d0%~p0

標準出力に表示されるコマンド結果を変数に代入する

@echo off
@REM 「Hello, World!」をresultに代入する。
for /f "delims=" %%i in ('echo Hello, World!') do set "result=%%i"

robocopy

オプション 効果
/E 再帰コピーする。
/MIR 再帰コピーする。コピー先にあって、コピー元にないファイル、ディレクトリは削除される。コピー元、コピー先の指定を誤ると破滅的な結果を招きます。