在powershell中将两个字符串连接导出到文本文件

时间:2015-11-28 11:26:15

标签: powershell hyper-v

我正在尝试在powershell中加入两个字符串并导出到一个文件,但我没有得到理想的结果,我对powershell很新。

    $vm=Get-Content "c:\vmfile.txt"

ForEach($vm1 in $vm)
{
$boot="_boot.vhd"
$bname=$vm1+$boot 
write-output $bname+$boot | out-file "C:\rep.txt" -Append
} 

为此,我期待文本文件中的输出:

VM_boot.vhd
VM2_boot.vhd
VM3_boot.vhd

但结果如下:

VM
VM2
VM3_boot.vhd 

只有结果的最后一行才有正确的输出。

2 个答案:

答案 0 :(得分:1)

你可以这样做,不知道为什么你连续$ boot两次:

public sealed partial class MainPage
{

    public MainPage()
    {
        InitializeComponent();
    }


    private void MainPage_OnLoaded(object sender, RoutedEventArgs e)
    {
        var scrollViewer = ListV.GetFirstDescendantOfType<ScrollViewer>();
        scrollViewer.ViewChanged+=BarScroll;          
    }

    private void BarScroll(object sender, ScrollViewerViewChangedEventArgs e)
    {
        var scrollbars = (sender as ScrollViewer).GetDescendantsOfType<ScrollBar>().ToList();
        var verticalBar = scrollbars.FirstOrDefault(x => x.Orientation == Orientation.Vertical);
        if (verticalBar.Value >= verticalBar.Maximum)
        {
            System.Diagnostics.Debug.WriteLine("We are at the bottom");
            Messenger.Default.Send<NotificationMessage>(new NotificationMessage("LoadMore"));
        }           
    }        
}

或者更像Powershellish,比如使用ForEach-Object:

$vm=Get-Content "c:\vmfile.txt"
$boot="_boot.vhd"

ForEach($vm1 in $vm)
{        
    $bname=$vm1+$boot 
    $bname | out-file "C:\rep.txt" -Append
} 

确保初始化/创建c:\ rep.txt,否则它只会附加

答案 1 :(得分:1)

让我们更简单。

Get-Content "c:\vmfile.txt" | ForEach-Object {
   "$($psitem)_boot.vhd" | out-file "C:\rep.txt" -Append
}

PowerShell是关于对象和管道的,这个例子同时具有两者。 PowerShell将读取该文件,并为文件中的每一行运行波形(花括号)中的代码块。

在squiqqles中,我们引用了我们当前的对象(使用$ psitem指针[但很多人使用$ _代替它们,它们的意思相同]),我们正在构建字符串我们想要转储到文件中。

更简单,我认为这是PowerShell应该如何使用的一个更好的例子。如果您对此有用,请与我们联系:_