アレコレなメモ

なぜかバッチでいろんな処理をする必要性が出てきたので作業メモ。
 
 

ネットワークドライブに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なんて書いたの何年ぶりだろう・・・