質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

8539閲覧

【BATファイル】特定のフォルダ内のファイルをUSBメモリにコピーして削除したい。

Satochan24

総合スコア113

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2016/09/13 01:02

特定のフォルダにあるファイルを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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

概ね問題無いと思いますが、一つ重大な問題点があります。
それはコピーに失敗してもファイルを消してしまうということです。
ですので、コピーの失敗処理を追記してください。以下サンプルです。

bat

1copy C:\MyNumber\収集\一括\I_*.csv %USB_INPUT%:\ 2if errorlevel 1 ( 3 rem errorlevel 1以上 4 echo コピーに失敗しました。 5 rem この後にエラー処理を入れて中断する 6 exit /B 1 7) else ( 8 rem errorlevel 0 9 echo はコピーに成功しました。 10)

ちなみにコピーを失敗させる一番簡単なテスト方法は、(メモ帳等で)コピー元のファイルを開いておくことです。

投稿2016/09/13 03:04

ishi9

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satochan24

2016/09/13 04:19

回答有難うございます。 コピー失敗のテスト、試してみたのですが、コピー元のファイルを開いていてもコピーは成功してしまいました。何か原因ありますでしょうか?
over

2016/09/13 04:27

横から失礼します。 メモ帳ではファイルをロックすることはできません。
ishi9

2016/09/13 04:40

失礼しました。確かに普通のエディタ(メモ帳やエクセル)等ではちょうど保存しているタイミングと重ならないかぎり、無理でした。 他の手っ取り早いテスト手段としては、存在しないドライブをコピー先に指定してしまうことでしょうか?(現実に前のままのバッチだとうっかり変なドライブ指定しただけでファイルが全部消えてしまいます)
Satochan24

2016/09/13 04:48

回答有難うございます。コピー失敗のテスト、成功しました! 因みに追加で質問したいのですが、VBSCriptとか使えば、指定したドライブが USBメモリかどうか判別できますでしょうか? 調べたのですが、リムーバブルディスクかどうかの判断はできるようなのですが…
ishi9

2016/09/13 05:52

一応、VBScript(WSH)で本気出してやればできそうですね。(WMIというwindowsの根っこにアクセスする機能を駆使する) 参考URL http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201510/15100002.txt GetDrivesInfoByType.vbs で検索をかけてください。道中のやりとりもいろいろ勉強になると思いますがかなり高度なので無理に理解する必要はないです。 GetDrivesInfoByType.vbs以下のコードをコピペして「test.vbs」等と保存して実行すれば、実行結果をメッセージボックスで表示してくれます。 ただ、申し訳ないのですが、私の手元にUSBメモリがないので実際に検出できているのかはわかりません。
Satochan24

2016/09/13 06:21

コメント有難うございました。時間の余裕のあるときに試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問