PowerShellで、robocopyコマンドを使って、UserProfile配下の特定フォルダからカレントフォルダ配下の指定フォルダにファイルをコピーする処理を作成してください。処理においては検査したファイルやフォルダの名前は表示せず、実際にコピー・削除したファイル名のみを表示してください。

以下は、PowerShellで robocopy を使用して指定のフォルダからカレントフォルダ配下の指定フォルダにファイルをコピーし、コピーまたは削除されたファイル名のみを表示するスクリプト例です。

スクリプト

# ユーザープロファイル配下のコピー元フォルダを指定
$sourceFolder = "$env:USERPROFILE\\\\Documents\\\\SourceFolder"

# カレントディレクトリ配下のコピー先フォルダを指定
$destinationFolder = ".\\\\DestinationFolder"

# コピー先フォルダが存在しない場合は作成
if (-not (Test-Path -Path $destinationFolder)) {
    New-Item -ItemType Directory -Path $destinationFolder | Out-Null
}

# robocopyオプションの設定
# /S : サブフォルダもコピー(空フォルダは含まない)
# /Z : 再開可能モード
# /COPY:DAT : ファイル属性のコピー(デフォルト)
# /NP : 進捗表示を省略
# /LOG+: 書き込むログファイル(エラー情報をファイルに記録可能)
$robocopyOptions = "/S /Z /COPY:DAT /NP /LOG+:robocopy.log"

# robocopyの実行
Write-Host "Copying files from $sourceFolder to $destinationFolder..."
$copyResult = robocopy $sourceFolder $destinationFolder $robocopyOptions

# 実際にコピーされたファイルの出力
$copyResult | ForEach-Object {
    if ($_ -match '^\\\\s+\\\\d+\\\\s+\\\\d+\\\\s+(.*)$') {
        $fileName = $matches[1].Trim()
        Write-Host "Copied: $fileName"
    }
}

# ログファイルの削除(必要に応じて削除)
Remove-Item -Path "robocopy.log" -Force

主なポイント

  1. $env:USERPROFILE を使用してユーザーのプロファイルフォルダを動的に取得。
  2. robocopy のオプションで進捗や検査情報を抑制し、結果ログからコピーされたファイル名を抽出。
  3. ログファイルの解析は正規表現を使用。
  4. コピー先フォルダが存在しない場合、自動的に作成。

注意

このスクリプトをPowerShellで実行すれば、指定の動作が実現できます。

コピーの処理を関数化し、COPY(コピー元フォルダ名, コピー先フォルダ名)と言う形式で呼び出せるようにしてください。

以下は、PowerShellでコピー処理を関数化したスクリプト例です。関数名を COPY として、コピー元フォルダ名とコピー先フォルダ名を引数として渡す形式にしています。

関数化したスクリプト

# COPY関数の定義
function COPY {
    param (
        [string]$SourceFolderName,   # コピー元フォルダ名(UserProfile配下)
        [string]$DestinationFolderName # コピー先フォルダ名(カレントディレクトリ配下)
    )

    # ユーザープロファイル配下のコピー元フォルダ
    $sourceFolder = Join-Path -Path $env:USERPROFILE -ChildPath $SourceFolderName

    # カレントディレクトリ配下のコピー先フォルダ
    $destinationFolder = Join-Path -Path (Get-Location) -ChildPath $DestinationFolderName

    # コピー先フォルダが存在しない場合は作成
    if (-not (Test-Path -Path $destinationFolder)) {
        New-Item -ItemType Directory -Path $destinationFolder | Out-Null
    }

    # robocopyオプションの設定
    # /S : サブフォルダもコピー(空フォルダは含まない)
    # /Z : 再開可能モード
    # /COPY:DAT : ファイル属性のコピー(デフォルト)
    # /NP : 進捗表示を省略
    # /LOG+ : ログを保存(結果の解析用)
    $robocopyOptions = "/S /Z /COPY:DAT /NP /LOG+:robocopy.log"

    # robocopyの実行
    Write-Host "Copying files from $sourceFolder to $destinationFolder..."
    $copyResult = robocopy $sourceFolder $destinationFolder $robocopyOptions

    # 実際にコピーされたファイルの出力
    $copyResult | ForEach-Object {
        if ($_ -match '^\\\\s+\\\\d+\\\\s+\\\\d+\\\\s+(.*)$') {
            $fileName = $matches[1].Trim()
            Write-Host "Copied: $fileName"
        }
    }

    # ログファイルの削除(必要に応じて削除)
    Remove-Item -Path "robocopy.log" -Force
}

# サンプル呼び出し
# コピー元: UserProfile配下の "Documents\\\\SourceFolder"
# コピー先: カレントディレクトリ配下の "DestinationFolder"
COPY "Documents\\\\SourceFolder" "DestinationFolder"

使用方法

  1. スクリプトをPowerShellに保存し、実行します。