LoginSignup
7
13

More than 5 years have passed since last update.

ファイル名に日付を付けてファイルをコピーする

Posted at

はじめに

PowerShellでファイルをコピーする際、バックアップを兼ねてファイル名に日付を付ける、というケースがあるとします。
その際に、自動で日付を付ける方法について考えます。

前提

ツール バージョン
PowerShell 5.1.17134.48
Visual Studio Code 1.24.0

今回使うコマンドレットであれば、どのバージョンであっても動作すると思われます。

また、フォルダ構成は以下の通りです。

ps_folder.PNG

sourceフォルダのファイルを、backupフォルダに移すものとします。

やり方

日付を取得する

本日日付を取得します。

backup.ps1
$date = Get-Date -Format "yyyyMMdd";

Get-Dateコマンドレットで、本日日付を取得できます。(DateTime型)
-Formatオプションを付与すると、指定した書式の文字列を取得できます。

書式指定に関してはこちら

コピーする

Copy-Itemコマンドレットを使用します。

Copy-Itemは、単にファイルをコピーするだけでなく、ファイル名を変えてコピーする機能もあります。

-Destinationにファイル名まで指定するといいです。
ここでは、元のファイル(memo.txt)の先頭に、日付を付けます。

backup.ps1
$date = Get-Date -Format "yyyyMMdd";

$dest = Join-Path .\backup ($date + "_memo.txt")
Copy-Item -Path ".\source\memo.txt" -Destination $dest -Force

複数ファイルに対応する

基本的には、ループ内で繰り返しコピーすることとなります。

フォルダ内のファイルを取得する

Get-ChildItemを使用します。

backup.ps1
$files = Get-ChildItem -Path .\source -File;

今回はファイルのみで良いため、-Fileを付けています。
また、これで返されるオブジェクトはファイルの情報を持っています。

コピーする

先ほどは、memo.txtのように、ファイル名を文字列で直接書いていました。
今回は、フォルダ内の項目をすべて使用するので、ループで取得します。

backup.ps1
foreach ($file in $files) {
    $dest = Join-Path .\backup ($date + "_" + $file.Name)
    Copy-Item -Path $file.FullName -Destination $dest -Force
}

ファイル情報から、Nameでファイル名、FullNameで絶対パスを取得し、使用しています。

コピーするファイルの条件を指定する

Get-ChildItemでは、項目を取得する際の条件を指定できます。

詳細はこちらを見ていただくとして、一部紹介します。

拡張子を指定

backup.ps1
$files = Get-ChildItem -Path .\source\*.txt -File;

-Pathで、上のようにワイルドカードを使用します。

特定の文字から始まるファイルを除く

例えば、「ファイル名が数字から始まるファイルを除外する」場合、

backup.ps1
$files = Get-ChildItem -Path .\source\* -File -Include *.txt -Exclude [0-9]*;

のように、-Includeおよび-Excludeオプションを使って、柔軟に対処することもできます。

全文

backup.ps1
$date = Get-Date -Format "yyyyMMdd";

$files = Get-ChildItem -Path .\source\* -File -Include *.txt -Exclude [0-9]*;

foreach ($file in $files) {
    $dest = Join-Path .\backup ($date + "_" + $file.Name)
    Copy-Item -Path $file.FullName -Destination $dest -Force
}

結果

コピー元

ps_folder_source.PNG

バックアップ

ps_folder_backup.PNG

スクリプトで指定したように、「拡張子が.txt」かつ「ファイル名先頭が数字ではない」ファイルが、バックアップされています。

7
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
13