batファイルでコピー
例 カレントディレクトリ内のCSVファイルを結合データ.csvファイルへまとめる
@echo off
setlocal
rem echo %~dp0
set current_dir=%~dp0
copy /B %current_dir%\*.csv %current_dir%結合データ.csv
※ /B オプション指定でバイナリファイル扱いさせないと、最後に・の行が出来てしまうので注意
batファイルでコピー
例 カレントディレクトリ内のCSVファイルを結合データ.csvファイルへまとめる
@echo off
setlocal
rem echo %~dp0
set current_dir=%~dp0
copy /B %current_dir%\*.csv %current_dir%結合データ.csv
※ /B オプション指定でバイナリファイル扱いさせないと、最後に・の行が出来てしまうので注意
普通に記述すれば、アプリケーションは実行されるが、新しいウィンドウで別に実行させたい時は、startコマンドを使う
この場合は、応答を待つことなく、batファイルは進む
※Callを使うと、応答を待つ
start c:\tools\test.exe
start /wait c:\tools\test.bat としても処理を待つ
また、ウィンドウタイトルを指定しないと実行しない場合がある
rem パワーポイントスライドショーファイルを実行
start “” “c:\tools\test.ppsx”
start “Slide show” “c:\tools\test.ppsx”
タスクスケジューラを使ったりして、共有フォルダとローカルを同期処理する場合に、実行するBATファイルに共有フォルダパスをセットする必要がある
同期用のバッチファイルを実行した共有フォルダの位置をセットして、BATファイルを生成するBATファイルの例
rem ローカル変数定義
setlocal
rem カレントディレクトリ取得
set current_dir=%~dp0
rem 生成するバッチファイル
set FName0=C:\tools\配信.bat
rem リダイレクトで出力 >で新規
echo @echo off > %FName0%
rem リダイレクトで出力 >>で追記
echo set FName1=%current_dir%配信data >> %FName0%
rem 環境変数の記述自体を出力した時は、%を2つ記述
echo set FName2=C:\Users\%%USERNAME%%\Desktop >> %FName0%
※リダイレクトを連続すると処理が端末によっては処理が追い付かなくて、抜けることがあるので、間に待ちを入れる必要がある場合がある
rem 1秒待ち
timeout /t 1 /nobreak > nul
固定のファイルと動的に作成するファイルを結合する
ファイル名順に結合される
test01.bat 動的に作成
test02.bat 固定で準備
test01.batとtest02.batを結合して、test.batファイルを作成
copy test*.bat test.bat /b
※この操作で、複数のCSVファイルやログファイルを一つのファイルにまとめることも可能
※普通のコピーするとファイルの末尾に、ゴミコードの行が出来てしまうので、/bオプションを付けてバイナリモードでコピーする
※COPY /? HELP参照
複数のファイルを追加するときは、受け側に 1 個のファイルを指定し、送り側に複数のファイルを指定します (ワイルドカードを使うか、ファイル 1 + ファイル 2 +ファイル 3 と指定します)。
schtasks /Create /SC DAILY /TN TIMEinfo09 /TR \””C:\test folder\test.bat\”” /ST 09:00 /F
空白を含む実行パスは、\”” で囲む
※schtasks のみ schtasks /Create /? のHELPで確認
※複数実行するときは、間に待ち時間を入れないと、一部処理が遅れて登録されないことがあった
timeout /t 1 /nobreak >nul
例は、フォルダの存在を確認(ファイル名を記述するとファイル確認)
setlocal
set FNameCHK1=%current_dir%\tools
if not exist “%FNameCHK1%” goto
rem 処理を記述
rem 正常終了
exit
rem エラー終了
:non_exit
cls
echo 必要なファイルが見つからないので、実行できません
echo .
pause
5秒待ちの例
timeout /t 5 /nobreak > nul
Or
ping -n 5 localhost > nul rem 正確ではない+1秒が必要?
setlocal
SET STPATH=C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
copy c:\tools\test.lnk “%STPATH%”
rem 空白を含む可能性があるパスは””で囲む
rem VBAなどでは、””で囲むと中身はすべて文字列として認識されるのが普通だが、BATファイルでは、%で囲まれた部分は値が代入される
※BATファイルは特殊な例で、普通は文字連結で組み立てる必要がある
※文字連結も演算子不要で、SET 変数=並べて記述するだけで連結される
rem 文字列にしたい時は、%%を重ねて記述する %%STPATH%%”
バッチファイルを実行したフォルダを取得して、ローカル変数で絶対パス指定する例
setlocal (ローカル変数)
set current_dir=%~dp0(カレントディレクトリをcurrent_dirへセット)
set FName1=%current_dir%\parts\tools\test.exe (値を参照するには%で囲む)
copy %FName1% c:\temp /Y
※空白を含むパスの可能性がある場合は、““で囲む
copy “%FName1%” c:\temp /Y