【问题标题】:How to Use While loop in Powershell?如何在 Powershell 中使用 While 循环?
【发布时间】:2015-07-01 01:37:00
【问题描述】:

我使用变量 $listing 作为文件名,如下所示。

Get-Content BHS_output.txt | Select-String -pattern $listing| sort | Foreach-Object {$_ -replace "$listing", ""} > $listing

其中$listing 是第一次迭代时文件第一行的变量。在第二次迭代中

$listing = Get-Content .\file.txt | select-object -First 1 . 

$listing 必须有 BHS_E_CNBY20150622035126.CSV .. 不是 BHS_E_BHSA20150622035126.CSV 。

文件名:TestFile1_sorted.txt

BHS_E_BHAA20150622035126.CSV
BHS_E_BHSA20150622035126.CSV
BHS_E_CNBY20150622035126.CSV
BHS_E_PACS20150622035126.CSV

【问题讨论】:

  • 如果是相关的,你能告诉我们你的意思是什么我需要在while循环语句中使用输出文件超过5次
  • 我使用变量 $listing 作为文件名,如下所示。获取内容 BHS_output.txt |选择字符串模式 $listing|排序 | Foreach-Object {$_ -replace "$listing", ""} > $listing 其中 $listing 是第一次迭代时文件第一行的变量。在第二次迭代 $listing = Get-Content .\file.txt |选择对象-First 1 。 $listing 必须有 BHS_E_CNBY20150622035126.CSV .. 不是 BHS_E_BHSA20150622035126.CSV。
  • 所以我需要从文件 TestFile1_sorted.txt 中删除第一行以继续下一步。我是 Sybase 开发人员,这是我的第一个项目。在此先感谢马特。
  • 你能edit你的问题与这些信息。您的问题可能与您的标题所暗示的不同。

标签: powershell powershell-2.0


【解决方案1】:

您将遇到的错误是保存到您正在读取的同一文件中,该文件是您创建的管道的产品。每行一次处理一个,因此第二行被写入文件,而文件仍处于打开状态以继续读取。

(Get-Content $path) | Select-Object -Skip 1 | Set-Content $path

(Get-Content $path) 放在括号中会将整个文件处理到内存中。请注意文件是否很大。然后您的其余代码将正常工作。

【讨论】:

  • 如果Get-content 和Set-content 的路径都一样,能用吗?对我来说,它的抛出错误是无法打开文档。
  • @JohnChristopher 是的,如果文件尚未打开并且您首先拥有正确的权限,则此确切代码将起作用。
【解决方案2】:

您是否尝试过“选择”而不是“选择对象”

Get-Content TestFile1_sorted.txt | Select -Skip 1

之前有人回答过这个问题: Remove Top Line of Text File with Powershell

get-content $file |
    select -Skip 1 |
    set-content "$file-temp"
move "$file-temp" $file -Force

【讨论】:

  • SelectSelect-Object 相同,一个是另一个的别名。
【解决方案3】:

你可以这样做:

$a = Get-Content C:\temp.txt
$a[1..-1] | Out-File c:\newfile.txt

如果你想覆盖文件替换目的地

它的作用是创建新数组并从第二个到最后选择它

【讨论】:

  • 我想在while循环语句中使用它。所以它不应该有目标文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2018-02-06
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多