为什么我的Out-File不将输出写入文件

马库斯·H。
$ready = Read-Host "How many you want?: "
$i = 0
do{
    (-join(1..12 | ForEach {((65..90)+(97..122)+(".") | % {[char]$_})+(0..9)+(".") | Get-Random}))
    $i++
} until ($i -match $ready) Out-File C:/numbers.csv -Append

如果我给脚本一个值10-它会生成10个随机数,并在pshell上显示出来。它甚至会生成一个名为numbers.csv的新文件。但是,它不会将生成的输出添加到文件中。这是为什么?

mklement0

你的Out-File C:/numbers.csv -Append电话是一个完全独立的声明从你的do循环,以及Out-File没有任何输入呼叫简单地创建一个文件。[1]

您需要链接(连接)命令|以使它们在管道中运行

但是,对于诸如循环这样语句do { ... } until语句不能按原样工作,但是您可以通过将其封装在脚本块)中并进行调用,将其转换为可以用作管道一部分的命令。调用操作(在一个运行范围),或,在成员访问运营商(直接调用方的范围内运行):{ ... }& .

[int] $ready = Read-Host "How many you want?"
$i = 0
& { 
  do{
    -join (1..12 | foreach { 
      (65..90 + 97..122 + '.' | % { [char] $_ }) +(0..9) + '.' | Get-Random
    })
    $i++
  } until ($i -eq $ready)
} | Out-File C:/numbers.csv -Append

注意[int]类型约束的转换Read-Host输出,这始终是一个字符串,在数量和使用的-eq运营商,而不是文本及基于正则表达式,-match运营商until条件; 此外,与的不必要分组(...)也已删除。

注意:一个替代的使用脚本块与任一&.操作员要使用$(...),该次表达式运算,如图MikeM的有用的答案这两种方法之间的区别在于,前者输出到管道-即输出对象一一-而$(...)总是收集所有输出在内存中,在前面

对于短小的输入集这不会有太大的差别,但在内存中的集合,$(...)进行可以成为具有大的输入集问题的,所以& { ... }/. { ... }方法通常是优选的


阿诺范博文的回答显示了你一个简单的替代do ... until循环基于一个for循环

foreach循环..范围运算符组合起来更加简洁明了(并且数组构造的成本通常可以忽略不计,并且总体而言仍然可以明显提高执行速度):

[int] $ready = Read-Host "How many you want?"
& { 
  foreach ($i in 1..$ready) {
    -join (1..12 | foreach { 
      ([char[]] (65..90 + 97..122)) + 0..9 + '.' | Get-Random 
    })
  }
} | Out-File C:/numbers.csv -Append

上面还显示了通过[char[]]强制转换将原始命令简化的方法,该强制转换将代码点数组直接转换为字符数组。

PowerShell [Core] 7+中,您可以利用Get-Random-Count参数进一步简化

[int] $ready = Read-Host "How many you want?"
& { 
  foreach ($i in 1..$ready) {
    -join (
      ([char[]] (65..90 + 97..122)) + 0..9 + '.' | Get-Random -Count 12
    )
  }
} | Out-File C:/numbers.csv -Append

