3.Perl,VB,Javaスクリプト,BAT(CONTENT)
このページの最終行に移動指定桁数 出力(Perl Script)
 #6桁目から251バイト出力(桁数は0から始まります)
              while(<>){
               chop if( /\n$/ );
               print substr($_,5,251);
               print "\n";
              }
            
固定長 出力(Perl Script)
 
              #2048バイトの固定長レコード出力
              while(<>){
               chop if( /\n$/ );
               printf "%-2048s",$_;
               print "\n";
              }
            
accessの自動実行(java Script)
 var obj =
              WScript.CreateObject("Access.Application.9");//access2000の場合
              obj.OpenCurrentDatabase("C:\\test\\db1.mdb");
              obj.Visible = -1;
              obj.DoCmd.RunMacro("M_auto更新") //マクロ名を入れてください
              WScript.Sleep (200);
              obj.CloseCurrentDatabase();
              WScript.Sleep (200);
              obj.Quit();
              WScript.Quit();
              ・Access = Access.Application//複数インストールされているときは最後に動いたもの
              ・Access2000 = Access.Application.9
              ・Access97 = Access.Application.8
            
固定長からCSV(Perl Script)
 # 固定長からCSV
              @Len = (5,3,2,3);
              #項目の数
              $Item = $#Len + 1;
              while(<>){
               chop if( /\n$/ );
               $j = 0;
               for( $i = 0; $i < $Item; $i++ ){
               $Data = substr($_,$j,$Len[$i]);
               $j = $j + $Len[$i];
              #文字列の最後の空白を取り除く
               $Data =~ s/ +$//g;
               $Data =~ s/ +$//g;
              #カンマの場合(データに内にカンマがあった場合は削除しています)
               $Data =~ s/,//g;
               print $Data;
               print "," if( $i < $Item - 1);
              #tabの場合
              # print $Data;
              # print "\x09" if( $i < $Item - 1);
              }
               print "\n";
              }
            
NULL(\x00)文字のチェック(Perl Script)
 #NULL(\x00)文字のチェック
              while(<>){
               if(/\x00/){
                print $_;
               }
              }
            
コマンドラインのパラメータからPerlを実行(Perl Script)
 rem カンマをTABに変換
              jperl -pe 'tr/,/\x09/;' %1
            
パラメータをwindowsの画面より入力してバッチを起動(vb Script)
 Dim var
              Dim bat
              Dim batname
              batname = "test.bat"
              var = InputBox("何月度ですか? ex. 200403")
              Set Ws = WScript.CreateObject("Wscript.Shell")
              MsgBox var & "を処理します"
              bat = batname & " " & var
              Ws.Run bat
            
コマンドパラメータの指定のサンプル 指定行出力(Perl Script)
 #指定行数出力(jperl xxx.pl -100 input.txt > output.txt)
              $lineno = 1;
              while( $ARGV[0] =~ /^-([0-9]+)/ ){
               $lineno = $1;
               shift;
              }
              while(<>){
               if($. eq $lineno){
                print $_;
               }
              }
            
コマンドパラメータの指定のサンプル option表示(Perl Script)
 #オプション表示、ファイル内容出力(jperl yyy.pl -a input.txt > output.txt)
              $option ="";
              while( $ARGV[0] =~ /^-([a-zA-Z])/ ){
               $option = $1;
               shift;
              }
              print "option = ",$option,"\n";
              while(<>){
               print $_;
              }
            
前ゼロ取る、後ろスペース取る(Perl Script)
 s/^0+//g; #前ゼロ取る
              s/^ +//g; #前スペース取る
              s/ +$//g; #後ろスペース取る
              s/ +$//g; #後ろ全角スペース取る
              
              s/[,"~]//g; #記号を取る
              # s/[!#$%&'()=~|+}{`_,<>":. \x2f]//g;
              s/[\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2e\x2f]//g;
              s/[\x3a\x3b\x3c\x3d\x3e\x3f\x7a\x7b\x7c\x7d\x7e\x7f\x20]//g;
            
現在日時を得る(Perl Script)
 ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst) =
              localtime();
              $mon = sprintf("%02d",($mon + 1));
              $mday = sprintf("%02d",$mday);
              $hour = sprintf("%02d",$hour);
              $min = sprintf("%02d",$min);
              $sec = sprintf("%02d",$sec);
              
              $otime = "20".substr($year,1,2).$mon.$mday.$hour.$min.$sec;
            
「数字と数字の間の「の」を「-」にする(Perl Script)
 #No100の12 -> No100-12
              while(<>){
               s/No\d+の\d+/&no2hai($&)/ge;
               print $_;
              }
              sub no2hai{
               local($_) = @_;
               tr/の/-/;
               $_;
              }
            
 # kensu.pl 指定した文字列が入っている行数を求める
                $cnt = 0;
                $taisyo = "今日";
                while(<>){
                 $cnt++ if( /$taisyo/ );
                }
                printf " cnt = %7ld 件\n",$cnt;
                
              
