この記事に出てくる用語
- PowerShell(パワーシェル) … 文字の命令でパソコンを操作する、Windowsに最初から入っている道具。追加のインストールは要らない
- パイプ …
|の記号。前の命令の結果を、次の命令へ渡す - スクリプトファイル … 命令を書いて、ファイル名の末尾(拡張子)を .ps1 にして保存したファイル
- 実行ポリシー … スクリプトファイルを動かせるかどうかを決める、PowerShellの安全設定
結論|ファイルを「見て選ぶ」処理はPowerShellで書ける
「更新日が30日より古いものだけ」「名前にこの文字を含むものだけ」のように、ファイルの名前や日付を見て動きが変わる整理は、PowerShellで自動化できます。
Windowsに最初から入っていて、インストールも管理者権限も要りません。
たとえば「完了報告フォルダで、更新から30日過ぎたファイルをアーカイブへ移す」は、この4行で書けます。
New-Item -ItemType Directory -Force "C:\共有\アーカイブ" | Out-Null
Get-ChildItem "C:\共有\完了報告" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Move-Item -Destination "C:\共有\アーカイブ"
書き換えるのはフォルダの場所と日数だけです。
自分のフォルダに書き換えてから、PowerShellの画面に貼り付けて使います。
なお、条件を見ずに「AからBへ丸ごと運ぶ」だけのバックアップなら、PowerShellは要りません。
「robocopyでフォルダのバックアップを自動化する」の1行で済みます。
作った .ps1 ファイルが「実行が無効」と言われて動かない場合は、後半の「動かないとき」から読んでください。
手順|画面を開いて、書き換えて、貼り付ける
1. PowerShellの画面を開く
スタートメニューで「powershell」と検索し、「Windows PowerShell」を選びます。
「管理者として実行」を選ぶ必要はありません。
(Windows 11の「ターミナル」で開いても、同じくコマンドを打てる画面が出ます)
開くと PS C:\Users\ユーザー名> のような文字の後ろで入力待ちになります。
ここにコマンドを貼り付けて(Ctrl+V)、Enterキーを押すと実行されます。
2. 自分のフォルダに書き換える
冒頭の4行をメモ帳に貼り付けて、そこで書き換えます(保存はまだしません)。
書き換えるのは次の3か所です。
それ以外は書き換えず、そのまま使います。
| 書き換える場所 | 何に変えるか |
|---|---|
C:\共有\完了報告 | 整理したいフォルダの場所 |
C:\共有\アーカイブ(2か所ある) | 移動先のフォルダの場所 |
-30 の数字 | 何日より古いものを移すか |
フォルダの場所は手で打たずにコピーします。
エクスプローラーでそのフォルダを開き、上部のアドレスバー(場所が表示されている欄)の何もないところをクリックします。C:\Users\… のような文字列が選択されるので、Ctrl+Cでコピーして貼り替えてください。
場所を囲んでいる "(半角の二重引用符)は消さずに残します。
%USERPROFILE% のような % で挟む書き方(環境変数)は、PowerShellでは使えません。
アドレスバーからコピーした実際の場所を、そのまま貼ってください。
日数を変えるときは、-30 の数字だけを変えます(-90 なら90日より古いもの)。
マイナスの記号は消さずに残します。
3. 貼り付けて実行し、移動先のフォルダを開いて確かめる
書き換えた4行を全部コピーして、PowerShellの画面に貼り付け、Enterを押します。
「複数行を貼り付けようとしています」という確認が出たら、内容を見て続行してください。
うまくいったかどうかは、移動先のフォルダをエクスプローラーで開いて確かめます。
30日より古いファイルがそちらへ移っていれば成功です。
条件に合うファイルが1つも無ければ、何も移らずに終わります(それも正常です)。
4. この4行の意味|1行目は省けません
1行目は、移動先のフォルダをあらかじめ用意する行です(すでにあれば何もしません)。
この1行は省けません。
移動先のフォルダが無いと、Move-Item は「フォルダへ移す」のではなく「その名前のファイルに変える」動きをします。
1つ目のファイルが、拡張子の無い「アーカイブ」というファイルに化けます。
対象が1件だけのときはエラーも出ないので、気づかないまま進みます。
2行目から下は「ファイルの一覧を取る」「更新日時が30日前より古いものに絞る」「移す」の3段です。
行末の |(パイプ)は、前の結果を次の処理へ渡す記号です。
別の条件にしたいときは、絞る行(3行目)だけを差し替えます。
たとえば「名前に『請求書』を含むものだけ」なら、3行目をこうします(* は「他に何が付いていてもよい」という印です)。
Where-Object { $_.Name -like "*請求書*" } |
5. 毎回使うなら、ファイルに保存する
一度きりの整理なら、画面への貼り付けだけで用が足ります。
毎週・毎月やる整理なら、ファイルにしておくと次から書き換えずに使えます。
- スタートメニューで「メモ帳」と検索して開き、書き換えた4行を貼り付ける
- 「ファイル」→「名前を付けて保存」を選ぶ
- 「ファイルの種類」を「すべてのファイル」に変える(テキスト文書のままだと末尾に .txt が付き、動きません)
- ファイル名を
seiri.ps1のような「半角英数+.ps1」にする - 「エンコード」の欄を「UTF-8 (BOM 付き)」にして保存する
保存した .ps1 は、ダブルクリックでは実行されません(メモ帳などで開かれるだけです)。
ファイルを右クリックして「PowerShell で実行」を選びます(見当たらなければ「その他のオプションを確認」の中にあります)。
ただし初期状態のWindowsでは、実行してもエラーで止まります。
故障ではなく仕様です。
次の節で切り分け方ごと説明します。
動かないとき
「スクリプトの実行が無効になっているため…」と出る
.ps1ファイルを実行したときにこのエラーが出たら、実行ポリシーという安全設定が原因です。
「会社に禁止されている」と受け取る人が多いのですが、多くの場合は違います。
Windowsの初期値が「スクリプトファイルを実行しない(Restricted)」で、誰のパソコンでも最初はこうなっています。
会社の設定かどうかは、コマンド1つで切り分けられます。
手順1と同じ画面で次を実行してください(これはスクリプトではないので、どの設定でも動きます)。
Get-ExecutionPolicy -List
- MachinePolicy か UserPolicy に Undefined 以外の値が入っている … 会社の設定です。自分では変えられません
- すべて Undefined … OSの初期状態のままで、会社は何も設定していません
会社の設定だった場合は、使いたい業務上の理由を添えてIT部門に相談してください。
初期状態のままでも、画面に貼り付けて実行する使い方なら、実行ポリシーの影響を受けません。
この記事の例は、すべてこの方法で試せます。
スクリプトファイルとして保存して使いたい場合は、設定の変更が必要です。
ただし会社のパソコンでは、「技術的にできるか」と「してよいか」は別の問題です。
Microsoftの資料は、画面への貼り付けも実行ポリシーの「回避方法」の1つとして挙げています。
どちらのやり方も、会社のパソコンで使うなら先にIT部門に確認してください。
日本語が化ける・日本語のある行だけエラーになる
.ps1をUTF-8(BOMなし)で保存すると起きます。
メモ帳で開き直し、「名前を付けて保存」でエンコードを「UTF-8 (BOM 付き)」に変えて保存し直してください。
保存形式ごとの症状の早見表と、実行ポリシーを変える前に読むことは「AIに作らせたバッチファイルやPowerShellが動かない・文字化けするときの直し方」にまとめてあります。
補足|古い解説記事にある「VBScript」は選ばない
同じ用途の古い解説には、VBScript(拡張子 .vbs)を使う方法が載っていることがあります。
今から新しく作る道具には選ばないでください。
Microsoftが廃止の工程を公表済みで(2027年頃には初期状態で無効になる予定)、同じことはPowerShellで書けます。
決まった時刻に自動で動かす方法と、バッチファイル・robocopyとの使い分けの全体像は、親記事「ソフトをインストールできない会社のパソコンで自動化する方法」にまとめてあります。
この記事の確認範囲
- Windows 11 Home(バージョン10.0.26200)の画面での話です。ほかの版では画面の名前が違うことがあります
- 制限がかかった会社のパソコンは範囲外です。会社の設定によっては、記事のとおりでも動かないことがあります
- 保存形式ごとの症状は、本文のリンク先の記事にあります


コメント