過去の桐井戸端BBS (桐ver.7) |
1065 | 一括処理のファイル複写 | su | 1999/1/14-22:24 |
桐7.1を使用しています。 一括処理コマンドで、ファイル複写をしたいのですが、その際、”A.cmd”以外の”*.cmd”としたいの ですが、このようなことは可能でしょうか。 よろしくお願いします。 | |||
1067 | Re: | 幅田 | 1999/1/15-07:21 |
記事番号1065へのコメント 複写したくない”A.cmd”の拡張子をいったん変更しておいて、ファイル複写をしてから 元に戻しておけばいいと思います。 複写先のフォルダ名が”Bak”だとしたら、 ファイル名変更 ”A.cmd”,”A.aaa” ファイル複写 ”*.cmd”,”Bak” ファイル名変更 ”A.aaa”,”A.cmd” | |||
1069 | Re: | su | 1999/1/15-10:44 |
記事番号1067へのコメント 幅田さん、早速のご回答ありがとうございます。 なるほど、ファイル名変更という手がありましたね。 こういう発想が全くなかったので勉強になりました。 ところで、私の質問の仕方が悪かったのですが、実は、”A.cmd”というのは、 現在実行中の一括処理なのです。 ですから、「ファイルが使用中」の175番のエラーになってしまい、すべてのファイルを複写することは できません。 そこで、このファイルだけは後で複写するとして、その他のファイルはその時点で複写したいのです。 情報不足でお手間取らせて済みません。 質問はより具体的にしないといけませんね。反省しています。m(_ _)m 以上のような状況で、方策はあるでしょうか。 よろしくお願いします。 | |||
1071 | Re: | ikjun | 1999/1/15-12:36 |
記事番号1069へのコメント >ところで、私の質問の仕方が悪かったのですが、実は、”A.cmd”というのは、現在実行中の一括 >処理なのです。 >ですから、「ファイルが使用中」の175番のエラーになってしまい、すべてのファイルを複写する >ことはできません。 >そこで、このファイルだけは後で複写するとして、その他のファイルはその時点で複写したいので >す。 ということは、すべてのコマンドファイルのバックアップを一括処理からとりたいということですね? 個人的には別のプログラム(VBとか)で書くか、バックアップ用のソフトを使う方がよさそうな 気がしますが、それはさておき、例によって、思いつきだけです。 1.”A.cmd”だけ別のフォルダにいれてフルパスで実行させる。複写もフルパスでやれば出来る と思うけれど?! 2.シェル実行で、これ以外を複写するというプログラムを実行させる。 3.バッチファイルから桐を立ち上げて、フラグファイルを操作してから一旦終了する。バッチフ ァイルはそのフラグファイルをチェックして、本当の終了なら、そのまま終了、コピーするため の仮の終了なら、コピーしてからもう一度桐を立ち上げて、一括処理の実行に戻る。 個人的には1番がいいと思います。2番3番になるとMS−DOS時代の裏技のようなものです。 もっとも、どれも試したことはありません。 3番はもう少し説明がいると思いますので、必要なら再質問をして下さい。 | |||
1073 | Re: | 幅田 | 1999/1/15-13:31 |
記事番号1071へのコメント >ところで、私の質問の仕方が悪かったのですが、実は、”A.cmd”というのは、現在実行中の一括 >処理なのです。 >ですから、「ファイルが使用中」の175番のエラーになってしまい、すべてのファイルを複写する >ことはできません。 >そこで、このファイルだけは後で複写するとして、その他のファイルはその時点で複写したいので >す。 私も思いつきなのですが・・ 作成したCMDファイルの拡張子をすべて”aaa”にします。 (もちろん”A.cmd”も”A.aaa”となります。) ただし、メインの一括処理だけ”cmd”のままにしておきます。 最初にメインの一括処理から実行し、次に実行する一括処理の実行直前に「ファイル名変更」コマンドで拡張子を”cmd”に変更してやります。 その一括処理内での「ファイル複写」は”*.aaa”を複写します。 その一括処理が終了したら、再度「ファイル名変更」コマンドで拡張子を”aaa”に戻しておきます。 (その際には実行する一括処理のファイル名を変数に入れて保持しておく必要があります。) 桐V5の時に、他人に使用してもらう一括処理のファイルを複数に分割したとき、 初期メニューの一括処理実行でファイル名を一覧したら、拡張子が”CMD”のファイルは すべて表示してしまい、利用者にはどれを実行すればよいのかわからなくなるため、 最初にメインの一括処理ファイルしか表示させないようにするために、このようなことを したことがあります。 | |||
1074 | Re: | 悲しげ | 1999/1/15-20:47 |
記事番号1073へのコメント どもっ、suさん、 私は似て非なることをやっておりましたが、現在使用中のcmdが「ファイル複写」できないことを 初めて知りました。(^^;) 私の場合は、厳密には「ファイル複写」ではないですし、桐ver5での話ですから参考にならないかも しれませんが、ちょっと書いてみます。 cmdファイル複写を何のために行うのかは判りませんが、私の場合はバックアップのために 行っています。で、私はLHaに圧縮してFDに退避させる処理を一括処理から実行しています。 やり方は桐ver5ですから「システム」コマンドで、 LHa u CMDBAK.LZH *.CMD を含むバッチファイルを実行させています。この方法だと、使用中のcmdもすんなり指定できています。 桐ver7.*では使ったことがありませんが、よろしければこんな感じで実験してみて下さい。 あれっ? Winでバッチみたいなことはどうやってやるんでしたっけ(?_?) それと昨夜、"A.cmd"以外のcmdをファイル複写する一括処理を書いてみました。 さて投稿しようとするやゴールデンタイムに差し掛かって回線がつながらなかったので、 1日放っておいたらちょっと腐り掛けて来ましたが(^^;)、 一応挙げておきます。#ファイル検索を使って"*.cmd"を全て変数に取得し、 次に"A.cmd"以外を順次複写して行くと云うやり方のつもりです。 ただし、エディタ上でのなぐり書きで、一切挙動チェックはしておりませんの で、バグっている可能性の方が高いですけど。 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT 変数宣言 整数{&i},文字列{&CMD,&CMD群,&複写先フォルダ名,&複写先CMD} *例です→&複写先フォルダ名="A:\ナントカ\" * まずCMD群をカンマ区切りで連結する(#対応文字列関数を使うため) &i=1,&CMD群="" 繰り返し &CMD=#ファイル検索("*.cmd",&i) 条件(&CMD="") 繰り返し中止 &CMD群=&CMD群+","+&CMD &i=&i+1 繰り返し終了 &CMD群=#部分列(&CMD群,2) /*先頭のカンマを抜くため*/ * 次に#対応文字列で"*.cmd"以外をひとつずつ取り出し、"A.cmd"以外を\ 順次複写する。 &i=1 繰り返し &CMD=#対応文字列(&CMD群,&i)\ ,&複写先CMD=&複写先フォルダ名+#ファイル名(&CMD,3) 条件(&CMD="") 繰り返し中止 条件(#ファイル名(&CMD,3)<>"A.cmd") ファイル複写 &CMD,&複写先CMD &i=&i+1 繰り返し終了 LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL でも、本当は"A.cmd"も複写したいんですよね。(^^;) | |||
1075 | ありがとうございます | su | 1999/1/15-21:02 |
記事番号1073へのコメント 幅田さん、ikjunさんありがとうございます。 おかげさまで、ご両人のアイディアおよび、アドバイスを元にいろいろ試行錯誤した結果、満足のいく一括処理ができました。 まず Aフォルダの中のA.cmdによりBフォルダを作らせ、そのフォルダ名を共通変数として取得させます。 さらに、Aフォルダのフォルダー名も共通変数として取得させます。 そこで、A.cmdを終了させると同時に第三のフォルダーであるZフォルダーにあるZ.cmdを実行させます。 ここでは、共通変数を頼りに、Aフォルダの"*cmd""*rpt""*wfm""*viw"をBフォルダに複写し、表ファイルをを指定し 書き出し「表の枠組み」を行いました。 何とか思い通りの一括処理が出来上がり、ほっとしていると同時に、悦にひたっているところです。 そして私のような素人でも、プログラムが動いてしまう桐というのは素晴らしいソフトですね。 最近では、桐をいじくり、こちらのHomePageを見るのが日課となっています。 どうぞこれからもよろしくお願いします。 | |||
1076 | Re:一括処理のファイル複写 | su | 1999/1/15-21:57 |
記事番号1074へのコメント 悲しげさんありがとうございます。 今投稿を終えて、あらためて掲示板を見ましたら、悲しげさんのコメントがあったので驚いてしまいました。 さっそく拝見させていただき、目からうろこと言いますか、すごいなと思いました。 繰り返しと、桐関数、変数の組み合わせで、ファイル名を取得し、A.cmd以外を複写する。 A.cmd以外の*.cmdを取得するのにこのような方法があるのですね。 とても私には考えつきませんでしたが、大変勉強になりました。 今作っているものは、とある催し物のシステムなのですが、年度が替わると、まったく同じシステムを違うフォルダーに移し替えて使用するというものです。 (おそらくもっときちんとシステムを考えれば、同一フォルダーで年度を替え処理できるのだと思うのですが、複雑すぎて自分には無理だと判断し、このようにしました。) ですから、新たに作られたシステムでは、データは無しというものにしなければならなかったわけです。 表に関しては、今回は使用する表が少なかったので、それぞれ表の枠組みを書き出すと言うことで対処してみました。 それにしても、桐は奥が深いですね。 今は、毎日が発見の連続です。 今後ともよろしくお願いします。 | |||
1082 | Re: | 悲しげ | 1999/1/16-12:51 |
記事番号1076へのコメント どもっ、suさん >今作っているものは、とある催し物のシステムなのですが、年度が替わると、まったく同じ >システムを違うフォルダーに移し替えて使用するというものです。 >(おそらくもっときちんとシステムを考えれば、同一フォルダーで年度を替え処理できるのだと >思うのですが、複雑すぎて自分には無理だと判断し、このようにしました。) >ですから、新たに作られたシステムでは、データは無しというものにしなければならなかった >わけです。 >表に関しては、今回は使用する表が少なかったので、それぞれ表の枠組みを書き出すと言うことで >対処してみました。 あ、そう云うことでした。 それなら、年度更新用の一括処理を別途単独で作った方がいいかもしれませんよ。 それともう少し簡単な方法として、桐を終了してからエスクプローラ等で全ファイルを次年度フォルダに コピーする、なんてのはどうでしょう。 上記によると、変更部分は表を空にするだけみたいなので、手動にて全表について 全行削除→表整理を行うとか。 後の方の過程を自動で行いたければ、次のような単独一括処理も考えられます。 繰り返し &TBL=#ファイル検索("*.TBL",&i) 条件(&TBL="") 繰り返し中止 表 &TBL * 必要があればここで「ファイル属性」コマンドで「表題」も変更可能です。 行削除 *,圧縮 表 &i=&i+1 繰り返し終了 もし、表が長大で圧縮(=表整理)に時間がかかるようでしたら、次のようにすれば瞬時に終わります。 書き出し 枠組み,"別名.TBL" 表 ファイル削除 &TBL ファイル名変更 "別名.TBL",&TBL とは云うものの、このようなことをやってしまうと、「#ファイル検索」で探すファイルの順番が おかしくなるのかな?(未確認) 前回書いたように、ファイル名取得部分と処理部分とを 分けた方が、冗長なりに安全かも知れません。 ちなみに私も、売掛管理(桐v5)では年度毎にフォルダを分けています。 が、suさんとは逆に、当年度フォルダを固定し、過年度データフォルダをその都度作成し、 データのみをコピーして保存していますです。 |