tab(csv)形式の項目の並び替え(Perl Script)
 1 2 3
                -------
                a b c
                 ↓  (3,2,1)
                -------
                c b a
                
                # narabi.pl tab形式の項目の並び替え
                # 各項目の種別(出力する順番)
                @kubun = (3,2,1);
                while(<>){
                #改行を消す
                 chop if(/\n$/);
                #tab形式の一行を項目に分解する
                 @item = split(/\x09/, $_); #csvのとき @item = split(/,/, $_);
                 for( $j = 0; $j <= $#item; $j++ ){
                  printf $item[$kubun[$j] - 1];
                  print "\x09" if( $j < $#item); #csvのとき print "," if( $amp;j
                < $amp;#item);
                 }
                 print "\n";
                }
              
tab(csv)形式の指定列のみ出力(Perl Script)
 1 2 3
                -------
                a b c
                 ↓  (1,3)
                -------
                a c
                
                # nukitori.pl tab形式の指定列のみ出力
                # 各項目の種別(1:出力する,0:しない)
                @kubun = (1,0,1);
                # 区分ごとに処理してCSV出力
                while(<>){
                #改行を消す
                 chop if(/\n$/);
                #tab形式の一行を項目に分解する
                 @item = split(/\x09/, $_); #csvのとき @item = split(/,/, $_);
                 for( $j = 0; $j <= $#item; $j++ ){
                  if($kubun[$j] == 1){
                   printf $item[$j];
                   print "\x09" if( $j < $#item ); #csvのとき print "," if(
                $amp;j < $amp;#item );
                  }
                 }
                 print "\n";
                }
              
カレントディレクトリのファイルでbat作成(Perl Script)
 # カレントディレクトリのファイルでbat作成
                #dir取得
                opendir(DIR,".");
                @file = readdir(DIR);
                foreach $filename (@file){
                 if(substr($filename,0,1) ne "."){
                #c:\test2へコピーするとき
                 print ("copy \"",$filename,"\"
                ","\"c:\\test2\\",$filename,"\"\n");
                #リネームするとき[.bk]を付加
                #print ("ren \"",$filename,"\" \"",$filename,".bk\"","\n");
                 }
                }
                closedir(DIR);
                
              
ホームページを巡回して自動印刷(vb script)
 urlの一覧からホームページを巡回して自動印刷を行うサンプルです。
                
                1.urldata.txtにurlを記入します
                
                例 [urldata.txt]
                http://hp.vector.co.jp/authors/VA036757/
                file://c:\test\a.txt
                
                2.autoprt.vbsを実行します。
                
                
                *autoprt.vbsを修正することで
                ・巡回ファイルはurldata.txt以外も指定できます。
                ・表示している秒数を変更できます。
                ・download
              
IEのダウンロード先を変更(vb Script)
 
                //
                *************************************************************************
                // IEのダウンロード先の変更
                //
                *************************************************************************
                var downdir = "c:\\tes";
                var WShell = WScript.CreateObject("WScript.Shell");
                WShell.RegWrite("HKCU\\Software\\Microsoft\\Internet
                Explorer\\Download Directory",downdir);
                //HKCUは、HKEY_CURRENT_USERの略称
                WScript.Sleep (1000);
                var NNDir = WShell.RegRead("HKCU\\Software\\Microsoft\\Internet
                Explorer\\Download Directory");
                WScript.Echo(NNDir);
                
                *レジストリを変更しますので、注意してください
              
バージョン違いのAccessがインストールされている環境で実行するバージョンの変更(vb Script)
 
                //
                *************************************************************************
                // Accessの実行するバージョンの変更
                //
                *************************************************************************
                var WShell = WScript.CreateObject("WScript.Shell");
WShell.RegWrite("HKEY_CLASSES_ROOT\\.mdb\\","Access.Application.9");
                Msg = WShell.RegRead("HKEY_CLASSES_ROOT\\.mdb\\");
                WScript.Echo(Msg);
                
                ・Access2000 = Access.Application.9
                ・Access97 = Access.Application.8
                *レジストリを変更しますので、注意してください
              
excelの日付のシリアル値をyyyy/mm/ddに変換(perl script)
 Xls2csvsでexcelからcsvにすると、書式が取れた値になります。金額のカンマも
                取れますが
                yyyy/mm/ddの日付はシリアル値(1900/01/01からの経過日数)になります。
                これをyyyy/mm/ddの形式に変換するサンプルです。
                
                perlではlocaltime()関数があり、これは1970/01/01からの秒数になります。
                そこで、excelのシリアル値を(1900/01/01から1970/01/01までの経過時間)で引き
                年月日を表示します。
                
                2005/05/21 , 東京
                2005/05/22 , 広島
                
                
                while(<>){
                #改行を消す
                 chop if(/\n$/);
                #csv形式の一行を項目に分解する
                 @item = split(/,/, $_);
                # 1970/01/01 - 1900/01/01 + 1 = 25569日
                # 経過日数を秒数に変換
                 $year_sa = ($item[0] - 25569) * 24 * 60 * 60;
                 ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
                localtime($year_sa);
                 $yyyymmdd = sprintf("%04d/%02d/%02d", $year + 1900, $mon +1,
                $mday);
                 print $yyyymmdd.",".$item[1]."\n";
                }
                
              
縦一列のデータを横に割り振る(Perl Script)
 1
                2
                3
                4
                5
                ↓
                1,2
                3,4
                5
                
                #2列に割り振る
                $COL = 2;
                $j = 0;
                while(<>){
                 $j++;
                 chop if( /\n$/ );
                 print $_;
                 if($j eq $COL){
                  print "\n";
                 $j = 0;
                 }else{
                  print ",";
                 }
                }
              
ファイルをソートする[件数が少ないとき](Perl Script)
 4
                1
                3
                2
                ↓
                1
                2
                3
                4
                
                #行をソートする
                while (<>) {
                 push (@data, $_);
                }
                
                foreach $dat (sort @data) {
                 print $dat;
                }
              
ハッシュについて(Perl Script)
 
                #血液型でソートする
                #ハッシュ
                @Name = ('早紀', '沙紀', '佐紀', '沙希');
                %Blood = ('早紀' => 'B','沙紀' => 'A','佐紀' => 'O','沙希'
                => 'AB' );
                #次のようにも書ける
                #%Blood = ('早紀','B','沙紀','A','佐紀','O','沙希','AB');
                @SortedName =sort {$Blood{$a} cmp $Blood{$b}} @Name;
                print "ハッシュ(血液型)でソート\n";
                print "早紀(B) 沙紀(A) 佐紀(O) 沙希(AB)\n";
                print join(', ', @SortedName);
                print "\n";
              
SORTについて(Perl Script)
 @SortList = (1,2,3,4,5,6,7,8,9,10,11);
                print "SORT前\n";
                $, = ", ";
                print @SortList;
                print "\n";
                
                #文字列で昇順
                @SortedList = sort @SortList;
                $, = ", ";
                print "文字列で昇順\n";
                print @SortedList;
                print "\n";
                
                #文字列で昇順(省略しないとき)
                @SortedList = sort { $a cmp $b } @SortList;
                #他の出力の仕方
                print "文字列で昇順(省略しないとき)\n";
                print join(', ', @SortedList);
                print "\n";
                
                #文字列で降順
                @SortedList = sort { $b cmp $a } @SortList;
                print "文字列で降順\n";
                print join(', ', @SortedList);
                print "\n";
                
                #文字列で降順(Reverse使用)
                @SortedList = reverse sort { $a cmp $b } @SortList;
                print "文字列で降順(Reverse使用)\n";
                print join(', ', @SortedList);
                print "\n";
                
                #数値で昇順
                @SortedList = sort { $a <=> $b } @SortList;
                print "数値で昇順\n";
                print join(', ', @SortedList);
                print "\n";
                
                #数値で降順
                @SortedList = sort { $b <=> $a } @SortList;
                print "数値で降順\n";
                print join(', ', @SortedList);
                print "\n";
                
                #数値で昇順(サブルーチン使用)
                @SortedList = sort byNumber @SortList;
                print "数値で昇順(サブルーチン使用)\n";
                print join(', ', @SortedList);
                print "\n";
                
                sub byNumber{
                 $a <=> $b;
                }
                
                #数値で昇順(サブルーチン内省略しない)
                @SortedList = sort byNumber2 @SortList;
                print "数値で昇順(サブルーチン内省略しない)\n";
                print join(', ', @SortedList);
                print "\n";
                
                sub byNumber2{
                 if ($a < $b){
                  return -1;
                 }elsif ($a == $b){
                  return 0;
                 }elsif ($a > $b){
                  return 1;
                 }
                }
                
                #文字列で昇順(サブルーチン内省略しない)
                @SortedList = sort byNumber3 @SortList;
                print "文字列で昇順(サブルーチン内省略しない)\n";
                print join(', ', @SortedList);
                print "\n";
                
                sub byNumber3{
                 if ($a lt $b){
                 return -1;
                 }elsif ($a eq $b){
                  return 0;
                 }elsif ($a gt $b){
                  return 1;
                 }
                }
                
                #好きなように(偶数奇数に分ける)
                @SortedList = sort byNumber4 @SortList;
                print "好きなように(偶数奇数に分ける)\n";
                print join(', ', @SortedList);
                print "\n";
                
                sub byNumber4{
                 if ($a%2 < $b%2){
                  return -1;
                 }elsif ($a%2 == $b%2){
                  return 0;
                 }elsif ($a%2 > $b%2){
                  return 1;
                 }
                }
                
              
1行だけ読み込む(Perl Script)
 #1行だけ読み込む
                $_ = <ARGV>;
                print $_;
                
              
whie(<>){}を省略しないで書いてみると(Perl Script)
 while(<>)
                 print $_;
                }
                ↓
                while($_ = <>)
                 print $_;
                }
                ↓
                whle($_ = <ARGV>)
                 print $_;
                }
                ↓
                #引数がないときはSTDINをOPENさせるためにファイル名に「-」を使用
                #ちなみにSTDOUTのOPENは「>-」
                unshift(@ARGV, '-') if $#ARGV < 0;
                #引数が複数ある場合に順番に読んでいく
                #shift(@ARGV)はshiftだけの省略可
                while ($ARGV = shift(@ARGV)) {
                 open(ARGV, $ARGV);
                 while ($_ = <ARGV>) {
                  print $_;
                 }
                }
                
              
複数のexcelファイルを読み一つにまとめバッチファイルを流す例(vbs)
 for i = 0 to WScript.Arguments.Count - 1
                nextのループで複数ファイルを読みます
                csvに保存するのはWorksheets(1).SaveAs OutPath, 6 で行います
                appendするのは、openTextFile("filename", 8, False)で行います
                batファイルを実行するのはWs.Run batnameで行います
                
                詳しくはサンプルを参考にしてください
                ・download
              
excelファイルを読みCSVにする(vbs)
 OPENメソッドとSAVEASメソッドを使用します。
                
                objXL.Workbooks.Open Path,,True
                objXL.Worksheets(1).SaveAs OutPath,6
                ・download
              
csvファイルを読みexcelにする(vbs)
 OPENメソッドとSAVEASメソッドを使用します。
                vbスクリプトの中で、列幅、罫線、フォントなどを整えて
                excelで保存することも可能です
                
                objXL.Workbooks.Open Path,,,,2 'csvで読込
                objXL.ActiveWorkbook.SaveAs OutPath,-4143 'excelで出力
                ・download
              
ファイルを連結するバッチファイル
 
                DEL c:\dataall.dat
                FOR %%1 IN (c:\abc\*.dat) DO TYPE %%1 >> c:\datall.dat
              
バッチファイルでのサブルーチン
 
                CALL :SUB_R A1 A2
                rem
                ****************************************************************:
                rem サブルーチン
                rem
                ****************************************************************:
                :SUB_R
                setlocal
                echo %1 %2
                endlocal
                exit /b
                
                ※サブルーチンを呼びだすときに、「:」を先頭につけること
                 exitに「/b」をつけること
                 setlocal ,endlocalで挟むことがポイントです。
                
              
メールを受信し添付ファイルをメールアドレスのフォルダに振り分ける(vbs)
 BASP21を
                利用し、メールを受信し添付ファイルをメールアドレスのフォルダに振り分けます。
                タスクに組み込めば自動化も可能です。
                
                ・download
                
                ※ご使用にあたっては、BASP21をインストール後
                メールを受信するフォルダ、メールアドレス等の設定をしてください。
                また、サーバにあるメールを削除するには、SAVEALLDに変更して使用してください
              
富士通汎用機で出力したリストをPDFにするperlスクリプトとバッチファイル
 リストの1桁目には改行、改ページ等の制御情報が入っています。
                これを考慮してテキストを作成した後、txt2pdfs.exeでpdfにします。
                
                jperl list2pdf.pl sample.out > sample.txt
                txt2pdfs -sA4L -fg9 -ml20 -mp0 sample.txt sample.pdf
                
                [list2pdf.pl]
                $LineMax = 66;
                %kaigyo = (' ',1,'0',2,'-',3);
                #ライン数をクリア
                $lineNo = 0;
                
                #66行でページを分割
                while (<>) {
                 chop if( /\n$/ );
                 if(substr($_,0,1) eq '1'){
                  if($lineNo ne 0){
                  for ($xx = 1; $xx <= $LineMax - $lineNo; $xx++) {
                    print "\n";
                  }
                 }
                 $lineNo = 0;
                 }else{
                  for ($xx = 1; $xx <= $kaigyo{substr($_,0,1)}-1; $xx++) {
                   $lineNo++;
                   print "\n";
                  }
                 }
                 $lineNo++;
                }
                
              
バッチファイルのパラメータ修飾子
 バッチファイルのパラメータは%1~%9まで使用可能(%0は実行したバッチファイル名)
                %1には1つめのパラメータが入ります
                (例) c:\>test.bat a b c d e f g h i
                [test.bat]
                echo %1 %9
                [結果]
                a i
                
                %1の代わりに下記修飾子を使用することも可能
                例は echo (修飾子)で表現します。
                
                修飾子 「説明」
                【%~1】 「%1を展開して、二重引用符 で囲まれている場合は削除」
                (例) test "abc def" → abc def
                
                【%~f1】 「%1を完全修飾パス名に展開(実行したフォルダが付きます)」
                (例) test "abc" → c:\folder\abc
                
                【%~d1】 「%1をドライブ文字に展開(実行したドライブになります)」
                (例) test "abc" → c:
                
                【%~p1】 「%1をパスに展開(パスのみにになります)」
                (例) test "abc" → \foler\
                
                【%~n1】 「%1をファイル名に展開(拡張子を抜いたファイル名)」
                (例) test abc.bat → abc
                
                【%~x1】 「%1をファイル拡張子に展開(拡張子のみになります)」
                (例) test abc.bat → bat
                
                【%~s1】 「%1をショートネームパスに展開」
                (例) C:\Program Files>test abc → C:\PROGRA~1\abc
                
                【%~a1】 「%1をファイル属性に展開」
                (例) test abc.bat → --a------
                
                【%~t1】 「%1をファイルの日時に展開」
                (例) test abc.bat → 2008/02/29 00:25
                
                【%~z1】 「%1をファイルサイズに展開」
                (例) test abc.bat → 412
                
                パラメータ2のときは「%~n2」のように使います
                修飾子を続けて書くこともできます「%~dpnx1」
                
                よく使用しているのが、拡張子を除いたファイル名を指定してバッチファイルを流す場合です
                csv2fixs -f f.ini %~n1.csv %~n1.txt
              
コマンドプロンプトからテキストファイル作成
 今でもたまに使いますが
                copy con abc.txt
              
カレントディレクトリに存在する10以上のファイルを削除・コピー
 エクスプローラ等からドラッグアンドドロップでも使用できます。
                
                【削除用】
                [dlt.bat]
                :dlt
                if "%1"=="" goto end
                if exist %1 del %1 /p
                shift
                goto dlt
                :end
                
                【コピー用】
                [cpy.bat]
                set /p filename="出力ファイル名を入れてください="
                copy NUL %filename%
                :cpy
                if "%1"=="" goto end
                if exist %1 copy %filename% + %1 %filename%
                shift
                goto cpy
                :end
                pause
                環境変数に出力ファイルを設定してから、まず空のファイルを作成後
                コピーをしています。(出力ファイルはドライブパスを指定してください)
              
fix2csvsのパラメータファイルからJHT用のパラメータファイルを作成する(Perl Script)
 
                #fix2csvs_p.ini
                X,3,店コード
                X,10,品番
                9,5,数量
                 ↓
                #jhtc_p.ini
                #店コード,品番,数量
                "XXX","XXXXXXXXXX","99999"
                
                #tateyoko.pl
                #fix2csvsの形式からjhtの形式に変換する
                $t = "#";
                $d = "";
                while (<>) {
                 if(substr($_,0,1) ne "#"){
                  chop if( /\n$/ );
                  @item = split(/,/, $_);
                  $w = $item[0] x $item[1];
                  $t = $t."\x22".$item[2]."\x22"."\x2c";
                  $d = $d."\x22".$w."\x22"."\x2c";
                 }
                }
                $t =~ s/\x2c+$//g;
                $d =~ s/\x2c+$//g;
                print $t."\n";
                print $d."\n";
                jhtは富士通の汎用機で使われているJEFコードとシフトJISコードを双方向に変換するツールです
              
別名のファイル作るバッチファイル
 エクスプローラ等からドラッグアンドドロップで使用します
                ファイル名の後ろに「a」を付加します
                
                :cpy
                echo %1
                if %1=="" goto end
                copy %1 "%~d1%~p1\%~n1a.jpg"
                shift
                goto cpy
                :end
                pause
                
                b、cなど2つ以上作りたい場合は
                copy %1 "%~d1%~p1\%~n1b.jpg"
                copy %1 "%~d1%~p1\%~n1c.jpg"
                のように記述してください
                用途としては、デジカメのjpegファイルを写真屋に持っていくとき
                同じ写真を2枚以上必要な場合に使っています
                例えば20080514122334.jpgから20080514122334a.jpgを作成します
              
Pythonのサンプル
 引数を表示します
                
                import sys
                if len(sys.argv) != 3:
                print "error"
                sys.exit()
                else:
                print sys.argv[1]
                print sys.argv[2];
                print "test"
                Pythonを触る機会があったので作成してみました
              
文字の変換(Python)
 かっこ株1文字を括弧と株の3文字にします
                
                import string
                import sys
                import fileinput
                
                if len(sys.argv) != 2:
                sys.exit()
                else:
                print sys.argv[1];
                
                for line in fileinput.input(sys.argv[1]):
                print line.replace("㈱", "(株)")
                
              
バッチファイルでテキストファイルの内容を付加してリネームしてコピー
 例えば日付のデータがあり、その日付を付加した名前でバックアップして
                おきたいときに使用できます。
                
                [date.txt]
                20080930
                
                [sample.bat]
                for /f %%i in ( date.txt ) do (
                copy 日報.pdf .bkup\日報_%%i.pdf
                )
                
                [実行例]
                copy 日報.pdf .bkup\日報_20080930.pdf
                
                他の使用方法
                [コマンド指定例]
                for /f "skip=3" %%i in ('type a.txt') do echo %%i
                (3行スキップ)
                [データ指定例]
                for /f ""tokens=2,*" %%i in ("a b c d") do echo %%i
                (2個目とそれ以降のデータが対象 b,c,d)
                
              
文字の変換(vbscript)
 かっこ株1文字を括弧と株の3文字にします
                全件をメモリに読み込みますので件数が少ない場合に使用します
                
                Dim text, text1, text2, filename1, filename2, tf, fso
                
                text1="㈱"
                text2="(株)"
                filename1 = 'c:\input.txt'
                filename2 = 'c:\output.txt'
                '全件読込
                Set fso = CreateObject("Scripting.FileSystemObject")
                Set tf = fso.OpenTextFile(filename,1,True)
                text=""
                While Not tf.AtEndOfStream
                text = tf.ReadAll
                Wend
                tf.Close
                '置換
                text = Replace(text,text1,text2)
                '全件出力
                Set tf = fso.OpenTextFile(filename2,2,True)
                tf.Write text
                tf.Close
              
CSVの品番集計を行う(Perl Script)
 #a.csv
                AAA-1,TITLEA,1
                BBB-1,TITLEB,2
                CCC-1,TITLEC,3
                AAA-1,TITLEA,4
                CCC-1,TITLEC,5
                
                 ↓
                #b.csv
                #品番,タイトル,数量
                AAA-1,TITLEA,5
                BBB-1,TITLEB,2
                CCC-1,TITLEC,8
                
                #hashusum.pl
                while (<>) {
                #改行をとる
                 chop if(/\n$/);
                #CSVを項目に分ける
                 @item = split(/,/, $_);
                #品番をキーにする
                 $key = $item[0];
                #品番・タイトルをカンマでつなげる
                 $hash_data{$key} = $item[0].",".$item[1];
                #品番ごとの数量を加算する
                 $hash_su{$key} += $item[3];
                }
                print "品番,タイトル,数量\n";
                foreach $key ( sort keys %hash_data ) {
                 print $hash_data{$key}.",".$hash_su{$key}."\n";
                }
                品番とタイトルは必ず同じと考えて、品番順に出力しています。
                件数が少ない場合の方法です
              
名前に空白があるフォルダをパラメータとして使用する(bat)
 名前にの中に空白があるフォルダをパラメータとして使用したいとき
                
                c:\>a.bat 全角が含まれた フォルダ
                [a.bat]
                echo "%1 %2"
              
ゼロバイトのデータで条件分岐(bat)
 
                for %%I in (data1.dat) do set sz=%%~zI
                if %sz%==0 goto ZERO_FILE
                echo ゼロバイトではありません
                goto end
                :ZERO_FILE
                echo ゼロバイトです
                :END
                
              
One Liner(perl)
 コマンドライン1行で済ます方法
                
                まずパラメータについて
                -n ・・・  "while (<>) { ... }" と同様
                -p ・・・  "while (<>) { print }" と同様
                -e ・・・  一行プログラム
                
                [小文字を大文字にする]
                perl -pe "tr/a-z/A-Z/" [input]
                セミコロンで2つ以上命令を続けることができることを利用し
                次のようにも書くことができる。
                perl -ne "tr/a-z/A-Z/;print" [input]
                
                [Grepの代わり]
                perl -ne "print if ( /検索文字列/ )" [input]
                
                [-aパラメータと-F区切り文字と-lパラメータ]
                -a は「自動splitモード」で
                -F,とすると
                @F = split(','); のように配列Fにデータが入る
                -lは入力の際にchompし、出力の際に自動で改行を付加する
                
                カンマで区切られたファイルを読み、2項目目を改行をつけて出力する。
                perl -F, -lane "print @F[1]" [input]
                
                スクリプトで書くと
                while (<>){
                @F = split(',');
                print $F[1]."\n";
                }
                
              
CSVからhtmlのtable作成(Perl Script)
 splitで分けてからtrとtdをjoinで繋げます
                
                print "<html><body>\n";
                print "\n";
                print '<TABLE border="3">'."\n";
                while(<>){
                 print '<tr><td>'.join("</td>\n<td>",
                split(/,/, $_))."</td>\n</tr>\n";
                }
                print "</table>\n";
                print "</body></html>\n";
              
| A1 | B1 | C1 | 
| A2 | B2 | C2 | 
| A3 | B3 | C3 | 
CSVからセルを結合したhtmlのtable作成(Perl Script)
 二度同じファイルを読むのがみそです。
                rowspanを使用します
              
| NO | A | B | C | |
|---|---|---|---|---|
| 1 | a1 | b1 | c1 | |
| 2 | c2 | |||
| 3 | a2 | b2 | c2 | |
| 4 | b3 | c3 | ||
| 5 | a3 | b2 | c3 | 
・download
CGIで全角文字をDecode、Encodeする方法です(Perl Script)
 CGIでパラメータを渡すとき全角ではうまくいかない場合があります。
                なお、空白はプラスに変換してからDecodeします。
                「全角です」は次のようになります。
                "http://xxx/test.cgi?%91S%8ap%82%c5%82%b7"
                
                $value = "全角です";
                print $value."\n";
                print "*******\n";
                
                #encode
                $value =~ tr/ /+/;
                $value =~ s/(\W)/'%'.unpack("H2",$1)/eg;
                print $value."\n"
                print "*******\n";
                
                #decode
                $value =~ tr/+/ /;
                $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
                print $value."\n";
                
              
CGIでパラメータを2つにするには(Perl Script)
 「abc」と「全角です」のパラメータを2つにするときは「?」の後ろに
                「+」でつないで使います。
                "http://xxx/test.cgi?abc+%91S%8ap%82%c5%82%b7"
              
バイナリファイルの文字コードを変換するには(Perl Script)
 バイナリモードで開きます。
                この場合1バイトごとに読んで変換をかけ、出力しています
                入力ファイルをサンプルのように指定したいため、下記のようにしています。
                
                open (FH, $ARGV[0]) or die;
                binmode FH;
                binmode(STDOUT);
                while (read( FH, $code, 1)) {
                 $code =~ tr/\x7f/\xBE/;
                 print STDOUT $code;
                }
                close FH;
                
                jperl test.pl a.dat > b.dat
              
ループの途中で処理をしないようにするには(Perl Script)
 ループをある条件のとき抜けたい、ある条件のとき最後まで処理をしたくないときがあります
                「last」と「next」を使って行うことができます
                
                [last]
                while (<>)) {
                 last if ($. eq 10);
                 print $_;
                }
                lastが実行されると、その行でループを抜けます。
                この場合は9行まで出力され終わります。
                
                [next]
                while (<>)) {
                 last if ($. eq 10);
                 print $_;
                }
                nextが実行されると、その行以下が実行されませんが、ループを続けます。
                この場合は9行まで出力され、10行目は出力されず、11行から最後まで出力されます。
                
              
