Tips Windows バッチ関連まとめ

コマンド説明
cmd /k COMMAND バッチファイル実行後にコマンドプロンプトを閉じない
cd /d %~dp0カレントディレクトリを実行されたバッチのディレクトリにする(Shiftには注意)
pushd %~dp0 現カレントディレクトリをスタックに積む。
カレントディレクトリを実行されたバッチのディレクトリにする(Shiftには注意)
popd スタックからカレントディレクトリをポップ
start. コマンドプロンプトからエクスプローラーを開く (start .)ドットありでもよい
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command Start-Process "実行するバッチファイルパス" -Verb Runas パワーシェルを利用して対象バッチを管理者権限で実行
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command Start-Process """%1""" -Verb Runas パワーシェルを利用して対象バッチを管理者権限で実行
D&Dされたバッチファイルパス 編
set HENSU1=変数です
set HENSU2=2
環境変数
set ARRAY[0]=配列0です
set ARRAY[5]=配列5です
環境変数配列
%0 ~ %9 バッチファイルに渡された引数
%0 にはバッチがコールされた際のコマンド名が正確に入っている 【call xxx→ xxx】【call xxx.bat→xxx.bat】【call c:\xxx.bat→c\xxx.bat】
shift [/n] nで指定した引数を忘れ、以降の引数をすらす。
List の RemoveAt() みたいな感じ
goto :end
:end
ジャンプ
goto :eof バッチファイルから抜けるジャンプ
exit 終了
exit /b 終了するけどプロンプトを閉じない
exit /b 1 終了(エラーコードを返す)
errorlevel 直前に実行されたコマンドの終了コード
@echo off
set input=
:re_start
set /p input="入力してください > "
if "%input%"=="" (
echo 何か入力してください
goto :re_start
)
echo %input%
入力待ち受け(変数に文字列を入力させる)
@echo off
set path=sammple.txt
if not exist %path% (
echo ファイル、ディレクトリが存在しません。
) else (
echo ファイル、ディレクトリが存在しています。
)
ファイル、ディレクトリの存在確認
@echo off
set path=aaa
if not exist %path% (
echo ファイル、ディレクトリが存在しません。
) else (
echo ファイル、ディレクトリが存在しています。
if exist %path%\ (
echo ディレクトリです
) else (
echo ファイルです
)
)
ファイル、ディレクトリの判定
存在していて パスの最後に / をつけても存在していたらフォルダ
set /A FILE_CNT=0
FOR /r . %%I IN (*) DO (
set /A FILE_CNT=FILE_CNT+1
echo filename = %%I%
)
echo ファイル %FILE_CNT% 個
カレントディレクトリ内のファイルリスト、
およびファイル数
隠し属性のものは含まれない
set /A DIR_CNT=0
for /d %%d in (*) do (
set /A DIR_CNT=DIR_CNT+1
echo dirname = %%d
)
echo ディレクトリ %FILE_CNT% 個
カレントディレクトリ内の ディレクトリ リスト、
および ディレクトリ 数
隠し属性のものは含まれない
set /A FILE_CNT=0
FOR /r パス %%I IN (*) DO (
set /A FILE_CNT=FILE_CNT+1
echo filename = %%I%
)
echo ファイル %FILE_CNT% 個
指定ディレクトリ内のファイルリスト、
およびファイル数
隠し属性のものは含まれない
set /A DIR_CNT=0
for /d %%d in (パス\*) do (
set /A DIR_CNT=DIR_CNT+1
echo dirname = %%d
)
echo ディレクトリ %FILE_CNT% 個
カレントディレクトリ内の ディレクトリ リスト、
および ディレクトリ 数
隠し属性のものは含まれない
set /A CNT=0
for /f "tokens=* delims=" %%i in ('dir /b/a *') do (
set /A CNT=CNT+1
echo "%%i%"
)
echo 合計 %CNT% 個でした
カレントディレクトリのファイル、ディレクトリのリスト、
および数
隠し属性のものも含まれる
dir の出力結果から
'dir /b/a-d *'ファイルバージョン
'dir /b/ad *' ディレクトリバージョン