esprits top Esprit's Style

    -    エンジニアの足つぼ    -

DOSコマンド バッチファイル編

〆 バッチファイルの基礎知識

rem コメント
先頭に「rem」で、その行はコメント扱いとなる。
@echo off
先頭に「@」で、その行のコマンドは画面に表示されない。
echo offで、これ以降、実行するコマンドを画面に表示しない。
@echo on
echo offを解除する(これから実行するコマンドを画面に表示する
echo.
echo. で改行を入れます。echoとドットの間にスペースなしで!
スペースがあると単にドットを出力。
pause
バッチファイルの最後に書いておくと、なにかキーを押さないとコマンドWindowが閉じなくなります
動作ログを確認する場合につかいます。


&
「&」で区切ると、複数のコマンドを連続して実行できる。UNIXの「;」
(   )
「(...)」で括ると、複数のコマンドをひとつの塊として扱える。if, forで利用.
||
「||」で区切ると、前のコマンドが失敗した場合のみ、次のコマンドを実行.
&&
「&&」で区切ると、前のコマンドが成功した場合のみ、次のコマンドを実行.
^
「^」で終わったコマンドは、次の行へ続く。UNIXの「\」に相当.


dir /b > out.txt
「>」リダイレクト。標準出力を画面ではなく、ファイルに出力. UNIXと同じ.
dir /b >> out.txt
「>>」追記リダイレクト。標準出力を画面ではなく、ファイルに追記.UNIXと同じ.
dir /b 2> error.txt
「2>」エラーリダイレクト。コマンドの標準エラーへの出力内容を画面ではなく、ファイルに出力.UNIXと同じ.
dir /b 2>nul
「2>nul」エラーをnullへリダイレクト(エラーを破棄する)。UXIXでいう 2> /dev/nullと一緒。
dir /b 2>&1 log.txt
「2>&1」リダイレクト。コマンドおよびコマンドの標準エラーの出力内容を画面ではなく、ファイルに出力する。UNIXと同じ使い方。


dir /b | test.bat
「 | 」パイプ。コマンドの標準出力の内容を画面に表示せず、次のコマンドの標準入力とする。UNIXと同じ使い方。
for /d /r %%i in (*) do ( ..... )
forを利用する際の変数はバッチファイルでは「 %%i 」となり、コマンドプロンプトでは、「%i」となる。

if /i "%1"=="" goto usege
echo 引数の必要な処理
....
goto end

:usage
echo %0 [file name]
:end
「if /i "%1"=="" goto usage」で引数1がnullだったらusageへ飛べという処理をしています。
「:usage ...」で飛ぶ先を示しています。
rem IEであるページを開き、
rem 呼び出し元Windowを閉じる call "%ProgramFiles%
    \Internet Explorer\iexplore.exe"
      http://www.google.co.jp/
exit
batである処理を実行した後に、呼び出し元のWindowsを閉じる呼び出し方。
Callコマンドは、バッチ ファイル中から別のバッチ ファイルを呼び出します。
net use  \\<コンピュータ名>\<共有フォルダ名>
   /user:<ドメイン名>\<ユーザ名> <パスワード>

(使用例) net use \\filesv01\share
   /user:ad01.local\user01 pass01
ドメイン環境でネットワーク上の共有フォルダなどにアクセスする場合に、AD認証を通します。


〆 ディレクトリ配下のMP3ファイルの拡張子を大文字から小文字へ一括変換するバッチファイルのサンプル

@lower_rename.bat
@echo off
   for /r /d %%i in (*) do cd %%i & ren *.MP3 *.mp3 2>nul
   cd ..  & ren *.MP3 *.mp3 2>nul
:end

〆 履歴を消すバッチファイルのサンプル

最近使ったファイルとMediaPlayerの履歴をバッチファイルから消去します。 テキストファイル(del_recent.bat)を作成し、以下をコピーして使ってください。 他にも不要なファイルをまとめて削除する場合にも応用できます。 フォルダごと削除する場合には、rmdir を用います。 オプションの /q 指定で、確認メッセージを省略することができます。
@del_recent.bat
@echo off
echo %HOMEDRIVE%%HOMEPATH%

echo dir %HOMEDRIVE%%HOMEPATH%\Recent
del /s /q "%HOMEDRIVE%%HOMEPATH%\Recent\*"
echo reg delete ....
reg delete "HKCU\Software\Microsoft\MediaPlayer\Player\RecentFileList" /va /f

:end

〆 FTPアップロードを自動化するバッチファイルのサンプル

テキストファイル(auto_ftp.bat)を作成し、以下をコピーして使ってください。
※ FTPは、データ転送用に別コネクションを張る必要がありますので、もしこの
バッチファイルを実行して、ファイル転送が行われない場合は、Firewallを止めてから
再度実施してください。
※ バッチファイルを実行してもFTPが異常に遅い場合は、
Norton, ZoneAlarmなどの監視ソフトを、一時的に止めて実行してください。
@auto_ftp.bat
@echo off
rem --------------------------------------------------------
rem ユーザ設定
rem --------------------------------------------------------
rem ログインサーバ名
set server=foo.test.com

rem ログインユーザ名
set user=user_name

rem ログインパスワード
set password=passwd

rem ローカルのHTMLディレクトリ
set path_local_html=D:\htdocs

rem ローカルのログ保存ディレクトリ
set path_local_log=D:\log

rem リモートのHTMLディレクトリ
set path_remote_html=/home/user_name/www/

rem ftpスクリプト一時ファイル
set ftplogin=ftp_login.tmp
set ftplogout=ftp_logout.tmp
set ftpupload=ftp_upload.tmp
set ftpbat=ftp_pupdate.tmp

rem --------------------------------------------------------
rem ログ設定
rem --------------------------------------------------------
rem 日付を得る
set datei=%DATE:/=-%
set datef=%datei:-=%

rem 時刻を得る
set timef=%TIME::=%
set timef=%timef:~0,4%

rem ログ保存場所決定
set fpath=%path_local_log%

rem ログ保存ディレクトリ作成
rem mkdir "%fpath%\"

rem 保存場所へ移動
cd "%fpath%\"

rem --------------------------------------------------------
rem FTPコマンド ログイン
rem --------------------------------------------------------
rem ログインユーザ名入力
echo %user%> %ftplogin%

rem ログインパスワード入力
echo %password%>> %ftplogin%

rem バイナリモードへ変更
echo bin>> %ftplogin%

rem Yes/No確認をスキップ
echo prompt>> %ftplogin%

rem --------------------------------------------------------
rem FTPコマンド ログアウト
rem --------------------------------------------------------
rem ログアウト
echo bye> %ftplogout%

rem ftpセッションの終了
echo close>> %ftplogout%

rem --------------------------------------------------------
rem FTPコマンド ファイルアップデート
rem --------------------------------------------------------
rem ここは利用環境に合わせて書き換えてください。

echo lcd %path_local_html%> %ftpupload%
echo cd %path_remote_html%>> %ftpupload%
echo put index.html>> %ftpupload%

echo lcd %path_local_html%\win>> %ftpupload%
echo cd %path_remote_html%/win>> %ftpupload%
echo mput *.html>> %ftpupload%

rem --------------------------------------------------------
rem FTPスクリプト 作成
rem --------------------------------------------------------
echo open %server%>%ftpbat%
type %ftplogin%>>%ftpbat%
type %ftpupload%>>%ftpbat%
type %ftplogout%>>%ftpbat%

rem --------------------------------------------------------
rem FTPスクリプト 実行
rem --------------------------------------------------------
cd %fpath%
ftp -s:%ftpbat%>>%fpath%\%datef%_%timef%.log
rem ログ保存が必要なければ 以下を利用してください
rem ftp -s:%ftpbat%

rem --------------------------------------------------------
rem 後処理
rem --------------------------------------------------------
del %ftplogin%
del %ftplogout%
del %ftpupload%
del %ftpbat%

cd %path_local_html%

rem --------------------------------------------------------
rem Copyright (c) 2005 ESPRITS. All rights reserved.
rem --------------------------------------------------------
:end

〆 HTMLファイルの上部(ヘッダー)と下部(フッター)をまとめて統一する

HTMLファイルの上部と下部を全部同じに設定したい場合ってありますよね?!
例えばフッターに更新日時なんかを入れていてすべてファイル設定するのは
大変ってなとき。
SSI,PHP,JSP,Perlなんかを使っても実現できますがここでは、もっと原始的な方法、
バッチファイルを用いて分割しているファイルを結合してみます。
本サイトはこの方法を使って手動でファイルを結合させてます。
参考までにソースを公開します。
下記、2つのソースはmerge_all.batからmerge.batを呼び出しています。
@merge.bat
@echo off
rem --------------------------------------------------------
if "%1"=="/?" goto usege
if /i "%1"=="/help" goto usege
if /i "%1"=="" goto usege
if not "%1"=="" (if not "%2"=="" (echo combinar!!) else (goto usege))
rem --------------------------------------------------------
set PREFIX=%1
set ACHIVO_CNT=%2

rem --------------------------------------------------------
set WORK_DIR="C:\....\html\htdocs\%PREFIX%"
set HOME_DIR="C:\....\html\htdocs\"
set FILE_TITLE01=title01.txt
set FILE_TITLE02=title02.txt
set FILE_HEADER=header_%PREFIX%.txt
set FILE_NAVI=navi.txt
set FILE_ANAVI=headnavi_%PREFIX%.txt
set FILE_SNAVI=menu_%PREFIX%%%i%.txt
set FILE_FOOTER=footer.txt
set FILE_PRINCIPAL=principal_%PREFIX%%%i%.txt
set FILE_RESULT=%PREFIX%%%i%.html

rem --------------------------------------------------------
set FILE_SNAVI0=menu_%PREFIX%0%%i%.txt
set FILE_PRINCIPAL0=principal_%PREFIX%0%%i%.txt
set FILE_RESULT0=%PREFIX%0%%i%.html

rem --------------------------------------------------------
cd %WORK_DIR%

for /l %%i in (1,1,%FILE_CNT%) do (
    if %%i lss 10 (
        set PREFIX_ZERO=0
        copy ..\%FILE_TITLE01%+.\%FILE_HEADER%+..\%FILE_TITLE02%+
          ..\%FILE_NAVI%+.\%FILE_ANAVI%+.\%FILE_SNAVI0%+
          .\%FILE_PRINCIPAL0%+..\%FILE_FOOTER% .\%FILE_RESULT0%
    ) else  (
        copy ..\%FILE_TITLE01%+.\%FILE_HEADER%+..\%FILE_TITLE02%+
          ..\%FILE_NAVI%+.\%FILE_ANAVI%+.\%FILE_SNAVI%+
          .\%FILE_PRINCIPAL%+..\%FILE_FOOTER% .\%FILE_RESULT%
    )
)

cd %HOME_DIR%

goto end

:usege
echo Help:
echo For marge HTML files.
echo usage:  %0 [number of index] [number of files]
echo For Example:    %0 css 10

rem --------------------------------------------------------
rem Copyright (c) 2005 ESPRITS. All rights reserved.
rem --------------------------------------------------------
:end


@merge_all.bat
@echo off
rem -------------------------------------------------------
set WORK_DIR="C:\....\html\htdocs\"

rem -------------------------------------------------------
cd %WORK_DIR%
call .\merge.bat html 26
call .\merge.bat css 19
call .\merge.bat index 1
call .\merge.bat esp 6

rem --------------------------------------------------------
rem Copyright (c) 2005 ESPRITS. All rights reserved.
rem --------------------------------------------------------
:end
The link to this site is free.   /   Last Updated : 28.May.2012   
Copyright © ESPRITS STYLE. 2003-2007   /   ご意見、感想、苦情は、 こちらへ...
counter