朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
PowerShell ファイルの名前を変更する





名前を変更するスクリプトです。
名前の変更自体は、Rename-Itemで行うのですが、検索してその結果に対して名前変更を行うようになっています。
また、連番を付けれるようにしています。
連番の所のフォーマットを指定してください。
フォーマットに関してはこちらを参考にしてください。
拡張子に関しては、指定もできますし、現在のファイル名での拡張子をそのまま使用するようにもできます。

使い方

#ヒットしたテキストファイルを、test01.csv、test02.csv・・・と変更する。
Rename.ps1 -in *.txt -base test -format 00 -start 1 -ext csv
#ヒットしたファイルを、拡張子はそのままで数値は100から開始するように変更する。
Rename.ps1 -r -path c:\* -in sample*.* -base data -format 000 -start 100

Rename.ps1

#$r:オプションの-rで再帰検索が指定できる
#$include:ファイル名の指定
#$exclude:ファイル名で除外するもの
#$path:検索する対象のパス(省略時はカレントディレクトリになります)
#-Encodingでdefaultを指定すると、日本語OSではシフトJISになります。
#$base:名前変更時の不変な部分
#$format:数値の部分のフォーマット。.Netに準ずる。
#$start:番号を付ける時の初期値。指定しない場合は0からとなる。
#$ext:名前変更後の拡張子。'.'は含めない。指定しない場合は元のファイル名の拡張子と同じになる。
param([switch] $r, $include, $exclude, $path, [string] $base, [string] $format, [int] $start, $ext)
#ファイル名が.\xxx.txtという感じで.\がついていた時のための処理
if($include -ne $null)
{
	if($include.StartsWith(".\"))
	{
		$include = $include.Remove(0,2)
	}
}
#ファイル名が.\xxx.txtという感じで.\がついていた時のための処理
if($exclude -ne $null)
{
	if($exclude.StartsWith(".\"))
	{
		$exclude = $exclude.Remove(0,2)
	}
}
#パスが指定されない時の処理
if($path -eq $null)
{
	$path = "*"
}
#拡張子を自動で取得するために必要な.Net Frameworkのライブラリをロードする
[Void][Reflection.Assembly]::LoadWithPartialName("System.IO")
if($r -eq $false){
	$result = Get-ChildItem -Path $path -Include $include -Exclude $exclude
}elseif($r -eq $true){
	$result = Get-ChildItem -Path $path -Include $include -Exclude $exclude -Recurse -Force
}
#結果の表示
$result
#ヒット数の表示
if($result -eq $null){
	#0件の場合
	$count = 0
}elseif($result.gettype().fullname.toupper() -eq "SYSTEM.OBJECT[]"){
	#2件以上の場合
	$count = $result.length
}else{
	#1件の場合
	$count = 1
}
"`nCount`n---------`n" + $count
#0件の場合は後の処理は必要ない
if($count -eq 0){
	return
}
"名前変更しますか?(y/n)"
$ans = Read-Host
if($ans.ToLower() -eq "y"){
	$i = $start
	#変更する
	if($ext -eq $null){
		$result | Foreach-Object{ Rename-Item -Path $_ -NewName ($base + ($i++).ToString($format) + [System.IO.Path]::GetExtension($_)) }
	}else{
		$result | Foreach-Object{ Rename-Item -Path $_ -NewName ($base + ($i++).ToString($format) + "." + $ext) }
	}
}








良いやや良い普通やや悪い悪い

投稿日時評価コメント