お風呂の温度、何℃にしてますか?

https://oshiete.goo.ne.jp/qa/10255566.html でコマンドプロンプトで、指定したファイルが開いているかをDELコマンドとERRORLEVELで判別できることが分かりました。

start Excel.exe %FILE1%
del /q %FILE1% 2>&1 | find /V ""
if %errorlevel% == 1 (
echo 1
goto res
) else if %errorlevel% == 0 (
echo 0
start Excel.exe %FILE2%
)

この判定で実際に行いたいのは、エクセルでFILE1.csv と FILE2.xls を開く際に
FILE1.csv が開いてからFILE2.xlsを開くことです。
FILE1.csv はファイルによって(データ数?ファイル容量?)開く時間が異なるため、上記の判定を繰り返し行う必要があると考えています。
上記の判定を繰り返し行うには、どのようにしたらよいでしょうか?

宜しくお願いいたします。

A 回答 (2件)

やりたいことは『コマンドプロンプトで、まずFILE1.csvをExcelで開いて、それが完了したら次にFILE2.xlsを開きたい』ということで良いですか。


これ、どうあがいても保証はできませんよ。
No.1の人も書いているとおり、ExcelはまずFILE1.csvをロックしてから開きます。すなわちFILE1.csvが削除できないというのは、開き終わったからではなく、開き始めたからです。Excelの外から開き終わりを感知する方法はありません。
これは筋が悪いので、本当にしたいことは何か、からもう一度考え直した方が良いです。

ちなみに
> start Excel.exe FILE1.csv FILE2.xls
は(Excel.exeをフルパス指定すれば)一応できますけど、2つのファイルを順に開く保証はないですね。並列動作してそうです。並列動作しても良ければ、これでOKですが・・・

なお、あらかじめ起動したExcelファイルからVBAでFILE1.csvとFILE2.xlsを順に開くというのならWorkbooks.Openを並べればできます。
    • good
    • 0

ご質問の件に関しましては、処理の戻り先として、



:AAA

等のラベル行を作成し、その行へ、

goto AAA

のような感じでジャンプさせてやり、
戻る前か、戻った後に、

ping localhost -n 6 >NUL:

のような感じで、数秒待つ処理を設けてやると良いかと思います。(※上記の「ping」コマンドを利用したウェイト例は「6」と記述されていますが、実際は1秒引いた「5」秒待つ処理です。)

ただ、恐らくですが、質問者さんが実現しようとしている方法ですと、一つ目のファイルを開いている途中でも、ファイルにライトプロテクトが掛かり、削除処理に失敗すると思われますので、その時点で、一つ目のファイルが開き切ったと判断され、一つ目のファイルが開き切る前に、次のファイルが開かれてしまうと思います。

正確に判断しようと思うと、以前のご質問のご回答にあるようなツールをインストールするのが良いかと思いますが、Windows標準の機能のみしか使えない環境で、マイクロソフト製のツールであっても、追加のインストールが出来ないような状況なのでしょうか。

そのような場合は、Windows標準のスクリプトで処理を実現する必要があるかと思いますが、良い方法があるかは私にはちょっと分かりません。

それ以前の簡単な方法として、引数で両ファイルを指定するという方法があります。

「OpenOffice」等で有効な方法で、「Microsoft Office」ではどうか分かりません。一度、そちらでご検証ください。

バッチファイルからですと、

start "" Excel.exe %FILE1% %FILE2%

という感じで実行します。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報