見出し画像

(AI問答)拡張子 .eml を100件ずつのフォルダごとに分けるpowetshellソースを書いてください。日本語での解説コメント付き。 サブフォルダまで見る。

A1.ChatGPT (OpenAI)

以下のPowerShellスクリプトは、指定したフォルダ内(およびサブフォルダを含む)にある .eml ファイルを 100 件ずつのフォルダに整理するものです。

スクリプトの説明:

  1. 対象フォルダを指定:変数 $sourceDirectory に整理したい .eml ファイルがあるフォルダを指定。

  2. 整理用のフォルダ作成:Sorted というフォルダを作成し、その中に 100 件ごとのフォルダを作成。

  3. .eml ファイルを再帰的に取得:Get-ChildItem を使い、サブフォルダも含め .eml ファイルをリストアップ。

  4. 100 件ごとにフォルダ分け:Batch_1, Batch_2, … のようにフォルダを作成し、100 件ごとに分けて移動。

  5. 処理完了のメッセージを出力

このスクリプトを実行すると、整理された .eml ファイルが Sorted フォルダ内に 100 件ずつ分かれたフォルダに格納されます。

# スキャン対象のディレクトリを指定
$sourceDirectory = "C:\Path\To\Your\Folder"  # ここを適切なパスに変更
$destinationBase = "$sourceDirectory\Sorted"

# もし整理用フォルダがなければ作成
if (!(Test-Path $destinationBase)) {
    New-Item -ItemType Directory -Path $destinationBase | Out-Null
}

# .eml ファイルをすべて取得(サブフォルダも含む)
$emlFiles = Get-ChildItem -Path $sourceDirectory -Filter "*.eml" -Recurse -File

# カウンタとフォルダインデックスを初期化
$folderIndex = 1
$fileCount = 0

# 最初のフォルダを作成
$targetFolder = "$destinationBase\Batch_$folderIndex"
New-Item -ItemType Directory -Path $targetFolder | Out-Null

foreach ($file in $emlFiles) {
    # ファイルを新しいフォルダへ移動
    Move-Item -Path $file.FullName -Destination $targetFolder
    $fileCount++
    
    # 100ファイルごとに新しいフォルダを作成
    if ($fileCount -ge 100) {
        $folderIndex++
        $fileCount = 0
        $targetFolder = "$destinationBase\Batch_$folderIndex"
        New-Item -ItemType Directory -Path $targetFolder | Out-Null
    }
}

Write-Output "処理が完了しました。整理されたファイルは $destinationBase 内にあります。"

A2.Gemini (Google Bard)

はい、拡張子.emlファイルを100件ずつフォルダに分割するPowerShellスクリプトを作成しました。以下にスクリプトと解説を示します。

PowerShell

# スクリプトの開始ディレクトリを指定(必要に応じて変更)
$startPath = "C:\eml_files"

# 出力先フォルダを指定(必要に応じて変更)
$outputPath = "C:\eml_files_organized"

# 出力先フォルダが存在しない場合は作成
if (!(Test-Path -Path $outputPath)) {
    New-Item -ItemType Directory -Path $outputPath
}

# .emlファイルを再帰的に検索
$emlFiles = Get-ChildItem -Path $startPath -Filter "*.eml" -Recurse

# ファイルを100件ごとに分割し、フォルダに移動
$fileCount = 0
$folderCount = 1

foreach ($file in $emlFiles) {
    if ($fileCount % 100 -eq 0) {
        # 新しいフォルダを作成
        $newFolderPath = Join-Path -Path $outputPath -ChildPath ("Folder_" + $folderCount)
        New-Item -ItemType Directory -Path $newFolderPath
        $folderCount++
    }

    # ファイルを移動
    $destinationPath = Join-Path -Path $newFolderPath -ChildPath $file.Name
    Move-Item -Path $file.FullName -Destination $destinationPath
    $fileCount++
}

Write-Host "処理が完了しました。"

