@rem = 'バッチ部分(perl にとってはダミーの配列…メモリの無駄遣いだけど) @echo off goto SKIP ---------------------------------------------------------------------- # ここは『ダミー配列』の文字列なので『シングルクオーテーション』は # 使えない $NAME = "ecalc.bat"; $VERSION = "1.13"; $UPDATE = "2010/08/30 Mon 10:16 JST"; # "yyyy/mo/dd Day hh:mi JST" $AUTHOR = "pablo foussin(japan)"; # (c) pablo foussin $DESCRIPTION = "Droplet of ecalc.pl for Windows"; $URL = "http://blue.zero.jp/foussin/arc_utl/ecalc_bat/"; $HTML = "http://blue.zero.jp/foussin/amateur_style/"; ●今回のバージョンアップ(ver1.00)は: ○ 余計な機能…コマンドライン・スイッチ(-r オプション)の廃止。 ○ Windows XP 以降に対応。  上記を念頭に置いて改造した。前回の ver0.20 から、一気に ver1.00 に昇格 させた。これをもって正規バージョンとする。 ●今回のバージョンアップ(ver1.10, ver1.11)は: ○ *.tem ファイルを読み込む場合、計算はせず、複製を作ってエディタで 開くだけとする(初期設定3 の追加)。要するに .tem をテンプレートの 雛形ファイルと断定する。複製ファイルの名前は… 『〜〜.tem』→『〜〜_2010_03_04.txt』のように命名される。この機能 を実現するため、部分的に Perl を使っている。 当初、.tmp .temp を雛形ファイル名にするつもりだったが、一時ファイ ル(テンポラリファイル)と紛らわしいので .tem にした。  上記を念頭に置いて改造した。このバッチをいじるのは、いつも 3月…確定申 告を ecalc.pl でやってるので…。 ■最近の更新履歴: Fri 2009.03.06 03:30 (v1.00) -r オプションの廃止 Thu 2010/03/04 05:39 (v1.10) *.tem を雛形ファイルと解釈 Thu 2010/03/11 06:52 (v1.11) コメントの加筆のみ Sun 2010/08/08 21:27 (v1.12) コメントの加筆のみ 2010/08/30 Mon 10:16 (v1.13) バグフィクス ■昔の更新履歴: 2001.02.09 Fri ver0.00 (初版『ecalc.jpl(jperl用)』のドロップレット) 2001.02.10 Sat ver0.01 (-r オプション対応) 2001.02.11 Sun ver0.02 (バグフィクス) 2004.04.23 Fri ver0.03 (jperl.exe, perl.exe の両方に対応) 2005.01.09 Sun ver0.10 (ecalc.pl, ecalc.jpl の両方に対応) 2008.07.03 Thu ver0.20 (ecalc.pl 専用、WinXP、Perl5.8 対応) ---------------------------------------------------------------------- :SKIP rem [ユーザー設定:] rem ecalc.pl のフルパスを拡張子付きのフルネームで指定する if not "個人設定"=="" set ecalcpl=C:\usr\bin\ecalc.pl rem テキストを閲覧するエディタを指定する。デフォルトはメモ帳(notepad) if not "個人設定"=="" set 閲覧=notepad rem ↓最近の作者(foussin)の設定例 rem if not "個人設定"=="" set 閲覧=C:\tools\Mery\Mery.exe rem 引数解析: rem パラメータの有無のチェック(%1 が無い場合、当然 %2〜%9 も存在しない) rem 第1パラメータが指定されていれば、とりあえず goto INIT if not "%1"=="" goto INIT rem 初期設定1: rem ダブルクリックすると自分自身(ecalc.bat)をメモ帳やエディタで表示する。 for %%f in (ecalc ECALC) do if "%%f"=="%0" goto USAGE if not exist %0 goto USAGE if exist %0 start %閲覧% %0 goto END :INIT rem 初期設定2: 外部コマンドの有無をチェック. rem (perl.exe と ecalc.pl が必要) rem Perl exist ? for %%f in (%path% .) do if exist %%f\perl.exe set perlexe=%%f\perl.exe if exist %perlexe% goto NEXT set 不足=perl.exe :NEXT rem 初期設定3: Perlスクリプトの実行(入力ファイルが *.tem かどうかの判定) rem ecalc.bat を Perl スクリプトとして実行 rem .tem は小文字のみにマッチする(.TEM にはマッチしない) perl -S %0 %1 if exist ec_dummy.bat goto NEXT2 goto SKIP2 :NEXT2 call ec_dummy.bat del ec_dummy.bat goto END @rem '; # ダミー配列ここまで # ----------------------------------------↓バッチはこの中をスキップする @rem=(); # ダミーの配列をクリア $new_name = $tmp_name = $ARGV[0]; # 入力ファイル(バッチの%1) if ($tmp_name =~ /\.tem$/) { ($dd, $mm, $yy) = (localtime time)[3,4,5]; # 今日の年月日 ++$mm; $yy += 1900; $dd = sprintf("%02d", $dd); $mm = sprintf("%02d", $mm); $ymd = "_" . $yy . "_" . $mm . "_" . $dd . ".txt"; $new_name =~ s/\.tem//; $new_name .= $ymd; # 複製(copy) open(IN, "<$tmp_name"); open(OUT,">$new_name"); while () { print OUT $_; } close(IN), close(OUT); # 実行バッチをカレントディレクトリに一時生成(実行後に削除) open(OUT, ">ec_dummy.bat"); print OUT 'start %閲覧% ', "$new_name\n"; close(OUT); } __END__ # ----------------------------------------↑バッチはこの中をスキップする :SKIP2 rem ecalc.pl exist ?(検索を3行に分けているのは無駄なアクセスを減らすため) if exist %ecalcpl% goto MAINLOOP for %%f in (%path% .) do if exist %%f\ecalc.pl set ecalcpl=%%f\ecalc.pl if exist %ecalcpl% goto MAINLOOP set 不足=ecalc.pl %不足% rem error message echo Error!! *** Command file not found "%不足%" echo ecalc.batを実行するには ecalc.pl, perl.exe が必要です。 echo %不足% が見つかりませんでした。バッチを中止します。 echo  goto END rem ecalc.pl の実行と出力ファイルの閲覧(複数ファイルの一括処理が可能) :MAINLOOP if "%1"=="" goto LOOPOUT @echo on %perlexe% %ecalcpl% <%1 >%1_res.txt @echo off if not "%結果%"=="" set 結果=%結果% %1_res.txt if "%結果%"=="" set 結果=%1_res.txt shift goto MAINLOOP :LOOPOUT if "%結果%"=="" goto USAGE echo. rem 計算結果をエディタで表示する for %%f in (%結果%) do if exist %%f start %閲覧% %%f goto END :USAGE echo USAGE:ecalc path\inputfile [path\inputfile ...] echo  echo 最低 1つは入力ファイル(path\inputfile)を指定してください。 :END echo. set ecalcpl= set perlexe= set 閲覧= set 不足= set 結果=