Substrの使い方(Perl Script)
 $data ="abcdefg";の場合、先頭は0から数えます
                
                a b c d e f g
                --------------------
                0 1 2 3 4 5 6
                -7 -6 -5 -4 -3 -2 -1
                
                
                # n文字目からm文字を取得(通常のパターン)
                $data2 = substr($data, n, m);
                n=2,m=3のとき"cde"
                
                # n文字目から最後までを取得(取得文字数を省略)
                $data2 = substr($data, n);
                n=5のとき"fg"
                
                # 後ろから数えてn文字目から最後までを取得(マイナスは後ろから数える)
                $data2 = substr($data, -n);
                n=3のとき、"efg";
                
                # n文字目からm文字残して取得
                $data2 = substr($data, n, -m);
                n=2,m=3のとき"cd"
                
                # n文字目からm文字を"CCC"に置換して取得
                $data2 = substr($data, n, m,"CCC");
                n=4,m=2,"CCC"="EF"のとき"abcdEFg"
                
                # 一部分を置き換える
                substr($data, 4, 2) = 'EF'; # $a = 'abcdEFg'
              
環境変数の時刻の前の空白をゼロにする(bat)
 
                
                %time% = 3:59:48.19のように時間が1ケタの時には先頭に空白が入っています。
                
                (1)set timex=%time: =0%
                
                *環境変数の空白を0に置換しています。文字列1はアスタリスクも可能です。
                %変数名:文字列1=文字列2%
                
                (2)set /a hh=%time:~0,2%
                If %hh% lss 10 Set hh=0%hh%
                set timex = %hh%%time:~3%
                
                */aをつけると計算式となり文字列でなく数字として認識してくれます。
                
                *%変数名:~位置,長さ% を利用しています。他の例を示します。
                
                (%変数名:~3% : 4文字以降すべて)
                (%変数名:~3,1% : 4文字から1文字)
                (%変数名:~3,-1% : 4文字から最後の1文字を除いたもの)
                (%変数名:~-3% : 右から3文字目から後ろ)
                (%変数名:~-3,1% : 右から3文字目から1文字)
                (%変数名:~-3,-1% : 右から3文字目から最後の1文字を除いたもの)
                
              