スクリプトの解説:

  1. 開始ディレクトリと出力先ディレクトリの指定:

    • $startPath: .emlファイルが存在する親フォルダのパスを指定します。必要に応じて変更してください。

    • $outputPath: 分割されたファイルを保存する出力先フォルダのパスを指定します。必要に応じて変更してください。

  2. 出力先フォルダの作成:

    • Test-Pathコマンドで出力先フォルダが存在するか確認し、存在しない場合はNew-Itemコマンドで作成します。

  3. .emlファイルの検索:

    • Get-ChildItemコマンドで$startPath以下のすべてのサブフォルダから拡張子.emlのファイルを再帰的に検索し、$emlFiles変数に格納します。

  4. ファイルの分割と移動:

    • foreachループで$emlFiles内の各ファイルを処理します。

    • $fileCount変数を100で割った余りが0の場合、新しいフォルダを作成します。

      • フォルダ名はFolder_1, Folder_2, ...のように連番になります。

    • Move-Itemコマンドでファイルを新しいフォルダに移動します。

    • $fileCount変数をインクリメントします。

  5. 処理完了メッセージの表示:

    • スクリプトの最後にWrite-Hostコマンドで処理が完了したことを通知します。

スクリプトの使用方法:

  1. 上記のスクリプトをテキストエディタにコピーし、.ps1拡張子で保存します(例:organize_eml.ps1)。

  2. PowerShellを起動し、スクリプトを保存したディレクトリに移動します。

  3. .\organize_eml.ps1コマンドを実行します。

注意:

  • スクリプトを実行する前に、$startPathと$outputPath変数を実際のパスに変更してください。

  • 出力先フォルダに同じ名前のフォルダが既に存在する場合、エラーが発生する可能性があります。

  • ファイルの移動には時間がかかる場合があります。ファイル数が多い場合は、処理時間を見積もってください。

  • スクリプト実行前にemlファイルのバックアップを推奨します。

A3. Copilot (BingAI)

わかりました!以下に、拡張子 `.eml` のファイルをサブフォルダも含めて100件ずつのフォルダに分けるPowerShellスクリプトを作成しました。コード内に日本語での解説コメントを付けています。

# 処理を行いたいディレクトリのパスを指定します
$sourceDir = "C:\path\to\your\source\directory"
$destinationBaseDir = "C:\path\to\your\destination\directory"

# ファイルカウンタとフォルダカウンタを初期化します
$fileCount = 0
$folderCount = 1

# 最初の出力フォルダを作成します
$destinationDir = Join-Path -Path $destinationBaseDir -ChildPath "Folder_$folderCount"
New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null

# サブフォルダを含む全ての .eml ファイルを取得します
$emlFiles = Get-ChildItem -Path $sourceDir -Recurse -Filter *.eml

# 各ファイルを処理します
foreach ($file in $emlFiles) {
    # ファイルを出力フォルダにコピーします
    Copy-Item -Path $file.FullName -Destination $destinationDir

    # ファイルカウンタを増加させます
    $fileCount++

    # ファイルカウンタが100に達した場合、新しいフォルダを作成します
    if ($fileCount -eq 100) {
        $folderCount++
        $destinationDir = Join-Path -Path $destinationBaseDir -ChildPath "Folder_$folderCount"
        New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null
        # ファイルカウンタをリセットします
        $fileCount = 0
    }
}

上記スクリプトは、以下の手順で動作します:

  1. 処理したいディレクトリのパスを `$sourceDir` に設定します。また、出力先の基準ディレクトリのパスを `$destinationBaseDir` に設定します。

  2. ファイルカウンタ `$fileCount` とフォルダカウンタ `$folderCount` を初期化します。

  3. 最初の出力フォルダを作成し、ディレクトリパスを `$destinationDir` に格納します。

  4. サブフォルダを含むすべての `.eml` ファイルを `$emlFiles` に取得します。

  5. 各ファイルを処理し、出力フォルダにコピーします。ファイルカウンタを増加させ、カウンタが100に達した場合は新しいフォルダを作成し、ファイルカウンタをリセットします。

これで、`.eml` ファイルを100件ずつのフォルダごとに分けることができます。お試しください!

