【问题标题】:Read file name from its part in powershell从PowerShell中的部分读取文件名
【发布时间】:2017-11-24 15:19:13
【问题描述】:

我有一个适用于三个文件的脚本。其中之一的名称始终相同,因此直接在脚本代码中设置。另外两个的名字每个月都不一样。它们看起来像这样:

proemail vytvoreni_9.2017 2017-10-16.csv

proemail neaktivni_9.2017 2017-10-16.csv

扩展前的最后 10 个字符是创建日期,9.2017(在这种情况下)定义了该报告与哪个月份相关。但是日期完全不同,所以我想知道是否可以在不使用 Read-Host cmdlet 使脚本在运行时询问文件名的情况下读取文件名。

现在我需要告诉脚本“从文件名中读取文本,以 proemail vytvoreni_ 开头”(或分别为“proemail neaktivni_”)。我怎样才能做到这一点?最后一个文件名在第二个单词中不同。我需要在没有扩展名的情况下读取文件名。

我希望这是可以理解的,我需要达到的目标。

【问题讨论】:

  • 你能把你试过的代码贴出来让我们看看你卡在哪里了吗?
  • 好吧,我并没有完全陷入困境,脚本运行良好,我只是想让它更易于使用。现在我使用 Read-Host cmdlet 获取脚本 $ReportAdded = Read-Host "File name of added users report"$ReportRemoved = Read-Host "File name of removed users report" 的文件名,我想将其替换为自动获取文件名的过程。
  • Get-Content -File "C:\temp\proemail vytvoreni*"?需要注意的是,如果有多个文件,它将全部读取。因此,只要您可以确定或有检查逻辑,我就不会在这里看到问题。
  • 嗯,我在 Get-Content cmdlet 中看不到任何 -File 参数。我有 PS 5.1
  • 试试 -Path

标签: powershell text filenames


【解决方案1】:

假设文件位于与$PSScriptRoot 等效的目录中,那么这应该可以工作。

$ReportPridani = Get-ChildItem -Path $PSScriptRoot | Where {$_.Name -like 'proemail vytvoreni*' -or $_.Name -like 'proemail neaktivni*'}

Get-ChildItem 列出目录中的文件,Where 过滤它们。您也可以在此处包含您的第三个静态命名文件,方法是将 -or $_.name -eq 'static filename' 添加到 Where {} 部分(如果它与其他文件位于同一文件夹中)。

【讨论】:

  • 这加载了文件的所有内容,而不是文件名。
  • 好的,只是从最后删除 Get-Content(更新答案)
  • 当我这样修改它时,它可以工作:$ReportPridani = (Get-ChildItem -Path $PSScriptRoot | Where {$_.Name -like 'proemail vytvoreni*'}).ToString() 但问题是,它读取的名称包括扩展名。稍后在脚本中,我根据名称 $Datum = Get-Date -Date $ReportPridani.Split(".")[1].Substring($ReportPridani.get_Length()-10) 的最后 10 个字符确定脚本应该使用的开始和结束日期。 split 方法原本没有,我现在添加了,因为字符串包含扩展名。
  • 但是我得到了错误,开始索引不能大于字符串的长度。它不应该是,第二个字符串应该是 15 个字符长。
  • 我意识到,现在当我使用点分割时,我用于日期的字符串总是 15 个字符长,所以现在我可以用简单的数字定义子字符串(在我的情况下为 5)并且不必使用get_Length 方法。所以脚本已经可以正常工作了。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2021-09-19
  • 2017-01-13
  • 2016-11-02
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多