2017-09-05 5 views
0

命名規則で標準化が必要な一連のフォルダがあります。 - プロジェクト1ロングネーム長い名前長い名前の長い長い名前Powershellバッチフォルダ名前の変更 - アイテムの長さと標準化の制限

1245346-プロジェクト2長い名前が長すぎる名前は

長すぎる

12345:現在のフォルダは、のような名前が付けられ

1247プロジェクト3名は

私は現在、このスクリプトを使用していますここに行く:

Get-ChildItem -LiteralPath $Path -Directory | 
ForEach-Object { 
    $_.Name | Out-File "$($_.FullName)\$($_.Name).txt" -Force 
    Rename-Item -LiteralPath $_.FullName -NewName ($_.Name -replace '^(\d+).*$', '$1') 
} 

このスクリプトは、正しく次の操作を行います:

  1. フォルダ
  2. の現在の名前と各フォルダ内のテキストファイルを書くには、数字だけに
を維持するフォルダの名前を変更します

スクリプトがこれを行うことができるようにしたいと思います。

  1. 標準「111111 - プロジェクト名最大60文字」にフォルダの名前を変更したフォルダ
  2. の現在の名前と各フォルダ内のテキストファイルを書く(ProjectNumber [スペース] [ダッシュ] [スペース]残り60文字に制限され、現在のテキスト )あなたがして、あなたの正規表現を交換する必要が

答えて

1

あなたは二つのグループ

-NewName ($_.Name -replace "^(\d+)[\s-_]+(Project.{0,$MaxLength}).*$",'$1 - $2') 
+0

をする必要があります異なる区切り文字を排除するために、私は番号の後にアンダースコアを持ついくつかのプロジェクトなどを持っているように見えるん: 12012_Project名前 つかむための簡単な方法があります "すべての数字は[a-zA-Z]まで何も無視し、その間に - を組み合わせます。 (文字制限を維持する) –

+0

少なくとも1つが存在しなければならない文字のクラスにアンダースコアを含めます。私は上にそれを変更します。 – LotPings

+0

2つのキャプチャグループの間に「Project」という言葉が常に存在する場合は、「。+」を入れてください。 ' - $ '、' $ 1 - $ 2 ')' – LotPings

0

'^(\d+\s*-\s*.{0,60}).*' 

詳細

  • ^ - 文字列
  • (\d+\s*-\s*.{0,60})の開始 - グループ1:
    • \d+から1桁以上
    • \s*-\s* - 0+空白
    • .{0,60}で囲まれたハイフン - 改行以外の0〜60文字のいずれか
  • .* - $1後方参照行の末尾

までの任意の0+文字は、グループ1でキャプチャされた値を保持します。

関連する問題