質問: 特定のフォルダにあるファイルをUSBメモリにコピーしてから、 元のファイルを削除するBATファイルです。 最低限、動くようになったのですが、 エラー処理や例外処理が不十分だと感じてます。 例えば、 ・Nやnでは終了させてますが、Yやyのときだけ処理が進行するようにする。 ・特定の名前のファイルが確実にあり、コピーが完了してから、元のファイルを確実に削除する。 (テストしてたら、コピー先のドライブ名を間違えてもファイル削除されました。) ・他に、もっとスマートに処理(例外処理も)する方法があれば教えて頂けますでしょうか? ``` @echo off REM 複写の判定 :Main @echo. set USER_INPUT= set /p USER_INPUT="一括収集CSVデータをUSBにコピーします。処理を続けますか?[はい:Y いいえ:N]: " @echo 入力した文字は %USER_INPUT% です pause if %USER_INPUT%=="N" exit /b 0 if %USER_INPUT%=="n" exit /b 0 @echo %USB_INPUT% REM pause @echo. REM USBメモリのドライブ名の入力 REM @echo USBのドライブ名を入力してください。 set USB_INPUT= set /p USB_INPUT="USBのドライブ名を入力してください。: " @echo %USB_INPUT% REM pause REM CSVファイルの複写 @echo 複写です copy C:\MyNumber\収集\一括\I_*.csv %USB_INPUT%:\ REM pause REM CSVファイルの削除 @echo CSVファイルの削除 del C:\MyNumber\収集\一括\I_*.csv REM 処理終了 @echo 終了です pause ```
回答: 概ね問題無いと思いますが、一つ重大な問題点があります。 それはコピーに失敗してもファイルを消してしまうということです。 ですので、コピーの失敗処理を追記してください。以下サンプルです。 ``` copy C:\MyNumber\収集\一括\I_*.csv %USB_INPUT%:\ if errorlevel 1 ( rem errorlevel 1以上 echo コピーに失敗しました。 rem この後にエラー処理を入れて中断する exit /B 1 ) else ( rem errorlevel 0 echo はコピーに成功しました。 ) ``` ちなみにコピーを失敗させる一番簡単なテスト方法は、(メモ帳等で)コピー元のファイルを開いておくことです。