バッチファイルでよく使うやつ


俺メモ

フォルダ階層ごとコピー

rem 中身があるフォルダのみ
xcopy /t "コピー元フォルダ" "コピー先フォルダ"
rem 空フォルダのみ
xcopy /e "コピー元フォルダ" "コピー先フォルダ"
rem 両方
xcopy /e /t "コピー元フォルダ" "コピー先フォルダ"
rem 特定の拡張子のみコピー
for /f %a in (".\コピー元フォルダ\*.vcproj") do (xcopy /t "%a" ".\コピー先フォルダ")

空フォルダのみ削除

for /f %a in ('dir /s /b /ad | sort /r ) do (rm "%a")

標準の変数一覧

%CD%                    - 現在のディレクトリ文字列に展開します。
%DATE%                  - DATE コマンドと同じフォーマットで現在の日付に展開します。
%TIME%                  - TIME コマンドと同じフォーマットで現在の時刻に展開します。
%RANDOM%                - 0 から 32767 の間の任意の 10 進数に展開します。
%ERRORLEVEL%            - 現在の ERRORLEVEL の値に展開します。
%CMDEXTVERSION%         - 現在のコマンド プロセッサ拡張機能のバージョン番号に展開します。
%CMDCMDLINE%            - コマンド プロセッサを起動したオリジナル コマンド ラインに展開します。
%HIGHESTNUMANODENUMBER% - このコンピューター上の最大の NUMA ノード番号に展開します。

ファイルチェック、フォルダチェック

if exist C:\local\* (
    echo ディレクトリが存在します
)
(ローカルパス、UNCパス、ネットワークドライブパスなんでも行けるらしい)

if not exist "%フォルダパス%\*" (
    if exist "%フォルダパス%" (
        echo ファイルが存在します。
    )
)

変数の置換

set STR=ababababab
echo %STR:a=c%
cbcbcbcbcb

rem 日付の形式変更
set str=%target:~開始位置,文字数%
%date:~0,4%%date:~5,2%%date:~8,2%
yyyy/mm/mm→yyyymmddになるよ

標準出力をぶち込む(最後の一行だけ)

for /f "delims=" %a in ('%CMD%') do (set VAL=%a)

文字コード変換

rem SHIFT-JISで定義
set SHIFT-JIS=えすじす
rem UTF-8に変更
chcp 65001
rem UTF-8でリダイレクト
echo %SHIFT-JIS%>UTF-8.txt

リダイレクト

rem エラー出力のみ
コマンド 2> ファイル名
rem 標準出力とエラー出力を両方
コマンド > ファイル名 2>&1

引数全部参照やつ

 %*
何個入れられるんだろう。

行数カウント

rem Linuxならwc -l
コマンド | find /c /v ""

GREP相当

コマンド | find "文字列"
コマンド | findstr /r /c:"正規表現"

検索

dir /s/b C*\*hoge*

参考したやつ