最后,你可能已经避免了声明的完全循环,以及所使用的小命令代替ForEach-Object (其内置别名,也许是混淆的,是同样 foreach的,但也there'a %),因为你已经在做内部的循环(1..12 | foreach ...) :

[int] $ready = Read-Host "How many you want?"
1..$ready | ForEach-Object {
  -join (1..12 | ForEach-Object { 
    ([char[]] (65..90 + 97..122)) + 0..9 + '.' | Get-Random 
  })
} | Out-File C:/numbers.csv -Append

[1]在Windows PowerShell中Out-File默认情况下使用UTF-16LE(“ Unicode”)编码,因此,即使概念上为空的文件仍包含2个字节,即UTF-16LE BOMPowerShell [Core] v6 +中,所有cmdlet均默认使用无BOM的UTF-8,因此您将真正得到一个空(0字节)文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

为什么我的Out-File不将输出写入文件

来自分类Dev

R函数Sink()为什么不将摘要输出写入结果文件?

来自分类Dev

为什么这个并行过程不将输出写入文件,而是打印到控制台?

来自分类Dev

为什么我的输出重定向未写入文件?

来自分类Dev

为什么我无法写入mmaped文件

来自分类Dev

为什么我的StreamWriter无法写入文件?

来自分类Dev

为什么我的代码未写入文件?

来自分类Dev

为什么我的文件输出被覆盖?

来自分类Dev

XAMPP为什么不将路径写入CSS?

来自分类Dev

为什么所有Powershell输出都未写入txt文件

来自分类Dev

在文件中写入“时间”的输出,为什么需要括号?

来自分类Dev

为什么我的输出重复?

来自分类Dev

为什么我的输出重复?

来自分类Dev

为什么不将javascript document.getElementByID.value写入我的字段?

来自分类Dev

为什么我要写入的文件“不存在”?

来自分类Dev

为什么我无法获取文件路径并写入db?

来自分类Dev

为什么我无法获取文件路径并写入db?

来自分类Dev

为什么我仍然可以写入标有400的文件

来自分类Dev

为什么我的HTML表单不将数据发送到我的JS文件?

来自分类Dev

为什么Gradle输出检查(用于UP-TO-DATE跳过)不将输出目录中的其他“不良”文件视为差异?

来自分类Dev

为什么我的AVCapturePhotoOutput文件输出这么大?

来自分类Dev

为什么我的python脚本输出文件为空

来自分类Dev

如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

来自分类Dev

如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

来自分类Dev

为什么我的PHP脚本不将字符串与作为数组导入的文件进行比较?

来自分类Dev

为什么git clone不将源文件复制到我的本地目录?

来自分类Dev

为什么我的usort()输出未排序?

来自分类Dev

为什么我的变量在终端输出。重击

来自分类Dev

为什么我的jsp不显示输出?

Related 相关文章

  1. 1

    为什么我的Out-File不将输出写入文件

  2. 2

    R函数Sink()为什么不将摘要输出写入结果文件?

  3. 3

    为什么这个并行过程不将输出写入文件,而是打印到控制台?

  4. 4

    为什么我的输出重定向未写入文件?

  5. 5

    为什么我无法写入mmaped文件

  6. 6

    为什么我的StreamWriter无法写入文件?

  7. 7

    为什么我的代码未写入文件?

  8. 8

    为什么我的文件输出被覆盖?

  9. 9

    XAMPP为什么不将路径写入CSS?

  10. 10

    为什么所有Powershell输出都未写入txt文件

  11. 11

    在文件中写入“时间”的输出,为什么需要括号?

  12. 12

    为什么我的输出重复?

  13. 13

    为什么我的输出重复?

  14. 14

    为什么不将javascript document.getElementByID.value写入我的字段?

  15. 15

    为什么我要写入的文件“不存在”?

  16. 16

    为什么我无法获取文件路径并写入db?

  17. 17

    为什么我无法获取文件路径并写入db?

  18. 18

    为什么我仍然可以写入标有400的文件

  19. 19

    为什么我的HTML表单不将数据发送到我的JS文件?

  20. 20

    为什么Gradle输出检查(用于UP-TO-DATE跳过)不将输出目录中的其他“不良”文件视为差异?

  21. 21

    为什么我的AVCapturePhotoOutput文件输出这么大?

  22. 22

    为什么我的python脚本输出文件为空

  23. 23

    如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

  24. 24

    如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

  25. 25

    为什么我的PHP脚本不将字符串与作为数组导入的文件进行比较?

  26. 26

    为什么git clone不将源文件复制到我的本地目录?

  27. 27

    为什么我的usort()输出未排序?

  28. 28

    为什么我的变量在终端输出。重击

  29. 29

    为什么我的jsp不显示输出?

热门标签

归档