RPA初心者による無料でRPA

RPAやIOTに関するブログ …時々富士山

3.フォルダ内比較

今回はフォルダ内の比較方法、バックアップ方法を説明します。
私はこれを利用してSDSの管理を行っています。
私の部署では、営業や、企画、研究、製造、物流等の各箇所が入手したSDSを共通ネットワーク上のフォルダにそれぞれ収納し管理しています。これにより誰でも最新版を閲覧できます。一方、製造現場では紙によるファイルを保管しております(この理由としては、pcの数が少ない現場や、紙の方がアクセスしやすい点が挙げられます。古い体質だけどね…)。これより、常に最新版を印刷して保管しておく必要があります。紙ファイルが最新版でないと、社内パトロールで指摘されることになります。
各箇所が共通ネットワークフォルダにSDSを入れた時に、連絡してくれればいいのですが、なかなか難しいです。

そこで、powershellと、同じくwindows標準のタスクスケジューラを使用して、週1回フォルダ内に更新があったか確認するプログラムを作成しました。

●長くなりましたが、以下がプログラムです。

#SDSフォルダの更新確認
#■検索フォルダ
$New_path = 'C:\Users\Desktop\1'
#■比較フォルダ
$Old_path =  'C:\Users\Desktop\2'

#検索フォルダ情報取得
$New1 = get-childitem -path $New_path -recurse
#比較フォルダ情報取得
$Old1 = get-childitem -path $Old_path -recurse
#比較
$compare = compare-object $New1 $Old1
#更新されてたら、テキストファイルを作成
if ([string]::IsNullOrEmpty($compare))
    {
    }
    else
    {
    $Today = (Get-Date).AddDays(0).ToString("yyyyMMdd")
    $textfilename = "★SDS更新あり_" + "$Today" + ".txt"
 #■テキスト出力
    compare-object $New1 $Old1 | Out-File C:\Users\Desktop\$textfilename

    #Oldフォルダを現在に更新
    robocopy $New_path $Old_path /MIR /XO /NP
    }

プログラム内の■を自分のフォルダパスに置き換えて下さい。
○フォルダの住所を表すフォルダパスの確認方法
フォルダを開いて、赤枠で確認できます。
f:id:hero32:20200220081534j:plain

●解説
共通ネットワークフォルダと自分のpcのフォルダを比較し、更新されたファイルのみをコピーし、その結果をテキストファイルで出力します。


また、タスクスケジューラの登録方法は以下です。

f:id:hero32:20200309183549j:plain

私は毎週水曜日の休み時間中に起動させています。指定時間になるとpowershellウインドウが突然起動します。

●バックアップ
下記コードでは、更新された分だけフォルダ内をバックアップします。

#■検索フォルダ
$New_path = 'C:\Users\Desktop\1'
#■比較フォルダ
$Old_path =  'C:\Users\Desktop\2'

robocopy $New_path $Old_path /MIR /XO /NP

私の会社では共通ネットワークフォルダを全社的にバックアップするシステムを持っていますが、間違って消してしまったファイルを復元してもらうには、申請書の起案が必要で時間がかかります。
このため、課の共通ネットワークフォルダを外付けHDDにバックアップし、課内で対応しています。
バックアップはたくさんある方がいいしね。