重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

バッチでmdbを最適化したいのですが、ldbファイルが存在した場合の処理キャンセルが分かりません。

親フォルダ
├子フォルダ1
│├AA.mdb
│└BB.mdb
├子フォルダ2
・・・

現在は下記を実行しています。

set backdate=%date:~-10,4%%date:~-5,2%%date:~-2,2%
set logfile=\\192.168.10.15\d\ACCESSBackup\log\copyall_%backdate%.log
date /T >> %logfile%
time /T >> %logfile%
xcopy "\\192.168.10.14\ACCESS_SYSTEM" "\\192.168.10.15\d\ACCESSBackup\ACCESS_SYSTEM\" /C /D /E /R /Y >> %logfile%
for /f %%A in ('dir /b /s C:\ACCESS_SYSTEM\*.mdb') do "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" %%A /compact

上記で
親フォルダ丸ごとバックアップ
ログファイルを出力
親フォルダからmdbを全て検索し最適化

この最適化の前に%%Aのファイルのldbが存在したら最適化をキャンセルさせたいのですがやり方がわかりません。

%%A→C:\ACCESS_SYSTEM\子フォルダ\AA.mdbだったら
C:\ACCESS_SYSTEM\子フォルダ\AA.ldbの存在をチェックし、あれば最適化しない。

mdbが多いので、VBAで個別に組み込まずタスクで夜中にでも一気にバックアップ・最適化したいと考えています。

どなたか知恵をお貸し下さい。
宜しくお願いいたします。

A 回答 (2件)

#1です。



まず、
>バッチファイルで実行するとやはり一瞬CMD画面が出て消えてしまいます。
についてですが、
バッチファイルの最後に
pause
をいれて、コマンドプロンプトが消えないようにしましょう。
そのうえで、エラーメッセージに何が出ているか確認しましょう。

また、
>下記のコードをCMDに直接打ち込むと正常に処理が行われるのですが、
>バッチファイルで実行するとやはり一瞬CMD画面が出て消えてしまいます。
>なぜなのでしょうか・・・

CMDで直接入力するときと、バッチファイルに記入するときは"%"の記入方法が違います。
バッチファイルに記述するときは %%A のように%記号を2つ記載しないといけません。


for /f "delims=" %%A in ('dir /b /s C:\ACCESS_SYSTEM\*.mdb') do if not exist "%%~dpnA.ldb"
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "%%~fA" /compact

その上で、うまくいかないようでしたら、そのとき表示されているエラーメッセージを
補足してください。
    • good
    • 0
この回答へのお礼

pita-goraさん

最初から最後までありがとうございました!

%%が1つなのが原因だったようです。。。

おかげさまで最適化を実現できます。

本当にありがとうございました!!

お礼日時:2010/07/20 09:05

こんにちは



>親フォルダからmdbを全て検索し最適化
>↑
>この最適化の前に%%Aのファイルのldbが存在したら最適化をキャンセルさせたいのですがやり方がわかりません。

最後のfor文の修正例です。
一応、ファイルパスやファイル名に空白が入る可能性があるので "delims=" を追加しています。ldbが存在したらキャンセルではなく、ldbが存在しなければ最適化するという記述になっています。


for /f "delims=" %%A in ('dir /b /s C:\ACCESS_SYSTEM\*.mdb') do if not exist "%~dpnA.ldb" "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "%%~fA" /compact

この回答への補足

すいません。
再度調べなおしてバッチパラメータの存在理解しました^^;

下記のコードをCMDに直接打ち込むと正常に処理が行われるのですが、
バッチファイルで実行するとやはり一瞬CMD画面が出て消えてしまいます。
なぜなのでしょうか・・・

for /f "delims=" %A in ('dir /b /s C:\ACCESS_SYSTEM\*.mdb') do if not exist "%~dpnA.ldb"
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "%~fA" /compact

補足日時:2010/07/19 10:14
    • good
    • 0
この回答へのお礼

ありがとうございます。

早速試してみたのですが、CMD画面が一瞬出て消えてしまいます。
最適化はされていないようです。

上記調べてみたのですが、すいません理解できませんでした。。

"delims="は区切り文字の指定で何も入れてないから・・・?

"%~dpnA.ldb"
"%%~fA"
これらも良く分かりませんでした。

すいません。宜しくお願いします><

お礼日時:2010/07/19 09:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!