コンピュータ名をバッチで取得するには(bat)
 set hname=%computername%
                
                または
                for /F %%h in ('hostname') do set hname=%%h
                
                hostnameコマンドの出力を変数に入れてから、setコマンドで代入しています
              
約1秒待たせる(bat)
 ping localhost -n 2 > nul
              
フルパスの引数からファイル名のみ取得(bat)
 
                set flid=%~n1%~x1
              
ファイルに記述されたバッチファイルをパラメタ付で起動する(bat)
 for /F "tokens=1-9" %%a in ( batname.dat ) do (
                call %%a %%b %%c %%d %%e %%f %%g %%h %%i
                )
                
                [batname.bat]
                aaa.bat para1 para2
                bbb.bat para1 para2
              
プログラムが起動中なら起動しないようにする(bat)
 set process_name=aaa.exe
                tasklist /fi "imagename eq %process_name%" | find /i
                "%process_name%"
                if %errorlevel%==0 (
                echo *** 起動済
                ) Else (
                start aaa.exe
                )
              
バッチファイルで変数がNULLの対応(bat)
 
                if %1 equ a echo a
                のバッチファイルをパラメータをいれずに処理すると
                if equ a echo a となり、エラーとなります。
                
                エラーにしない方法として
                [方法1] if "%1" equ "a" echo a
                [方法2] if %1. equ a. echo a
                
                とすると構文エラーにならず、うまく流れます。
                
              