A4.Grok (Xai)

以下に、PowerShellで .eml ファイルを100件ずつフォルダに分けるスクリプトを作成しました。日本語のコメントで各部分を説明しています。

powershell

# スクリプトの目的:指定したディレクトリ内の .eml ファイルを、サブフォルダも含めて検索し、
# 100件ごとに新しいフォルダに分けて整理する

# 起点となるディレクトリを指定(必要に応じて変更してください)
$sourceDir = "C:\Users\YourUser\Documents\Emails"

# .eml ファイルをサブフォルダも含めてすべて取得
# -Recurse でサブフォルダも検索対象に、-File でファイルのみを対象に
$emlFiles = Get-ChildItem -Path $sourceDir -Filter "*.eml" -Recurse -File

# ファイル数を確認し、0件の場合はメッセージを表示して終了
if ($emlFiles.Count -eq 0) {
    Write-Host "指定したディレクトリに .eml ファイルが見つかりませんでした。"
    exit
}

# ファイルの総数と進捗状況を表示
Write-Host "処理する .eml ファイルの総数: $($emlFiles.Count)"

# 100件ごとのグループに分けるためのカウンターとフォルダ番号
$fileCounter = 0
$folderNumber = 1

# 各ファイルを処理
foreach ($file in $emlFiles) {
    # 現在のファイルが100件ごとの区切りかどうかをチェック
    if ($fileCounter % 100 -eq 0) {
        # 新しいフォルダ名を作成(例: EML_Folder_1, EML_Folder_2...)
        $newFolderName = "EML_Folder_$folderNumber"
        $newFolderPath = Join-Path -Path $sourceDir -ChildPath $newFolderName
        
        # フォルダがまだ存在しない場合に作成
        if (-not (Test-Path -Path $newFolderPath)) {
            New-Item -Path $newFolderPath -ItemType Directory | Out-Null
            Write-Host "フォルダを作成しました: $newFolderName"
        }
        
        # フォルダ番号を増やす
        $folderNumber++
    }

    # ファイルを新しいフォルダに移動
    $destinationPath = Join-Path -Path $sourceDir -ChildPath $newFolderName
    Move-Item -Path $file.FullName -Destination $destinationPath
    $fileCounter++
    
    # 進捗状況を表示(オプション)
    Write-Host "移動しました: $($file.Name) -> $newFolderName"
}

# 処理完了メッセージ
Write-Host "処理が完了しました。合計 $folderNumber 個のフォルダが作成されました。"

スクリプトの解説

  1. ディレクトリの指定
    $sourceDir に処理したい .eml ファイルが存在するディレクトリを指定します。必要に応じてパスを変更してください。

  2. ファイルの取得
    Get-ChildItem コマンドで、指定ディレクトリ内とそのサブフォルダから .eml ファイルをすべて取得します。-Recurse でサブフォルダも対象に、-Filter "*.eml" で拡張子を限定しています。

  3. ファイル数の確認
    もし .eml ファイルが見つからない場合、スクリプトを終了します。

  4. 100件ごとのフォルダ作成と移動

    • $fileCounter で処理したファイル数をカウントし、100件ごとに新しいフォルダを作成。

    • フォルダ名は EML_Folder_1, EML_Folder_2 のように連番で生成。

    • Move-Item でファイルを新しいフォルダに移動。

  5. 進捗状況の表示
    処理の進行が分かるよう、各ファイルの移動時にメッセージを表示します(不要なら削除可能)。

使用方法

  1. $sourceDir を実際のフォルダパスに書き換える。

  2. PowerShellでスクリプトを実行(例: .¥script.ps1)。

  3. 指定したディレクトリに EML_Folder_1, EML_Folder_2 などのフォルダが作成され、 .eml ファイルが100件ずつ格納されます。

何か質問があればお気軽にどうぞ!

結論

みなさんは気付きましたか?


いいなと思ったら応援しよう!

エレキテル之助
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 https://t.co/vgyoSFLk59 サポートによりnoteの運営にも貢献できます。

この記事が参加している募集