我有一个每天生成的文件。它使用文件名dailyfile.dat
生成。
需要将文件复制到目标文件夹中,并使用比目标文件夹中已有的文件高一位的数字进行编号,以便所有文件共存并且在编号上没有间隙。
换句话说,我需要每天的副本为目标文件夹中已有的内容添加+1。如果0,1& 2存在于目标文件夹中,然后放置在目标中的新副本应命名为3,依此类推。如果不存在任何文件,则将其命名为0。
即
已存在
c:\source\dailyfile.dat
c:\destination\dailyfile0.dat
过程
copy c:\source\dailyfile.dat -> c:\destination\dailyfile1.dat
结果
c:\destination\dailyfile0.dat
c:\destination\dailyfile1.dat
答案 0 :(得分:1)
或者,您可以解析文件的名称,获取最后的数字,选择最高的数字,然后添加一个以创建新路径。如果您存档了一些日常文件,这样做的好处就是能够“选择离开的地方”。
$src = 'c:\source\dailyfile.dat'
$dstFolder = 'c:\destination'
[int32]$LastFile = Get-ChildItem $dstFolder |
Where {$_.BaseName -match "^dailyfile(\d+)"} |
ForEach {$Matches[1]} |
Sort -Descending |
Select -First 1
If ($LastFile) {$LastFile++} else {$LastFile = 0}
$Dest = "C:\Destination\DailyFile$LastFile.dat"
Copy-Item $src -Dest $Dest
这样一来,如果你每年将它们存档或者几年内存档,你最终会得到(假设你总是在文件夹中留下至少1个文件):
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 5/21/2015 7:47 PM 2015
d---- 5/21/2016 7:47 PM 2016
-a--- 5/21/2017 2:00 PM 580984 DailyFile730.dat
-a--- 5/22/2017 2:00 PM 392610 DailyFile731.dat
答案 1 :(得分:0)
这样的事情应该有效:
$src = 'c:\source\dailyfile.dat'
$dstFolder = 'c:\destination'
$f = Get-Item $src
$n = 0
do {
$dst = Join-Path $dstFolder ($f.BaseName + $n + $f.Extension)
$n++
} while (Test-Path -LiteralPath $dst)
Copy-Item $src $dst
答案 2 :(得分:0)
添加到Ansgar的帖子,如果你可以包含像_这样的分隔符,那么你可以使用:
$src = 'c:\source\dailyfile.dat'
$dstFolder = 'c:\destination'
#Get the number from the last file in the destination directory
[int]$NextNum = [int](gci $dstFolder | Sort-Object -Property Basename | Select -Last 1).basename.split("_")[1] + 1
#Get source file
$f = Get-Item $src
# Add more zeros in the ToString for more padding
$dst = Join-Path $dstFolder ($f.BaseName + "_" + $NextNum.ToString("000") + $f.Extension)
Copy-Item $src $dst