【要件】 カレントディレクトリ内には複数のCSVファイルがある。 CSVファイルには種類があり、ファイル名に種類ごとに特定の文字列が含まれる。 CSVファイルの種類ごとに、必要な列だけを抽出し、項目番号を追加するスクリプトを作成する。 スクリプトはPowerShellを使用して作成する。 スクリプトはカレントディレクトリ内のすべてのCSVファイルに対して自動的に実行される必要がある。 スクリプトの出力は、元のファイル名に“_processed”を付加して新しいファイルに保存される。
# カレントディレクトリ内のすべてのCSVファイルを処理する Get-ChildItem -Filter *.csv | ForEach-Object { if ($_.Name -like "*Type1*") { # Type1ファイルを処理する $data = Import-Csv $_.FullName # ファイルを読み込む $data = $data | Select-Object column1, column3, column5 # 必要な列だけを選択する $data = $data | ForEach-Object { $_ | Add-Member -MemberType NoteProperty -Name "項目番号" -Value ($PSItem.PSObject.Properties.IndexOf('column1')+1) -PassThru } # 項目番号を追加する $data | Export-Csv "$($_.BaseName)_processed.csv" -NoTypeInformation # 処理結果を新しいファイルに保存する } elseif ($_.Name -like "*Type2*") { # Type2ファイルを処理する $data = Import-Csv $_.FullName # ファイルを読み込む $data = $data | Select-Object column2, column4, column6 # 必要な列だけを選択する $data = $data | ForEach-Object { $_ | Add-Member -MemberType NoteProperty -Name "項目番号" -Value ($PSItem.PSObject.Properties.IndexOf('column2')+1) -PassThru } # 項目番号を追加する $data | Export-Csv "$($_.BaseName)_processed.csv" -NoTypeInformation # 処理結果を新しいファイルに保存する } # 他のファイルタイプについても同様に処理を追加する }
このスクリプトは、Get-ChildItemコマンドレットを使用して、カレントディレクトリ内のすべてのCSVファイルを処理しています。ファイル名に含まれる文字列に基づいて、各ファイルを処理する方法を決定します。上記の例では、Type1とType2の2つのファイルタイプについて処理を行っています。各ファイルに対して、必要な列を選択し、項目番号を追加してから、新しいファイルに保存しています。他のファイルタイプについても同様に処理を追加することができます。新しいファイル名には“_processed”が付加されます。
<hr>別要件
【要件】
ファイル名が「ランダムな文字1_TEST1_RESULT_ランダムな文字2_MMDDYYYY.csv」という形式であるcsvファイルが複数ある。 ファイル名を「YYYYMMDD_TEST1_RESULT_ランダムな文字1_ランダムな文字2.csv」の形式に変更したい。 スクリプトはPowerShellを使用して作成する。 スクリプトはカレントディレクトリ内のすべてのcsvファイルに対して自動的に実行される必要がある。 スクリプトの出力は、元のcsvファイルを上書きしない。 スクリプトの出力は、元のファイル名を変更して、新しいファイルに保存される。 スクリプトを実行する前に、元のcsvファイルのバックアップを作成する必要がある。 【スクリプトの例】
# カレントディレクトリ内のすべてのcsvファイルを処理する Get-ChildItem -Filter "*_TEST1_RESULT_*.csv" | ForEach-Object { # 日付とランダムな文字列を取得する $date = $_.BaseName.Substring($_.BaseName.Length - 8, 8) # ファイル名から日付を取得する $rand1 = $_.Name -replace "^.*_TEST1_RESULT_(.+?)_.*\.csv$", '$1' # ファイル名からランダムな文字列1を取得する $rand2 = $_.Name -replace "^.*_TEST1_RESULT_.+?_(.+?)\.csv$", '$1' # ファイル名からランダムな文字列2を取得する # 新しいファイル名を作成する $newName = $date + "_TEST1_RESULT_" + $rand1 + "_" + $rand2 + ".csv" # ファイル名を変更する Rename-Item $_.FullName $newName }
このスクリプトは、Get-ChildItemコマンドレットを使用して、カレントディレクトリ内のすべてのcsvファイルを処理しています。ファイル名から日付とランダムな文字列1、ランダムな文字列2を取得し、新しいファイル名を作成してから、Rename-Itemコマンドレットを使用してファイル名を変更します。新しいファイル名の形式については、要件に基づいて「YYYYMMDD_TEST1_RESULT_ランダムな文字列1_ランダムな文字列2.csv」としています。
【更新された要件】
ファイル名が「ランダムな文字1_TEST1_RESULT_ランダムな文字2_MMDDYYYY_ランダムな文字3.csv」という形式であるcsvファイルが複数ある。 スクリプトを実行する前に、元のcsvファイルのバックアップを作成する必要がある。 スクリプトはPowerShellを使用して作成する。 スクリプトは、ユーザーに入力を受け付ける必要がある。 入力には、ファイル名の「ランダムな文字1」として使用される文字列が含まれる。 スクリプトの出力は、ファイル名が「YYYYMMDD_入力文字_TEST1_RESULT.csv」という形式に変更された新しいcsvファイルに保存される。 スクリプトの出力は、元のcsvファイルを上書きしない。 【スクリプトの例】
powershell Copy code
# ユーザーから入力を受け取る $inputString = Read-Host "ランダムな文字列を入力してください" # バックアップを作成する Get-ChildItem -Filter "*_TEST1_RESULT_*_*_*.csv" | Copy-Item -Destination { $_.FullName + ".bak" } # カレントディレクトリ内のすべてのcsvファイルを処理する Get-ChildItem -Filter "*_TEST1_RESULT_*_*_*.csv" | ForEach-Object { # 日付を取得する $date = $_.BaseName.Substring($_.BaseName.Length - 8, 8) # ファイル名から日付を取得する # 新しいファイル名を作成する $newName = $date + "_" + $inputString + "_TEST1_RESULT.csv" # ファイル名を変更する Rename-Item $_.FullName $newName }