アレコレなメモ
なぜかバッチでいろんな処理をする必要性が出てきたので作業メモ。
ネットワークドライブにUserとPasswdを必須とするバッチ
埋め込む方法はよく見かけるけど、入力しなくてはならない奴は知らなかった。
set /p user_name="Input User Name :" net use Y: \\hoge.domain.co.jp\piyo /user:%user_name% *
コマンドプロンプトで「Input User Name :」が表示されて、パスワードの入力も求められる。
コマンドで出力したテキストファイルの文字コードとかを変換するバッチ
Windowsの標準機能では実現出来なかった。
NonSoft文字コード判定/変換ツール(VB6のソース付)を利用する。
dir encode_video /b >videolist.txt ::Shift-JISをUTF8でLFでBOMなし NonCode\Code2Code\Code2Code.exe ../../videolist.txt -LO -ISJIS -OUTF8 -LF
どうしてもUTF8でLFに変換しないと後々大変なのでこんな形になった。ってか、Code2Code便利だね。
サービスを監視したい。
サービスやプロセスを監視する②を参考にして検証してみるが、どうも「%ERRORLEVEL%」が取得出来ない。
tasklist | find /i %process_name% echo %ERRORLEVEL% IF %ERRORLEVEL%==0 (
暫く悩んだ。やっちまっていた。
tasklist | find /i %process_name% echo %ERRORLEVEL% ←こいつがいけない。 IF %ERRORLEVEL%==0 (
悩んだ割には自分が愚かなのが理解出来た。
上記の監視は1回しかできない。
なんとかしてプロセスが終了するのを監視したい。
たどり着いたのがコレ
set process_name="Skype.exe" :LOOP tasklist | find /i %process_name% IF %ERRORLEVEL%==0 ( ping 1.1.1.1 -w 3000 -n 1 goto LOOP ) pause :EXIT
しかし謎のIPにPingをずーっとやっているとN/W管理者から怒られる可能性が高い。
そこで「localhost」に変更してみたが、間隔設定なんてどっかに行ってしまうらしい。こまったものだ。
そこでぐぐるw
set process_name="Skype.exe" echo WScript.Sleep(3000)>sleep.vbs :LOOP tasklist | find /i %process_name% IF %ERRORLEVEL%==0 ( cscript sleep.vbs goto LOOP ) del sleep.vbs :EXIT
うん、スマートになったような気がする。
参考にした
http://q.hatena.ne.jp/1124846536
http://questionbox.jp.msn.com/qa3286115.html
入力した値に対して「宜しいですか(Y/N)」を表示
入力した値を際ひょじしてY/Nを求める。
echo "ファイルの日付を入力してください" ::ファイルの日付設定 :DATEINPUT Set /p date_name="Input Date(yyyymmdd) :" :YESNOMSG echo %date_name% echo "宜しいですか?(Y/N)" Set /p c= if "%c%"=="Y" GOTO CONTINUE if "%c%"=="y" GOTO CONTINUE if "%c%"=="N" GOTO DATEINPUT if "%c%"=="n" GOTO DATEINPUT GOTO YESNOMSG :CONTINUE echo %date_name%
gotoなんて書いたの何年ぶりだろう・・・