如何在同一行上回显回声的PowerShell循环?

问题描述:

目前我有后续的ps读取用户名称列表,然后回声。如何在同一行上回显回声的PowerShell循环?

用户名文件如下

username1 
username2 
username3 

的PS脚本如下

$userNames = (Get-Content usernames.txt)# | Sort-Object 
$userID=0 
$userNames.Count 
echo "FROM table WHERE (userID ='" 
For ($i =1; $i -le ($userNames.Count - 1); $i++) 
{ 
echo $userNames[$userID] "' OR userID='" 
$userID++ 
} 
echo $userNames[$userNames.Count - 1] "'" 

我希望能得到这个回声(最终写入一个文本文件)都在同一条线。

FROM table WHERE (userID = 'username1' OR userID = 'username2' OR userID = 'username3' 

我该如何解决这个问题?

你所寻找的是:

Write-Host "Blah" -NoNewLine 

我可能会重新写这样的剧本,以避免使用For...Loop

$userNames = (Get-Content usernames.txt) | Sort-Object 
$count = 0 

Write-Host "FROM table WHERE (" -NoNewLine 

$userNames |% { 
    Write-Host "userID='$_'" -NoNewLine 

    if(++$count -ne $userNames.Length){ 
     Write-Host " OR " -NoNewLine 
    } 
    else { 
     Write-Host ")" 
    } 
} 

该脚本还会采取的另一个优点PowerShell的一个很好的功能,它是字符串文字中的变量替换。 For-EachObject自动将$_设置为迭代期间的当前对象,PowerShell将自动分析字符串文本中的变量并替换它们的值。

而且...... 我才意识到整个事情可以归纳为以下:

$userNames = (Get-Content usernames.txt) | Sort-Object |% { "'$_'" } 

Write-Host "FROM table WHERE UserID in ($([String]::Join(",",$userNames)))" 

将产生以下查询:

FROM table WHERE UserID in ('username1','username2','username3') 

这是一个更加舒适脚本查询我的意见:)

+0

这正是我正在寻找的把戏。它现在打印userID ='username1'。我怎样才能摆脱1后的空间? – mhopkins321 2012-04-06 15:39:57

+0

@ mhopkins321 - 查看我上面的编辑 – Josh 2012-04-06 20:38:58