If文とfor文の中で変数を扱う(bat)
 
                バッチファイルでは他の言語とは違い、if文やfor文の中での式の代入した値が
                反映されるのが、if文やfor文を抜けてからです。
                よって
                
                set var1=1
                set var2=1
                if %var1%==1(
                set var2=%var2%+1
                echo 中 %var2%
                )
                echo 外 %var2%
                
                とやってもif文の中では反映されず、抜けてから反映されます。
                
                これを回避するには遅延環境変数の展開の指定をします。
                
                setlocal enabledelayedexpansion
                set var1=1
                set var2=1
                if %var1%==1(
                set var2=!var2!+1
                echo 中 !var2!
                )
                echo 外 %var2%
                end local
                
                先頭に宣言をして、変数には「!」を使用します。
                
              
バッチファイルで文字列の前後の空白を抜く(bat)
 
                set moji= a b c 
                echo "%moji%"
                call :sub %moji%
                echo "%moji%"
                
                :sub
                set moji=%*
                exit/b 
                  
                  サブルーチン(sub)の[%*]はサブルーチンの引数すべての参照したことになります。
                  
                  
                  call :sub a b c は call :sub %1 %2 %3と同じことなりますが
                  サブルーチン側で「set moji=a b c」と前後の空白がとれて連携されます
                  結果としては、" a b c "→"a b c"となります
                
