2017-08-18 19 views
0

私のPowerShellスクリプトは毎回インクリメント番号でファイルの名前を変更したいと思います。ファイル名の文字列に自動インクリメントの数字を追加する

これは私のファイル名:abc-0.2.0.1-SNAPSHOT-barista.zipです。 私は下記のようにそれをするたびにインクリメントします構文書きたい:

 
abc-0.2.0.2-SNAPSHOT-barista.zip 
abc-0.2.0.3-SNAPSHOT-barista.zip 
abc-0.2.0.4-SNAPSHOT-barista.zip 
abc-0.2.0.5-SNAPSHOT-barista.zip 
abc-0.2.0.6-SNAPSHOT-barista.zip 
abc-0.2.0.7-SNAPSHOT-barista.zip 
abc-0.2.0.8-SNAPSHOT-barista.zip 
abc-0.2.0.9-SNAPSHOT-barista.zip 
abc-0.2.0.10-SNAPSHOT-barista.zip 
abc-0.2.0.11-SNAPSHOT-barista.zip 

など&hellipを。あなたは何ができるか

+1

'場合( "abc-0.2.0.1-SNAPSHOT-barista.zip" -match「(ABC - (\ D +){3})(\ D +)(。 "($ Matches [1])$([$ Matches [4])"} ' –

答えて

0

は毎回あなたが1 すなわちによるアクションの増加変数を実行後、変数

$version = 3 

に0.2.0.xビットを設定されています。

*perform action* 
$version++ 
2

は、コールバック関数での正規表現の置換を使用する:あなたが最初に同じ長さにそれらを取得する必要があり、最高数を評価するために

$name = 'abc-0.2.0.4-SNAPSHOT-barista.zip' 

[regex]$re = '(.*?\.)(\d+)(-SNAPSHOT-.*\.zip)' 
$cb = { 
    $a, $b, $c = $args[0].Groups[1..3].Value 
    '{0}{1}{2}' -f $a, ([int]$b+1), $c 
} 

$re.Replace($name, $cb) 
1

、そうでない場合は10をソートアルファでは、9未満です。


私はまだ正規表現に苦労しましたが、アンスガーは速かったので、私はこれらの二つの部分

を組み合わせます
$Last = Get-ChildItem abc-*-SNAPSHOT-barista.zip | 
    Sort-Object {[Regex]::Replace($($_.Basename),'\d+',{$args[0].Value.PadLeft(10, '0')})}| 
    Select -Last 1 

[regex]$re = '(.*?\.)(\d+)(-SNAPSHOT-.*\.zip)' 
$cb = { 
     $a, $b, $c = $args[0].Groups[1..3].Value 
     '{0}{1}{2}' -f $a, ([int]$b+1), $c 
} 
$re.Replace($Last.Name, $cb) 

サンプル出力:

> Q:\Test\2017\08\18\SO_45748408.ps1 
abc-0.2.0.12-SNAPSHOT-barista.zip 
関連する問題