プロが教える店舗&オフィスのセキュリティ対策術

複数のディレクトリ内の特定のファイルのみ別の端末のディスクにコピー後、元ファイルは削除したいです。
フォルダは10個くらいあります。
xcopyだと思うのですが、作業過程と失敗時のログも出したいのですが、やり方がわかりません。

コピーに失敗したら削除は実行したくないです。

よろしくお願いします。

質問者からの補足コメント

  • 早速回答ありがとうございます。
    こちらバッチファイルで作成するよう指示されているため、バッチファイルの書き方のヒント教えていただけると助かります。
    よろしくお願いいたします。

      補足日時:2022/03/02 18:12
  • おかげさまでどうにか作成できそうです。ありがとうございました。

      補足日時:2022/03/04 18:30
  • 追加で質問お願いします。

    kon77さんに記載していただいた例で移動先フォルダもフォルダ1フォルダ2とコピー元と同じ構成でコピーする場合はどういった記載なるか教えていただけますでしょうか。

      補足日時:2022/03/05 07:19
  • moveで出来たのですが、コピーにしてほしいと言われたので一つのファイルづつコピーして正常にコピーが完了したらそのファイルを削除にしたいです。
    失敗したら、次のファイルのコピーにすすんで、最後にすべてのコピーが終わったら異常があったことを記載して終わりたいです。
    errorlevelで試したのですが、コピーファイルがなくても0を返してしまったりうまくいきませんでした。

      補足日時:2022/03/09 17:40

A 回答 (7件)

> moveで出来たのですが、コピーにしてほしいと言われたので一つのファイルづつコピーして正常にコピーが完了したらそのファイルを削除にしたいです。



ですから、そのコピーと削除を行うのがmoveと言うコマンドです。moveとコピーを別の物だと思っていませんか?この場合、コピー後に削除するかどうか以外は同じです。
「コピーが成功したら削除」の判断は自分でif文で書くより、コマンドに任せてしまった方が安全です。

> errorlevelで試したのですが、コピーファイルがなくても0を返してしまったりうまくいきませんでした。

単に書き方が悪いだけではないかと思います。

set ERRCNT=0
for %%A in (aaa bbb ccc ddd eee) do (
move %%A \\PC2\xxxx\yyyy
if errorlevel 1 set /a ERRCNT+=1
)
if not %ERRCNT% == 0 echo エラーが %ERRCNT% 回発生

for の中で、if not %ERRORLEVEL% == 0 とか書いたのでは?それは駄目です。
    • good
    • 1
この回答へのお礼

無事解決できました。ありがとうございました。

お礼日時:2022/03/10 22:04

「移動元のディレクトリ構造を移動先にも作成する」という意味でしたら、以下のようになるかと思います。



――――――――――――――――――――――――

@echo off

rem ■ 設定
set "移動先=\\192.168.10.2\移動先フォルダ"
set "ログファイル=ログ.txt"

rem ■ 日時出力
echo.>> "%ログファイル%"
echo ■ %date% %time%>> "%ログファイル%"

rem ■ 移動処理
for %%a in (
"C:\移動元フォルダ1\001.txt"
"C:\移動元フォルダ1\002.txt"
"C:\移動元フォルダ2\001.txt"
) do (
echo move "%%~a" "%移動先%%%~pa">>"%ログファイル%"
md "%移動先%%%~pa"
move "%%~a" "%移動先%%%~pa">>"%ログファイル%" 2>&1
)

――――――――――――――――――――――――

ちなみに、パスに関する記述の意味は、以下の通りです。

「"%%~a"」(フルパス) = 「"C:\移動元フォルダ1\001.txt"」
「"%%~da"」(「ドライブ文字:」) = 「"C:"」
「"%%~pa"」(「\対象までのフォルダのみのパス\」) = 「"\移動元フォルダ1\"」
「"%%~na"」(対象の名前部分のみ) = 「"001"」
「"%%~xa"」(対象の「.拡張子」) = 「".txt"」

※「%%~a」の末尾の「a」は任意で、「for %%a」部分で指定します。

又、以下のような処理は、もう少し工夫が必要になります。

・移動元フォルダと同名のフォルダに移動する
・ドライブを表す「C」フォルダも作成する
・ファイルが入ったフォルダを丸ごと移動する
・ファイルによって移動先フォルダが異なる
    • good
    • 1

移動先フォルダは1つなのか、移動元フォルダと同じ名前のフォルダにそれぞれ移動するのか、ログの書式はどのようなものにするか、ログは1回分だけにするか、追記していくか等、細かい仕様が分からないので、完璧なバッチファイルは書けないですが、ざっと一例を書くと以下の線内のような感じでしょうか。



「設定」の部分と、移動元のファイルリストの部分を環境に合わせて書き換えれば動作するかと思います。

テスト用のファイルを作成して試して、思い通りの動作になるように書き換えてみてください。

――――――――――――――――――――――――

@echo off

rem ■ 設定
set "移動先=\\192.168.10.2\移動先フォルダ"
set "ログファイル=ログ.txt"

rem ■ 日時出力
echo.>> "%ログファイル%"
echo ■ %date% %time%>> "%ログファイル%"

rem ■ 移動処理
for %%a in (
"C:\移動元フォルダ1\001.txt"
"C:\移動元フォルダ1\002.txt"
"C:\移動元フォルダ2\001.txt"
) do (
echo move "%%~a" "%移動先%\">>"%ログファイル%"
move "%%~a" "%移動先%\">>"%ログファイル%" 2>&1
)

――――――――――――――――――――――――
    • good
    • 0

>こちらバッチファイルで作成するよう指示されているため、バッチファイルの書き方のヒン



vbs-wshでは駄目なのか指示した人に確認してください。
    • good
    • 0

「複数のディレクトリ内の特定のファイル」という漠然とした話だと、コードを書くのは無理です。



> コピー後、元ファイルは削除したいです。コピーに失敗したら削除は実行したくないです。

moveコマンドを使うとそういう動きになりますね。
    • good
    • 0

Windowsにはcopyやxcopyコマンド、robocopy.exeコマンドが標準装備



robocopy(Robust File Copy)コマンドの活用
    • good
    • 0

OSがWindowsならvbs-wshで簡単にできるけど。

    • good
    • 0

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

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


このQ&Aを見た人がよく見るQ&A