PowerShellでコピーコマンドなどで、コピー先のファイル名を自動的にセットするための方法として、既存ファイル名の末尾に数値の連番を付与します。
ソースコード
ファイル名:nsn.go
// nsn.go
// New-SEQName - 同名ファイルが有る場合連番を付与するコード
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage: nsn <filePath>")
return
}
base := os.Args[1]
// Base が実在しなければそのまま返す
if _, err := os.Stat(base); os.IsNotExist(err) {
fmt.Println(base)
return
}
directory := filepath.Dir(base)
if directory == "." || directory == "" {
directory = "."
}
filename := filepath.Base(base)
ext := filepath.Ext(filename)
nameOnly := filename[:len(filename)-len(ext)]
index := 1
for {
newName := filepath.Join(directory, fmt.Sprintf("%s(%d)%s", nameOnly, index, ext))
if _, err := os.Stat(newName); os.IsNotExist(err) {
fmt.Println(newName)
break
}
index++
}
}
ビルド
go build nsn.go
成功すると、”nsn.exe”ファイルが出来上がる。
実行例
ls *.png | % { cp $_.FullName (./nsn.exe $_.Name) }

コメント