メモ
- Rename-Itemに使用する文字列の生成をExcelワークシートで行う場合を想定
- スクリプトの起動方法はショートカット(.lnk)アイコンへのドラッグ&ドロップ
Set-StrictMode -Version Latest
$null | Set-Clipboard
try {
Write-Verbose "`n`$args`[0`]`n$($args[0])" -Verbose
}
catch {
throw
}
Set-Location -LiteralPath (Split-Path -LiteralPath $args[0])
$a = @(Get-ChildItem -Force -File)
Add-Type -Language CSharp -TypeDefinition @'
using System.Collections.Generic;
using System.Management.Automation;
using System.Runtime.InteropServices;
namespace MyNamespace {
public class MyClass {
[DllImport(
"Shlwapi.dll", EntryPoint = "StrCmpLogicalW", CharSet = CharSet.Unicode
)]
public static extern int StrCmpLogicalW(
[MarshalAs(UnmanagedType.LPWStr)] string psz1,
[MarshalAs(UnmanagedType.LPWStr)] string psz2
);
public static List<T> MySort<T>(T[] objArray) where T : PSObject {
List<T> objList = new List<T>(objArray);
objList.Sort((x, y) => {
string str1 = x.Properties["Name"].Value.ToString();
string str2 = y.Properties["Name"].Value.ToString();
return StrCmpLogicalW(str1, str2);
});
return objList;
}
}
}
'@
$b = [MyNamespace.MyClass]::MySort([PSCustomObject[]]$a)
$c = $b | Select-Object -Property BaseName, Extension
$c | ConvertTo-Csv -NoTypeInformation | Set-Clipboard
Write-Verbose @"
`nクリップボードに再度コピー
`$c | ConvertTo-Csv -NoTypeInformation | Set-Clipboard
"@ -Verbose
Write-Output -InputObject $c