📖

OK

2023/12/08に公開6

ユーザーにフォルダを選択させる関数

function Select-Folder($description) {
$folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$folderBrowser.Description = $description
$folderBrowser.ShowDialog() | Out-Null
return $folderBrowser.SelectedPath
}

ディレクトリ選択

$readDirectory = Select-Folder "読み込みディレクトリを選択してください。"
$outputDirectory = Select-Folder "アウトプットディレクトリを選択してください。"

タイムスタンプフォルダの作成

$timestamp = Get-Date -Format "yyyy-MM-dd-HH-mm-ss"
$timestampFolder = New-Item -ItemType Directory -Path (Join-Path $outputDirectory $timestamp)

ZIPファイルの一覧を取得し、解凍

Get-ChildItem -Path $readDirectory -Filter "*.zip" | ForEach-Object {
$destination = Join-Path $timestampFolder $.BaseName
New-Item -ItemType Directory -Path $destination -Force
Expand-Archive $
.FullName -DestinationPath $destination
}

解凍したファイルの一覧を取得し、コピー

Get-ChildItem -Path $timestampFolder -Recurse | Where-Object { -not $.PSIsContainer } | ForEach-Object {
$copyPath = $
.DirectoryName + "" + $.BaseName + "cp" + $.Extension
Copy-Item $
.FullName -Destination $copyPath

# 拡張子を.txtに変更
$newTxtPath = [System.IO.Path]::ChangeExtension($copyPath, ".txt")
Rename-Item -Path $copyPath -NewName $newTxtPath

}

処理が完了したことを示すメッセージ

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

Discussion

akiyamah006akiyamah006

param (
[string]$readDirectory,
[string]$outputDirectory
)

タイムスタンプフォルダの作成

$timestamp = Get-Date -Format "yyyy-MM-dd-HH-mm-ss"
$timestampFolder = New-Item -ItemType Directory -Path (Join-Path $outputDirectory $timestamp)

ZIPファイルの一覧を取得し、解凍

Get-ChildItem -Path $readDirectory -Filter "*.zip" | ForEach-Object {
$destination = Join-Path $timestampFolder $.BaseName
New-Item -ItemType Directory -Path $destination -Force
Expand-Archive $
.FullName -DestinationPath $destination
}

解凍したファイルの一覧を取得し、コピー

Get-ChildItem -Path $timestampFolder -Recurse | Where-Object { -not $.PSIsContainer } | ForEach-Object {
$copyPath = $
.DirectoryName + "" + $.BaseName + "cp" + $.Extension
Copy-Item $
.FullName -Destination $copyPath

# 拡張子を.txtに変更
$newTxtPath = [System.IO.Path]::ChangeExtension($copyPath, ".txt")
Rename-Item -Path $copyPath -NewName $newTxtPath

}

処理が完了したことを示すメッセージ

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

akiyamah006akiyamah006

@echo off
SET /P readDirectory="読み込みディレクトリを入力してください: "
SET /P outputDirectory="アウトプットディレクトリを入力してください: "

PowerShell -NoProfile -ExecutionPolicy Bypass -File "your_script.ps1" -readDirectory "%readDirectory%" -outputDirectory "%outputDirectory%"
pause

akiyamah006akiyamah006

Add-Type -AssemblyName System.Windows.Forms

ユーザーにフォルダを選択させる関数

function Select-Folder($description) {
$folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$folderBrowser.Description = $description
if ($folderBrowser.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
return $folderBrowser.SelectedPath
} else {
exit
}
}

ディレクトリ選択

$readDirectory = Select-Folder "読み込みディレクトリを選択してください。"
$outputDirectory = Select-Folder "アウトプットディレクトリを選択してください。"

タイムスタンプフォルダの作成

$timestamp = Get-Date -Format "yyyy-MM-dd-HH-mm-ss"
$timestampFolder = New-Item -ItemType Directory -Path (Join-Path $outputDirectory $timestamp)

読み込みディレクトリ内のフォルダ名一覧を取得し、コピー

Get-ChildItem -Path $readDirectory -Directory | ForEach-Object {
copyPath = Join-Path $_.Parent.FullName (_.Name + "cp")
Copy-Item $
.FullName -Destination $copyPath -Recurse

# コピーしたフォルダ内のファイルの拡張子を.txtに変更
Get-ChildItem -Path $copyPath -Recurse | Where-Object { -not $_.PSIsContainer } | ForEach-Object {
    $newTxtPath = [System.IO.Path]::ChangeExtension($_.FullName, ".txt")
    Rename-Item -Path $_.FullName -NewName $newTxtPath
}

}

処理が完了したことを示すメッセージ

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

akiyamah006akiyamah006

Add-Type -AssemblyName System.Windows.Forms

ユーザーにフォルダを選択させる関数

function Select-Folder($description) {
$folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$folderBrowser.Description = $description
if ($folderBrowser.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
return $folderBrowser.SelectedPath
} else {
exit
}
}

ディレクトリ選択

$readDirectory = Select-Folder "読み込みディレクトリを選択してください。"

ディレクトリ内のフォルダ名一覧を取得し、処理

Get-ChildItem -Path $readDirectory -Directory | ForEach-Object {
$newDirPath = $_.FullName + "_cp"
New-Item -ItemType Directory -Path $newDirPath -Force

# 各ファイルをコピー
Get-ChildItem -Path $_.FullName -File | ForEach-Object {
    $newFilePath = $newDirPath + "\" + $_.BaseName + "_cp.txt"
    $_ | Get-Content | Set-Content -Path $newFilePath
}

}

処理が完了したことを示すメッセージ

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

akiyamah006akiyamah006

@echo off
PowerShell -NoProfile -ExecutionPolicy Bypass -File "script.ps1"
pause

akiyamah006akiyamah006

Add-Type -AssemblyName System.Windows.Forms

フォルダ選択ダイアログを作成する関数

function Select-Folder($description) {
$folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$folderBrowser.Description = $description
$folderBrowser.ShowNewFolderButton = $true
if ($folderBrowser.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
return $folderBrowser.SelectedPath
} else {
return $null
}
}

読み込みディレクトリを選択

$inputDirectory = Select-Folder -description "読み込みディレクトリを選択してください。"
if ($inputDirectory) {
Write-Host "選択された読み込みディレクトリ: $inputDirectory"
} else {
Write-Host "読み込みディレクトリは選択されませんでした。"
}

アウトプットディレクトリを選択

$outputDirectory = Select-Folder -description "アウトプットディレクトリを選択してください。"
if ($outputDirectory) {
Write-Host "選択されたアウトプットディレクトリ: $outputDirectory"
} else {
Write-Host "アウトプットディレクトリは選択されませんでした。"
}