UNCパスの共有フォルダをドライブ付きパスとして認識させるには(bat)
 
                下記のコマンドをいれると仮のドライブを割り当てられます
                net use \\192.168.1.217 /user:Username password
                
                切断するには次のコマンドをいれます
                net use * /delete /yes
               
            
UNCパスの共有フォルダのバッチファイルをうまく動かすには(bat)
 
                共有フォルダでCDコマンドを使ったり、プログラムを動かそうとすると
                「CMDではUNCパスは現在のディレクトリとしてサポートされません。」
                というメッセージがでます。そこで、pushdを使い、仮のドライブを割り当て、カレントディレクトリにする方法があります
                pushd \\192.168.1.100\共有領域\〇〇部
                Y:\〇〇部 と勝手にドライブが割り当てられます。
                
                自分のパソコンのCドライブなど同様に動作することができるため、バッチファイルで使用するプログラムを共有フォルダにいれて実行することが可能となります
                
                バッチファイルの最後に popdと入れると接続されいた共有フォルダが切断されます
                
               
            
全角空白が入ったUNCパスの共有フォルダのバッチファイルをうまく動かすには(bat)
 
                全角空白が入ったUNCパスの入った共有フォルダでは、バッチファイルは空白を分けて認識してしまう仕様のようです
                「\\192.168.1.100\共有領域\営業部 営業一課」にa.txtといったファイルがあった場合
                このファイルをバッチファイルにドラッグアンドドロップすると引数%1と%2に分かれてしまいます。
                
                %1=\\192.168.1.100\共有領域\営業部
                %2=営業一課\a.txt
                
                そこで、次のように引数1、引数2をつなぎ合わせることで、きちんと読み込めるようになります。
                
                set name="%1 %2"
                type %name%
               
            
