標準出力、標準エラー出力の一括リダイレクト †
1
2
3
4
| -
!
-
!
| <コマンド> > <出力先パス> 2>&1
<コマンド> >> <出力先パス> 2>&1
|
フォルダを再帰的に処理 †
1
2
3
4
5
6
7
|
-
-
|
!
| @echo off
for /R %%i in ( *.dat ) do (
if exist %%i foo.exe "%%i" > %%~ni.txt
)
pause
|
1
2
3
4
5
6
7
8
|
-
-
|
|
!
| @echo off
for /R /D %%i in ( * ) do (
echo %%i
dir /b %%i
)
pause
|
現在時刻の文字列を生成 †
1
2
3
4
5
6
7
8
| -
!
-
!
| set dateString=%date:/=%
echo %dateString%
set timeTemp=%time: =0%
set dateTimeString=%date:/=%%timeTemp:~0,2%%timeTemp:~3,2%%timeTemp:~6,2%
echo %dateTimeString%
|
パス文字列からファイル名を取得 †
for文内もしくは、バッチパラメータとしてなら以下の修飾子が使えるが、通常の変数に対しては使えないため一工夫
%~I - すべての引用句 (") を削除して、%I を展開します。
%~fI - %I を完全修飾パス名に展開します。
%~dI - %I をドライブ文字だけに展開します。
%~pI - %I をパス名だけに展開します。
%~nI - %I をファイル名だけに展開します。
%~xI - %I をファイル拡張子だけに展開します。
%~sI - 展開されたパスは短い名前だけを含みます。
%~aI - %I をファイルの属性に展開します。
%~tI - %I ファイルの日付/時刻に展開します。
%~zI - %I ファイルのサイズに展開します。
%~$PATH:I - PATH 環境変数に指定されているディレクトリを
検索し、最初に見つかった完全修飾名に %I を
展開します。
環境変数名が定義されていない場合、または検索
してもファイルが見つからなかった場合は、この
修飾子を指定すると空の文字列に展開されます。
修飾子を組み合わせて、複合結果を得ることもできます:
%~dpI - %I をドライブ文字とパスだけに展開します。
%~nxI - %I をファイル名と拡張子だけに展開します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-
|
!
-
!
-
!
| @echo off
set inputFileName=test.dat
if not "%1"=="" (
set inputFileName=%1
)
call :GetFileName %inputFileName%
set resultFileName=%RetGetFileName%_result.xml
echo %inputFileName%
echo %resultFileName%
pause
exit 0
:GetFileName
set RetGetFileName=%~n1
exit /b 0
|
エラー判定 †
判定したいexeが、異常を全て標準エラー出力に出してくれる場合のみ利用可能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
-
!
-
!
-
-
|
|
|
-
|
!
!
| @echo off
set fooErrorFile=foo_error.txt
del %fooErrorFile% > NUL 2>&1
echo === foo変換 開始
foo.exe 2> %fooErrorFile%
for %%i in (%2\%fooErrorFile%) do (
if not %%~zi == 0 (
echo error:foo変換に失敗しました。%fooErrorFile%を確認して下さい。
pause
exit 1
) else (
del %2\%fooErrorFile%
)
)
exit 0
|
バッチ自身の位置へ移動 †
ファイルをドラッグアンドドロップして、中で相対パス移動するようなバッチに使う