【问题标题】:Appending outputs to existing text file将输出附加到现有文本文件
【发布时间】:2015-01-12 11:41:58
【问题描述】:

我在下面有这段 powershell 代码,它从文件夹 C:\Users\XX\Desktop\Powershell\ 中的每个单独的 zip 文件在文件夹 C:\Users\XX\Desktop\info\ 中创建一个单独的文本文件zip,文本文件的名称为 zip 文件的名称。

Get-ChildItem -Path "C:\Users\XX\Desktop\Powershell\Zip" -Recurse -exclude '*.info' | ForEach { [System.IO.File]::WriteAllText("C:\Users\XX\Desktop\info\"+ $_.Name + ".txt", $_.FullName)} 

除此之外,我还有下面的脚本,它获取 zip 文件的最后修改日期

$path = 'C:\Users\XX\Desktop\Powershell\Zip'

$files = Get-ChildItem $path -Recurse -excluse '*.info' 

foreach($file in $files){

$file.lastwritetime

还有这个获取计算机名的命令

{
(Get-WmiObject Win32_Computersystem).name 
}

所有这些都将在一个脚本中,但我需要将脚本第 2 和第 3 部分的输出附加到脚本第一部分中创建的文本文件中,并附加到相应的文件中。

我尝试了几个命令,主要的命令是 [System.IO.File]::AppendAllText,但我似乎对此无能为力。

对我应该这样做的正确方式有什么想法吗?

谢谢。

【问题讨论】:

    标签: powershell append powershell-2.0 system.io.file


    【解决方案1】:

    你可以试试这个:

    $path = 'C:\Users\XX\Desktop\Powershell\Zip'
    
    $files = Get-ChildItem $path -Recurse -Exclude '*.info' 
    
    $ComputerName = (Get-WmiObject Win32_Computersystem).name
    
    foreach($file in $files) {
    
        $OutputFilePath = "C:\Users\XX\Desktop\info\"+ $file.Name + ".txt"
    
        [System.IO.File]::WriteAllText($OutputFilePath, $file.FullName)
    
        $file.lastwritetime | Add-Content $OutputFilePath
    
        $ComputerName | Add-Content $OutputFilePath
    }
    

    【讨论】:

    • 将Get-WMIObject移出循环,无需重复查询机器名称,因为每次都会得到相同的答案。 WMI 也可能非常慢,因此这可能会显着减慢执行时间。
    • 是的。我编辑了答案以将“Get-WmiObject Win32_Computersystem”移出 Foreach 循环以避免重复的 WMI 查询。
    猜你喜欢
    • 2011-09-09
    • 2015-11-10
    • 2017-03-20
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多