みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Win10 FMP18です。
Cドライブでファイル「台帳」を作りました。
このファイルのバックアップを、外付けUSB(Fドライブ)の「バックアップ」フォルダーに$保存パスを設定するスクリプトで簡単に保存するところまではできました。
「バックアップ」ファイルにはカッコで日付時刻が付くようになっています。
F:「バックアップ」フォルダーには以下のようなファイルがたまっていきます。
台帳(202202062205).fmp12
台帳(202202051745).fmp12
台帳(202202041012).fmp12
台帳(202202030845).fmp12
台帳(202202021936).fmp12
台帳(202202021010).fmp12
台帳(202202011625).fmp12
台帳(202202011115).fmp12
時間がたてばUSBメモリーの容量をオーバーするのは明らかです。
ネットで調べているうちEvent送信で設定数を超えるファイルを削除できる、とありました。
「Eventを送信」のオプションで テキスト(T): に何か書くんですね。
Event送信は今まで使ったことがなく、書いてあるコマンドとかいうものの意味が全く分かりません。
DOSとかを読んでみましたがギブアップです。
以下にその文をコピペしますがこの構文のどこを置き換えると使えるようになりますか。
プロの方のお知恵をお借りしたく思います。
"cmd /c cd /d ""
& Substitute ( Get (ファイルパス) ; [ "file:/" ; "" ] ; [ Get (ファイル名) & ".fmp12" ; "" ] ; [ "/" ; "\\" ] )
& "Backup" & for /f "skip=" & $保存数 & "" %i in ('dir /a-d /b /o-n ""
& Get ( ファイル名 )
& "(??????????????).bak"') do del %i"
Offline
フィールド内容のエクスポートで削除できますよ。
https://fm-aid.com/bbs2/viewtopic.php?id=11168
ここを見てください。
バックアップファイル名のリストを保存しておいて、
一番古いのを削除、リストから消去。
バックアップのたびにリストに加えればいいでしょう。
Offline
チポさん Mozさん ありがとうございます。
パスの作成についてまだおぼつかなくうまくいきません。
私の希望はバックアップ(名前を付けて保存)するたびに同時に、保存フォルダで$保存数(例えば50ファイル)を残しそれ以上は削除するというものです。
提示した構文は、ファイルの名前はカッコ内の保存日時でユニークな値ですので、数えて50個「skip」してから次々に削除せよ、という命令じゃないのかな?
構文の解読をお願いするようで厚かましいお願いですが、よろしくご教示お願いいたします。
Offline
私たちの提案は FileMaker の標準機能を用いてバックアップの最古のものを削除するといった手法です。
提示されたものは FileMaker の構文(という呼び方も語弊があるかも)ではありません。
(構文を作る際に部分的に FileMaker の関数で取得した値を入れていますが実行そのものは FileMaker ではありません)
手法に拘りがあるようでしたら詳しい方にパスです。サーセン。
いきなり FileMaker の Event 送信ではなくコマンド書くことからやってみては?
適当なフォルダにファイル入れればできますよね(保存数を少なくすれば数個で試せますし)
一箇所指摘するなら削除したいファイルは「.fmp12」ですがコマンドでは「.bak」を消すように書かれていませんかね。
理解せずに一部を変えたら上手くいったという手法では根本的な解決ではないのでちょっとした変化で躓きます。
Offline
FM側の値を連結で入れようとすると、DOSのバッチファイルの構文が読みにくくなるので、何かのタグを入れておいて置換した方がいいです。
ファイル名の後にスペースが足りないとか、3行目に”が抜けてるとかが、すぐわかります。?の数も合ってないような。
Powershellの方が簡単ではないかと思って探したけど、似たり寄ったりの様です。
FMだけでやろうとすると、任意のパスのファイル一覧を取得が結局まだできないんですかね。そこはEventを送信でやるか、プラグインを使うか、アドオンでは無理なのかな。
Mozさん himadaneeさん ありがとうございます
Event送信ではなく、「FMの標準機能で」という意味がやっと分かりました。
チポさんの言われる「バックアップファイル名のリストを保存しておいて、」というのが何のことかわからなかったのですが理解出来ました。
DOSは無理です。やっぱりFMは素人でも躓かないでできると実感しました。
Offline
コマンドを調べてみましたが、
FOR /F "delims=: skip=<<n>> usebackq" %i IN (`dir <<filesearch>> /o-d /a-d /b`) DO DEL "%i"
で、大体できてそうな感じです。
dirの実行結果を1行ずつ取り出して、
ファイル名に存在しない「:」を区切りに指定して行全体を1つのトークンにする
<<n>>を残す数、
<<filesearch>>をDOSのファイル検索パターンで置換して実行しますが、
質問のようにファイル名にスペースがあるとエスケープする必要がでてきます。
例えばファイル名にスペース1個を含むFMファイルだと
*" "*.fmp12
他にエスケープすべき文字があるかどうかは調べてませんが、()は大丈夫かな?
himadaneeさん ありがとうございます。
ずいぶん簡単な命令でできることは魅力ですが、呪文のようなDOSはやはり素人には無理です。
処理に時間がかかりますが、「ファイルを削除」でなんとかなりました。
Offline
[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 521.34 KiB (Peak: 526.24 KiB) ]