2015-04-23 91 views
1

PowerShell中的ISE以下.NET脚本填补数

$stream = [System.IO.StreamWriter] "t.txt" 
$number = 1 
1..500000 | % { 
     $stream.Write("TEST_825A_") 
     $stream.WriteLine($number) 
$number +=1 
} 

$stream.close() 

输出与

TEST_825A_1 

TEST_825A_2 

TEST_825A_3 

... 

TEST_825A_500000 

一个文本文件,我需要用它来零被填充到8个位数

TEST_825A_00000001 

... 

TEST_825A_00500000 

这不是我甚至更接近真实的语言,和谷歌搜索似乎并没有帮助。(或者我不明白何w来实现答案)

有人可以帮我一下吗?

编辑:

工作代码

$stream = [System.IO.StreamWriter] "t.txt" 
$number = 1 
1..1000 | % { 
     $stream.Write("TEST_825A_") 
     $stream.WriteLine($number.ToString("00000000")) 
$number += 1 

} 

$stream.close() 
+0

只是出于好奇;你为什么在PowerShell中使用.NET的东西?有现有的cmdlet,例如“YourString”| Out-File“t.txt”-Append? –

+0

因为。NET东西是假想最快产生非常大的输出,例如,当执行与10K行: 方法 \t 完成时间 '>>' \t 29号第 OUTFILE和[阵列] \t 27号 出口CSV \t 第22号 的StreamWriter \t 1.5秒 来源:HTTP://blogs.technet.com/b/gbordier/archive/2009/05/05/powershell-and-writing-files-how-快速写一个文件.aspx –

+0

出于好奇,你在这种情况下写入非常大的文件,还是这是一个过早的优化? –

回答

2

你可以给我们一个格式化掩码的ToString:

$number = 1 
$number.ToString("00000000") 

00000001

+0

谢谢! 这很简单:-) 它必须被放在Writeline里面,我已经用工作代码更新了原始文本。 –

2

我不希望这种改变运行广泛,但你也可以使用字符串PadLeft()方法。这可能比较慢的特殊原因是因为你需要先演员。

$number = 5 
([string]$number).PadLeft(8,"0") 

仍然,这将工作。

0

试试这个:

$Results = (1..500000) | % { "TEST_825A_$($_.ToString().PadLeft(8, "0"))" } 
$Results -Join "`r`n" | Set-Content "t.txt" 

这将做1名写入到HHD ..而不是多者。

我品尝它在1000 ..:

Measure-Command { 
    $Results = (1..1000) | % { "TEST_825A_$($_.ToString().PadLeft(8, "0"))" } 
    $Results -Join "`r`n" | Set-Content "t1.txt" 
} 

TotalMilliseconds:45.6615

Measure-Command { 
    $stream = [System.IO.StreamWriter] "Y:\Desktop\t2.txt" 
    $number = 1 
    1..1000 | % { 
    $stream.Write("TEST_825A_") 
    $stream.WriteLine($number.ToString("00000000")) 
    $number += 1 
    } 
    $stream.close() 
} 

TotalMilliseconds:63.435