コンテンツへスキップ

サブフォルダ内に一括コピー

PC にログインしているユーザーのフォルダ内に、設定ファイルを配置していかないといけないんだけど、面倒くさいので、Powershell でさくっとできないかなーと思い、Copilot 姐さんに相談してみた。

Copilot 姐さんとのやり取りが会話になってて素晴らしい。
前回の質問を考慮にいれて、関連性のある返答をしてくれるので、修正などもしやすくて惚れそうです。

サブフォルダ内に一括コピー

Powershell で一つのファイルを複数のフォルダ内に一括挿入する方法教えて

PowerShellを使って一つのファイルを複数のフォルダに一括でコピーする方法は、以下の手順で行うことができます。

  1. コピー先フォルダのリストを作成: コピー先のフォルダパスをリストにします。
  2. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したファイルを複数のフォルダにコピーします。
# コピーするファイルのパス
$fileToCopy = "C:\path\to\your\file.txt"

# コピー先フォルダのリスト
$destinationFolders = @(
    "C:\path\to\folder1",
    "C:\path\to\folder2",
    "C:\path\to\folder3"
)

# 各フォルダにファイルをコピー
foreach ($folder in $destinationFolders) {
    Copy-Item -Path $fileToCopy -Destination $folder
}

リストではなく、フォルダ内のサブフォルダではどうなりますか

フォルダ内のサブフォルダに一括でファイルをコピーするには、PowerShellを使ってサブフォルダを再帰的に検索し、各サブフォルダにファイルをコピーするスクリプトを作成します。以下の手順で行うことができます。

  1. コピーするファイルのパスを設定: コピーするファイルのパスを指定します。
  2. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したフォルダ内のすべてのサブフォルダを検索し、各サブフォルダにファイルをコピーします。
# コピーするファイルのパス
$fileToCopy = "C:\path\to\your\file.txt"

# 親フォルダのパス
$parentFolder = "C:\path\to\parent\folder"

# 親フォルダ内のすべてのサブフォルダを取得
$subFolders = Get-ChildItem -Path $parentFolder -Directory -Recurse

# 各サブフォルダにファイルをコピー
foreach ($folder in $subFolders) {
    Copy-Item -Path $fileToCopy -Destination $folder.FullName
}

サブフォルダの中で、一部のフォルダにはコピーしないようにしたい

特定のサブフォルダを除外してファイルをコピーするには、PowerShellスクリプトに条件を追加することで実現できます。以下の手順で行います。

  1. コピーするファイルのパスを設定: コピーするファイルのパスを指定します。
  2. 除外するフォルダのリストを作成: 除外するフォルダ名をリストにします。
  3. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したフォルダ内のすべてのサブフォルダを検索し、除外リストに含まれないサブフォルダにファイルをコピーします。
# コピーするファイルのパス
$fileToCopy = "C:\path\to\your\file.txt"

# 親フォルダのパス
$parentFolder = "C:\path\to\parent\folder"

# 除外するフォルダのリスト
$excludeFolders = @("ExcludeFolder1", "ExcludeFolder2")

# 親フォルダ内のすべてのサブフォルダを取得
$subFolders = Get-ChildItem -Path $parentFolder -Directory -Recurse

# 各サブフォルダにファイルをコピー(除外リストに含まれない場合)
foreach ($folder in $subFolders) {
    if ($excludeFolders -notcontains $folder.Name) {
        Copy-Item -Path $fileToCopy -Destination $folder.FullName
    }
}

直下のフォルダだけでいい

了解しました。直下のフォルダだけにファイルをコピーするには、再帰的な検索を行わずに、親フォルダ内の直下のフォルダのみを対象にするスクリプトを作成します。以下の手順で行います。

  1. コピーするファイルのパスを設定: コピーするファイルのパスを指定します。
  2. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したフォルダ内の直下のサブフォルダにファイルをコピーします。
# コピーするファイルのパス
$fileToCopy = "C:\path\to\your\file.txt"

# 親フォルダのパス
$parentFolder = "C:\path\to\parent\folder"

# 親フォルダ内の直下のサブフォルダを取得
$subFolders = Get-ChildItem -Path $parentFolder -Directory

# 各サブフォルダにファイルをコピー
foreach ($folder in $subFolders) {
    Copy-Item -Path $fileToCopy -Destination $folder.FullName
}

同じ名前のファイルがあった場合は、リネームしてから上書きしたい

同じ名前のファイルが存在する場合にリネームしてからコピーするには、PowerShellスクリプトに条件を追加して、ファイル名の重複をチェックし、必要に応じてリネームする処理を追加します。以下の手順で行います。

  1. コピーするファイルのパスを設定: コピーするファイルのパスを指定します。
  2. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したフォルダ内の直下のサブフォルダにファイルをコピーし、同じ名前のファイルが存在する場合はリネームします。

なるほど。コピーするファイルの方をリネームしているわけね。

# コピーするファイルのパス
$fileToCopy = "C:\path\to\your\file.txt"

# 親フォルダのパス
$parentFolder = "C:\path\to\parent\folder"

# 親フォルダ内の直下のサブフォルダを取得
$subFolders = Get-ChildItem -Path $parentFolder -Directory

# 各サブフォルダにファイルをコピー
foreach ($folder in $subFolders) {
    $destinationPath = Join-Path -Path $folder.FullName -ChildPath (Split-Path -Leaf $fileToCopy)
    
    # 同じ名前のファイルが存在するかチェック
    if (Test-Path -Path $destinationPath) {
        # ファイル名をリネーム
        $newFileName = [System.IO.Path]::GetFileNameWithoutExtension($destinationPath) + "_copy" + [System.IO.Path]::GetExtension($destinationPath)
        $newDestinationPath = Join-Path -Path $folder.FullName -ChildPath $newFileName
        Copy-Item -Path $fileToCopy -Destination $newDestinationPath
    } else {
        Copy-Item -Path $fileToCopy -Destination $destinationPath
    }
}

既存のファイル名を変更したいです。

既存のファイル名を変更するには、PowerShellを使用してファイルのリネームを行うことができます。以下の手順で行います。

  1. リネームするファイルのパスを設定: リネームするファイルのパスを指定します。
  2. 新しいファイル名を設定: 新しいファイル名を指定します。
  3. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したファイルを新しい名前にリネームします。
# リネームするファイルのパス
$fileToRename = "C:\path\to\your\file.txt"

# 新しいファイル名
$newFileName = "newfile.txt"

# ファイルのディレクトリを取得
$fileDirectory = Split-Path -Path $fileToRename

# 新しいファイルのフルパスを作成
$newFilePath = Join-Path -Path $fileDirectory -ChildPath $newFileName

# ファイルをリネーム
Rename-Item -Path $fileToRename -NewName $newFileName

ファイルの削除

ファイルを削除するには、PowerShellを使用して簡単に行うことができます。以下の手順で行います。

  1. 削除するファイルのパスを設定: 削除するファイルのパスを指定します。
  2. PowerShellスクリプトの作成: 以下のようなスクリプトを作成します。このスクリプトは、指定したファイルを削除します。
# 削除するファイルのパス
$fileToDelete = "C:\path\to\your\file.txt"

# ファイルを削除
Remove-Item -Path $fileToDelete

新規にログインするユーザーの対策で、こんなのお願いしたら、

(Visited 16 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です