echo ERROR!! 1>&2例えば以下のように書いておけば、バッチの引数がなかった時にエラーメッセージを出してエラーレベルを1にして終了する。
if "%1"=="" ( echo Usage: mybat.bat {param}... 1>&2 exit /b 1 )実行結果
C:\>mybat.bat
Usage: mybat.bat {param}...
C:\>echo %ERRORLEVEL%
1
echo ERROR!! 1>&2例えば以下のように書いておけば、バッチの引数がなかった時にエラーメッセージを出してエラーレベルを1にして終了する。
if "%1"=="" ( echo Usage: mybat.bat {param}... 1>&2 exit /b 1 )実行結果
C:\>mybat.bat
Usage: mybat.bat {param}...
C:\>echo %ERRORLEVEL%
1
[System.GUID]::NewGuid().ToString()
コマンドプロンプト派の人は、PowerShellを起動するまでもなく以下で。
@powershell "[System.GUID]::NewGuid().ToString()"
ほかにはWSHを使ってもできると思うけどコマンドラインから直接できるかどうかは不明。
品目,単価,個数
りんご,98,10
みかん,30,20
キウイ,78,30
このCSVを読み込んで表示するバッチは以下のようになる。
for /f "skip=1 tokens=1,2,3* delims=," %%i in (data.csv) do ( echo 品目=%%i 単価=%%j 個数=%%k )このバッチはCSVファイル
data.csv
を開き各行をを順次for文で処理する。
for文にオプションskip=1
を付け1行目のヘッダ行は無視するようにする。
また、列が3つあるのでtokens=1,2,3*
を指定している。このとき読み込んだ列はそれぞれ変数%%i
, %%j
, %%k
に入る。for文に指定しているのは%%i
だけだが、forの仕様としてi,j,k...のアルファベット順の変数に列の値が自動で入る。
列の区切り文字はdelims=,
オプションで指定する。
このバッチで先のCSVファイルを読み込むと次のような感じになる。
C:\Temp>readcsv.bat
品目=りんご 単価=98 個数=10
品目=みかん 単価=30 個数=20
品目=キウイ 単価=78 個数=30
データ中にカンマが入っているとそこが区切りと認識されるのでこの方法ではうまく動かないが、 簡単にCSVファイルを処理したい場合は十分役立つのではと思う。
for /f "skip=5" %%i in ('dir /b /o-d C:\Temp\*.zip') do ( del C:\Temp\%%i )
dir /b /o-d ~
でファイルを新しい順にリストしそれを順次for文で処理する。
for文に skip=5
を付けているので、リスト先頭から5行、つまり最新のzipファイル5つは無視し、後は del
で消すという意味になる。%%i
にはファイル名のみが入りパスは入らないので、del
するときに改めて指定する必要があることに注意。
xcopy /i /s /e /h srcdir destdir
robocopy /s /e srcdir destdir
robocopy /mir srcdir destdir