ダブルクォーテーションで囲まれた文字列から前後のダブルクォーテーションを取るには(bat)
 
                バッチファイルの引数に空白がある場合、ダブルクォーテーションでくくりますが
                ダブルクォーテーションをとって処理を連携させたい場合があります。
                
                tmpfo="c:\abc\"
                set tmpfo=%tmpfo:~1,-1% 
                
               
            
BATファイルのDOS窓を消すには(bat)
 バッチファイルを動かすとDOS窓が開きますが、最小化することもできます。
               Set wsh = CreateObject("Wscript.Shell")
               wsh.run "cmd /c batfile.bat",vbhide
               
               または、タスクをバックグラウンドで動かす方法もあります。
               オプションの「ユーザーがログオンしているかどうかにかかわらず実行する」を選択
            
BATでPDFを印刷(bat)
 バッチファイルでPDFを自動で印刷します。
               start "" "Acrord32.exe" /t c:\a.pdf
               
            
BATでテキストファイルを印刷(bat)
 バッチファイルでテキストファイルを自動で印刷します。
               メモ帳の場合 notepad.exe /p c:\a.txt
               
               terapadの場合 terapad.exe /p c:\a.txt
               terapadの場合(INIフォルダ指定) terapad.exe /p /i=c:\hogehoge c:\a.txt
            
for文でファイル名に空白のあるファイルの処理(bat)
 for文でファイル名に空白があるは空白の後ろがきれてしまいます
                通常は空白もデリミタとしてしまうため"delims="を入れます
                for /f %%i in ('dir /b /s c:\abc\*.txt') do copy "%%i" d:\
                for /f "delims=" %%i in ('dir /b /s c:\abc\*.txt') do copy "%%i" d:\
            
BATでのコメント(bat)
 バッチファイルでコメントについて
               REM コメント
               :: コメント
               どちらでも良いのですが、括弧「()」の中ではREMにしないといけません
               if %1==1 (
               REM test
                  set I=2
               )
            



