2016-08-31 22 views
1

私はpowershellスクリプトで質問があります。私は毎日のタスクスケジューラを持っていて、12122_000000.txtという名前のファイルをエクスポートしてC:\ドライブに保存します。私はC:\ Reportに別のReportフォルダも持っています。そのReportフォルダには、12122_000001.txt、12122_000002.txt、12122_0000003.txt、12122_0000004.txtという名前のファイルがたくさんあります。powershellスクリプトでファイル名の次の増分番号への名前変更

最新のファイル名を見つけるためにレポートフォルダをチェックするスクリプトが必要です。次に、C:¥のファイル名12122_000000.txtをC:¥Reportに移動し、最も高い名前で名前を変更します。ファイル名の形式は12122_xxxxxx.txtでなければなりません。

スクリプトを書き込もうとしましたが、うまくいかなかった。私がパワーシェルの知識を得るのを助けてください。 $変数iは、実際のファイル名から導出されなければならない

$SourceFile = "C:\12122_000000.txt" 
$DestinationFolder = "C:\Report" 
if (Test-Path $SourceFile) 
{ 
$latest = Get-ChildItem -Path $DestinationFolder| Sort-Object Name -Descending | Select-Object -First 1 
$i = 1 
Move-Item -path $SourceFile -destination $latest.basename + $i++ + ".txt") 
} 

おかげ

+1

私はあなたが必要と思うここ[http://stackoverflow.com/questions/10287762/powershell-script-filename-increment](http://stackoverflow.com/questions/10287762/powershell-script-filename -increment) –

+0

私はそれを試しましたが、それは私の場合ではありません。ありがとう –

+0

あなたがしようとしているもののジストは、その答えでカバーされています。インクルード番号とゼロで埋められています。明らかにあなたのコードにそれを適応させる必要があります。将来的に_itがうまくいかなかったことを説明してください._ – Matt

答えて

2

このファイル名をインクリメントしてファイルを移動する簡単な方法は次のとおりです。

$SourceFile = "C:\12122_000000.txt" 
$DestinationFolder = "C:\Report" 
if (Test-Path $SourceFile) 
{ 
    $latest = Get-ChildItem -Path $DestinationFolder| Sort-Object Name -Descending | Select-Object -First 1 
    #split the latest filename, increment the number, then re-assemble new filename: 
    $newFileName = $latest.BaseName.Split('_')[0] + "_" + ([int]$latest.BaseName.Split('_')[1] + 1).ToString().PadLeft(6,"0") + $latest.Extension 
    Move-Item -path $SourceFile -destination $DestinationFolder"\"$newFileName 
} 
+0

あなたは男です。これは非常に簡単で簡単な方法です。 –

0

は、最新の$の中に保存された:

:それは表現だから

$prefix, $i = $latest.baseName -split '_' 
$i = '{0:d6}' -f ([int]$i + 1) 

パラメータは括弧で囲む必要があります

Move-Item $SourceFile -dest (Join-Path $DestinationFolder "$prefix`_$i.txt") 
0

すべてのファイルインデックスの一覧を抽出する対象のディレクトリを指定するには、Measure-Object CmdLetを使用して最大インデックスを特定し、1つを追加してからファイルを移動します。

私はセットアップにテストENVを:これをした

モードへ
$rootDirectory = "C:\test" 
$filePrefix = "12122_" 
$fileExt = ".txt" 
$filePathFmt = "{3}\{1}{0,6:000000}{2}" 
@(1..12) | % { New-Item ([String]::Format($filePathFmt, $_, $filePrefix, $fileExt, $rootDirectory)) -Type File } | Out-Null 
New-Item ([String]::Format($filePathFmt, 0, $filePrefix, $fileExt, "C:")) -Type File | Out-Null 

このターゲット・ディレクトリに0索引ファイル:

$nextIdx = (Get-ChildItem $rootDirectory -Filter "${filePrefix}*${fileExt}" | Select-Object -ExpandProperty Name | ForEach-Object { [int]($_.Replace($filePrefix,"").Replace($fileExt, "")) } | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum) + 1 
Move-Item ([String]::Format($filePathFmt, 0, $filePrefix, $fileExt, "C:")) ([String]::Format($filePathFmt, $nextIdx, $filePrefix, $fileExt, "$rootDirectory")) 

また出力:

PS C:\> $rootDirectory = "C:\test" 
PS C:\> $filePrefix = "12122_" 
PS C:\> $fileExt = ".txt" 
PS C:\> $filePathFmt = "{3}\{1}{0,6:000000}{2}" 
PS C:\> @(1..12) | % { New-Item ([String]::Format($filePathFmt, $_, $filePrefix, $fileExt, $rootDirectory)) -Type File } | Out-Null 
PS C:\> New-Item ([String]::Format($filePathFmt, 0, $filePrefix, $fileExt, "C:")) -Type File | Out-Null 
PS C:\> Get-ChildItem $rootDirectory | Select-Object -ExpandProperty FullName 
C:\test\12122_000001.txt 
C:\test\12122_000002.txt 
C:\test\12122_000003.txt 
C:\test\12122_000004.txt 
C:\test\12122_000005.txt 
C:\test\12122_000006.txt 
C:\test\12122_000007.txt 
C:\test\12122_000008.txt 
C:\test\12122_000009.txt 
C:\test\12122_000010.txt 
C:\test\12122_000011.txt 
C:\test\12122_000012.txt 
PS C:\> $nextIdx = (Get-ChildItem $rootDirectory -Filter "${filePrefix}*${fileExt}" | Select-Object -ExpandProperty Name | ForEach-Object { [int]($_.Replace($filePrefix,"").Replace($fileExt, "")) } | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum) + 1 
PS C:\> Move-Item ([String]::Format($filePathFmt, 0, $filePrefix, $fileExt, "C:")) ([String]::Format($filePathFmt, $nextIdx, $filePrefix, $fileExt, "$rootDirectory")) 
PS C:\> Get-ChildItem $rootDirectory | Select-Object -ExpandProperty FullName 
C:\test\12122_000001.txt 
C:\test\12122_000002.txt 
C:\test\12122_000003.txt 
C:\test\12122_000004.txt 
C:\test\12122_000005.txt 
C:\test\12122_000006.txt 
C:\test\12122_000007.txt 
C:\test\12122_000008.txt 
C:\test\12122_000009.txt 
C:\test\12122_000010.txt 
C:\test\12122_000011.txt 
C:\test\12122_000012.txt 
C:\test\12122_000013.txt 
PS C:\> 
+0

あなたの助けていただきありがとうございますが、まだ複雑です。 –

関連する問題